VC++6绘制GIS地图不同类型的点
Win7; VC6;
效果如下;GIS系統需要在地圖上標點;點的類型不同;可以使用不同的標志;
新建一個單文檔工程;添加視圖類鼠標單擊處理函數;
在資源中編輯菜單如下;
添加 菜單處理函數,加到視圖類;
視圖類頭文件添加一個成員變量;pointtype;
單擊菜單設置要畫的點的類型;
視圖類構造函數做一個初始化;
? ??pointtype='s';
視圖類鼠標單擊處理函數;
void CGispointView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);if(pointtype=='s'){//三角形點CPoint* gispt = new CPoint[3];gispt[0].x = point.x;gispt[0].y = point.y-15;gispt[1].x = point.x-15;gispt[1].y = point.y + 15;gispt[2].x = point.x+15;gispt[2].y = point.y + 15;dc.Polygon(gispt, 3);}if(pointtype=='f'){dc.Rectangle(CRect(CPoint(point.x - 15, point.y - 15), CPoint(point.x + 15, point.y + 15)));}if(pointtype=='e'){dc.Ellipse(CRect(CPoint(point.x - 15, point.y - 15), CPoint(point.x + 15, point.y + 15)));}CView::OnLButtonDown(nFlags, point);}? ? 現在為了截圖看的清楚;點的大小是15;可以自己調;
CClientDC dc(this),獲取窗口客戶區的設備描述表;
CRect類,表示一個矩形;CPoint類,表示一個點;
?
看一下從類向導添加了菜單處理函數后,環境自己生成如下;
BEGIN_MESSAGE_MAP(CGispointView, CView)
?? ?//{{AFX_MSG_MAP(CGispointView)
?? ?ON_WM_LBUTTONDOWN()
?? ?ON_COMMAND(ID_MENUITEM32771, OnMenuitem32771)
?? ?ON_COMMAND(ID_MENUITEM32772, OnMenuitem32772)
?? ?ON_COMMAND(ID_MENUITEM32773, OnMenuitem32773)
?? ?//}}AFX_MSG_MAP
?? ?// 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()
如果把BEGIN_MESSAGE_MAP......END_MESSAGE_MAP里面的東西拿掉,菜單處理函數里面的代碼就不會起作用;
?
ON_COMMAND是MFC提供的宏,實現命令消息(如菜單、工具欄的選項消息)的消息響應函數的注冊;
使用方法為ON_COMMAND(消息ID, 響應函數名)
注冊了響應函數之后,一旦主窗口接收到該命令消息,程序就會調用我們提供的消息響應函數進行處理;
?
?
總結
以上是生活随笔為你收集整理的VC++6绘制GIS地图不同类型的点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC6生成随机浮点数、C++11的ran
- 下一篇: 安装Windows服务时出现试图加载格式