2 鼠标交互绘图 2.1 用鼠标绘图要解决的主要问题 paper51.com 2.1.1 捕获鼠标操作消息 copyright paper51.com VC++提供了足够的窗口消息和已经保护的消息处理函数解决这个问题.在应用程序Draw 中实现鼠标交互绘制图形元素时,将主要用到以下三个鼠标操作: 内容来自www.paper51.com 鼠标移动: OnMouseMove(UINTnFlags ,CPoint point) WM_MOUSEMOVE 内容来自www.paper51.com 按下左键:OnLButtonDown(UINT nFlags.CPoint point) WM_LBUTTOND copyright paper51.com 按下右键:OnRButtonDown(UINT nFlags.CPoint point) WM_RBUTTONDOWN http://www.paper51.com 2.1.2 捕捉所有的鼠标输入 http://www.paper51.com
在用鼠标交互绘制一个图形元素时,在已经开始绘图的情况下,不希望还能进行别的操作,以避免造成系统流程和变量初始化等方面的错误.VC++提供了两个成员函数来满足以上的功能需求: 内容来自论文无忧网 www.paper51.com CWnd::SetCapture(); paper51.com CWnd::ReleaseCapture(); copyright paper51.com
2.1.3 在屏幕上拖动图形 copyright paper51.com 在用鼠标交互绘制图形元素时,为了直观的看到所绘制的图形,一般采用拖动图形的方法. 内容来自www.paper51.com 2.1.4 保存图形数据到文档 paper51.com
用鼠标在屏幕上交互绘制的图形元素,要创建一个图形元素对象并将指向这个图形元素对象的指针保存起来. paper51.com 2.1.5 将图形以实际的形态重画 内容来自www.paper51.com 用鼠标交互绘制一个图形元素后,要在屏幕上马上显示出这个图形元素的实际形态,必须将图形元素以实际的形态重画.因为在VC++的R2_NOT绘制模式下,线条不是彩色的,拖动的图形都不是用图形元素的实际颜色.必须对图形元素以实际形态进行重画.在矢量图形系统设计中,一般采用CClientDC 对象,在交互绘制图形元素操作完成后,即时在视图中重画这个新增的图形元素. paper51.com 2.2 交互绘制各类图形元素 内容来自www.paper51.com 本设计主要实现交互绘制直线、圆、填充圆、圆弧、标注文本、连续直线、多边形区域、网络点的实现过程. 内容来自论文无忧网 www.paper51.com
2.2.1 加入绘图菜单 内容来自论文无忧网 www.paper51.com ⑴ 增加菜单资源. http://www.paper51.com
在应用程序Draw 的菜单资源中,增加一个菜单”鼠标绘图”.在这个菜单中包含直线圆填充圆圆弧标注文本连续直线多边形区域网络点网络连接等九个菜单项. 内容来自论文无忧网 www.paper51.com ⑵ paper51.com ①增加菜单的消息处理函数 copyright paper51.com
afx_msg void OnSize(UINTnType, int cx,int cy); paper51.com afx_msg voidOnMouseMove(UINT nFlags, CPoint point); paper51.com afx_msg voidOnLButtonDown(UINT nFlags, CPoint point); http://www.paper51.com afx_msg voidOnRButtonDown(UINT nFlags, CPoint point); 内容来自www.paper51.com
afx_msg void OnDrawArc(); 内容来自论文无忧网 www.paper51.com
afx_msg void OnDrawCircle(); 内容来自论文无忧网 www.paper51.com afx_msg voidOnDrawCircle1(); 内容来自www.paper51.com
afx_msg void OnDrawLine(); http://www.paper51.com afx_msg void OnDrawPline(); 内容来自论文无忧网 www.paper51.com afx_msg voidOnDrawPlineRgn(); copyright paper51.com afx_msg void OnDrawText(); paper51.com afx_msg void OnDrawNet(); 内容来自论文无忧网 www.paper51.com afx_msg voidOnDrawNetLink(); http://www.paper51.com ②在实现文件drawview.cpp中,增加了函数的消息映射机制: paper51.com ON_COMMAND(ID_DRAW_ARC,OnDrawArc) 内容来自www.paper51.com ON_COMMAND(ID_DRAW_CIRCLE,OnDrawCircle) 内容来自www.paper51.com ON_COMMAND(ID_DRAW_CIRCLE1,OnDrawCircle1) http://www.paper51.com ON_COMMAND(ID_DRAW_LINE,OnDrawLine) 内容来自论文无忧网 www.paper51.com ON_COMMAND(ID_DRAW_PLINE,OnDrawPline) paper51.com ON_COMMAND(ID_DRAW_RGN,OnDrawPlineRgn) paper51.com ON_COMMAND(ID_DRAW_TEXT,OnDrawText) 内容来自论文无忧网 www.paper51.com ON_COMMAND(ID_DRAW_NET,OnDrawNet) paper51.com
ON_COMMAND(ID_DRAW_NET_LINK,OnDrawNetLink) copyright paper51.com ③在实现文件drawview.cpp中,增加了消息处理函数的实现代码. paper51.com
|