⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 04.5 绘制扇形效果的线条.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
4.5 绘制扇形效果的线条
如果在上面绘制连续线条的程序中,保持每段小直线的起点不变,即以鼠标左键按下时的点为起点不变,分别绘制到鼠标移动点的直线,这时就会出现扇形的效果。也就是去掉上述例 4-24所示 OnMouseMove函数中修改线段起点的那行代码(食符号所在的那行代码),然后 Build井运行 Draw程序,按下鼠标左键井拖动鼠标,就可以看到类似扇形的效果,如图 4.28所示。
三111样嚣。山 


' 
.. πγ寸γ-a
图 4.28扇形效果

如果想要绘制一个带边线的扇形,就需要为视类再增加一个成员变量,用来保存鼠标上一个移动点,并在 OnMouseMove函数中添加代码,以实现从鼠标当前点到鼠标上个移动点的连线,也就是给制一条边线,同时,还要保存当前鼠标点,为下一条边线做准备。因此,我们首先给 CDrawView类增加一个 CPoint类型的私有成员变量 ffi_ptOld,代码如下所示。 
CPoint ffi.J)tOld; 
接着在 OnLButtonDown消息响应函数中初始化这个变量。 
ffi.J)tOld = point ; 
然后在 OnMou seMove中添加实现代码,结果如例 4-25所示。
例 4-25 

void CDrawView : :OnMouseMove(UINT nFlags , CPoint point) 食 CClientDC dc(this); 
" ‘ I 133 
第4 

//创建一个红色的、宽度为 1的实线画笔 
CRen pen(PS_SOLID , 1 , RGB(255 , O, O}}; 
/ /把创建的画笔选入设备描述表 
CPen *pOldPen = dc . SelectObject(&pen}; if(m_bDraw TRUE} 
dc.MoveTo(m-ptOrigin} ; 
dc.LineTo(point}; 
dc.LineTo(m-ptOld}; 

//修改线段的起点 
//m-ptOrigin = point; 
m-ptOld = point; 
//恢复设备描述表 
dc . SelectObject(pOldPen} ; 
. 
CV工ew : : OnMouseMove(口Flags, point}; 
Build并运行 Draw程序,在程序窗口中按下鼠标左键,然后拖动鼠标,即可看到带边线的扇形效果,如图 4.29所示。 |斗品础。川咀圄.

交伴(E) -.w 壶'也}帽'跑步 一4口自寄自 |品~ II'.tr. ' " 

. 
缸蜻厂-I-_Jf二 . 
图 4.29带边线的扇形效果

MFC还为我们提供一个设置绘图模式的函数 SetRO凹,该函数的声明如下所示。 

int SetROP2( int nDrawMode }; 
SetROP2函数带有一个参数,用来指定绘图模式。该参数有多种取值,例如 RLBLACK、 R2 WHITE、 R2 MERGENOTPEN等。这里,我们可以简单地看看这个函数的作用。在上述例 4-25所示 OnMouseMove函数中定义了设备描述表对象(食符号所示的那行代码)之后,添加下面这行代码。
dc.SetROP2(R2_MERGENOTPEN}; 
134 I胁'如

飞令·姐1日眉 R2_MERGENOTPEN模式的作用是:先把画笔的颜色取反,再与屏幕颜

色进行"或"操作,从而得到像素最终显示的颜色。 
Build并运行 Draw程序,在程序窗口中按下鼠标左键,并拖动鼠标,发现在程序窗口中看不到绘制的线条。这就是设置了 R2_MERGENOTPEN这种绘图模式的结果。
如果将绘图模式换成 R2_BLACK,再次运行程序,将会发现绘制的线条颜色始终都是黑色的。读者可以自行查看 MSDN中关于此函数的帮助信息,看看该参数的各种取值及其作用。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -