📄 ga---mfcview.cpp
字号:
// GA---MFCView.cpp : implementation of the CGAMFCView class
//
#include "stdafx.h"
#include "GA---MFC.h"
#include "GA---MFCDoc.h"
#include "GA---MFCView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CGAMFCView
IMPLEMENT_DYNCREATE(CGAMFCView, CView)
BEGIN_MESSAGE_MAP(CGAMFCView, CView)
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
END_MESSAGE_MAP()
// CGAMFCView construction/destruction
CGAMFCView::CGAMFCView()
{
// TODO: add construction code here
m_pGA = NULL;
}
CGAMFCView::~CGAMFCView()
{
}
BOOL CGAMFCView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
// CGAMFCView drawing
void CGAMFCView::OnDraw(CDC* pDC)
{
CGAMFCDoc* pDoc = GetDocument();
// ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
CRect rect;
// 获取绘制坐标的文本框
//获得对话框上的picture的窗口句柄
GetClientRect(&rect);
// 指针
//内存绘图
//(1)创建可兼容内存绘图DC
CDC memDC;
memDC.CreateCompatibleDC(pDC);
//(2)用CBitmap对象创建可兼容位图
CBitmap memBitmap;
CBitmap* pOldBmp = NULL;
memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
//(3)将CBitmap对象选入CDC对象(memDC)中,并存储原位图,以试当前操作完成后恢复
pOldBmp = memDC.SelectObject(&memBitmap);
//(4)在memDC上执行所有绘图操作
//将原DC的内容拷贝到可兼容内存DC中
memDC.BitBlt(rect.left,rect.top,rect.right,rect.bottom,pDC,0,0,SRCCOPY);
//自定义绘图函数,详细见源程序
if(m_pGA) WSDrawTSP(&memDC);
//if(m_pGA) WSDrawTSP(pDC);
//m_pGA = NULL;
/* DrawWave(&memDC); */
//(5)在memDC上绘图完毕后,用BitBlt()函数把内存绘图拷贝到屏幕上(窗口的DC)
pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY);
//(6)恢复原位图,并释放创建的可兼容DC对象和CBitmap对象
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
memBitmap.DeleteObject();
}
// CGAMFCView printing
BOOL CGAMFCView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CGAMFCView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CGAMFCView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
// CGAMFCView diagnostics
#ifdef _DEBUG
void CGAMFCView::AssertValid() const
{
CView::AssertValid();
}
void CGAMFCView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CGAMFCDoc* CGAMFCView::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGAMFCDoc)));
return (CGAMFCDoc*)m_pDocument;
}
#endif //_DEBUG
// CGAMFCView message handlers
void CGAMFCView::DrawCity(CDC* pDC, float x, float y)
{
x = ToInt(m_pTvRate*x);
y = ToInt(m_pTvRate*y);
//CDC* pDC = this->GetDC();
pDC->MoveTo(x, y);
CPen pen(PS_SOLID, 5, RGB(0xff, 0x00, 0x00));
CPen *oldpen;
oldpen = pDC->SelectObject(&pen);
pDC->LineTo(ToInt(x),ToInt(y));// pDC->LineTo(100, 100);
pDC->SelectObject(oldpen);
//pDC->DeleteDC();
}
void CGAMFCView::DrawAllCity(CDC* pDC)
{
int i;
//CDC* pDC = this->GetDC();
CString l_tmpStr;
for(i = 0; i < m_pGA->m_BaseCityInfo.m_CityNum; ++i)
{
DrawCity(pDC, m_pGA->m_BaseCityInfo.m_pCities[i].x, m_pGA->m_BaseCityInfo.m_pCities[i].y);
l_tmpStr.Format(_T("%2d"), i);
pDC->TextOut(ToInt(m_pTvRate*m_pGA->m_BaseCityInfo.m_pCities[i].x+2),
ToInt(m_pTvRate*m_pGA->m_BaseCityInfo.m_pCities[i].y+2),l_tmpStr);
l_tmpStr.Format(_T("%2d"), i);
pDC->TextOut(ToInt(m_pTvRate*m_pGA->m_BaseCityInfo.m_pCities[i].x+2),ToInt(m_pTvRate*m_pGA->m_BaseCityInfo.m_pCities[i].y+2),l_tmpStr);
}
//pDC->DeleteDC();
}
void CGAMFCView::DrawPath(CDC* pDC)
{
DrawCityConnect(pDC);
}
void CGAMFCView::DrawCityLine(CDC* pDC, float x1, float y1, float x2, float y2)
{
x1 = ToInt(m_pTvRate*x1);
y1 = ToInt(m_pTvRate*y1);
x2 = ToInt(m_pTvRate*x2);
y2 = ToInt(m_pTvRate*y2);
//CDC* pDC = this->GetDC();
pDC->MoveTo(x1, y1);
CPen pen(PS_SOLID, 2, RGB(0x00, 0xff, 0x00));
CPen *oldpen;
oldpen = pDC->SelectObject(&pen);
pDC->LineTo(x2, y2);
pDC->SelectObject(oldpen);
//pDC->DeleteDC();
}
void CGAMFCView::DrawCityConnect(CDC *pDC)
{
//l_GA.m_pCityInfoOfMembers[0].m_pCityOrder[i]
int i;
INT l_CityNum = m_pGA->m_BaseCityInfo.m_CityNum;
DrawAllCity(pDC);
for(i = 0; i < l_CityNum; ++i)
{
DrawCity(pDC, m_pGA->m_BaseCityInfo.m_pCities[ m_pGA->m_pCityInfoOfMembers[0].m_pCityOrder[i] ].x ,
m_pGA->m_BaseCityInfo.m_pCities[ m_pGA->m_pCityInfoOfMembers[0].m_pCityOrder[i] ].y);
DrawCityLine(pDC, m_pGA->m_BaseCityInfo.m_pCities[ m_pGA->m_pCityInfoOfMembers[0].m_pCityOrder[i] ].x ,
m_pGA->m_BaseCityInfo.m_pCities[ m_pGA->m_pCityInfoOfMembers[0].m_pCityOrder[i] ].y ,
m_pGA->m_BaseCityInfo.m_pCities[ m_pGA->m_pCityInfoOfMembers[0].m_pCityOrder[(i+1)%l_CityNum] ].x ,
m_pGA->m_BaseCityInfo.m_pCities[ m_pGA->m_pCityInfoOfMembers[0].m_pCityOrder[(i+1)%l_CityNum] ].y);
DrawCity(pDC, m_pGA->m_BaseCityInfo.m_pCities[ m_pGA->m_pCityInfoOfMembers[0].m_pCityOrder[(i+1)%l_CityNum] ].x ,
m_pGA->m_BaseCityInfo.m_pCities[ m_pGA->m_pCityInfoOfMembers[0].m_pCityOrder[(i+1)%l_CityNum] ].y);
}
}
int CGAMFCView::ToInt(float x)
{
return (int)(x + 0.5);
}
void CGAMFCView::WSDrawTSP(CDC *pDC)
{
pDC->FillSolidRect(0, 0, 1000, 1000, 0xffffff);
//Invalidate();
DrawPath(pDC);
}
void CGAMFCView::StartDraw()
{
CDC* pDC = this->GetDC();
OnDraw(pDC);
pDC->DeleteDC();
}
void CGAMFCView::TextDraw(int x, int y, CString val)
{
CDC *pDC = this->GetDC();
//pDC->TextOutW(x, y, val);
pDC->TextOut(x, y, val);
pDC->DeleteDC();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -