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

📄 04.2.6 绘制彩色线条.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
4.2.6 绘制彩色线条
上述各种方法实现的画线功能,绘制的都是黑色线条。这是因为设备描述表中有一个默认的黑色画笔,因此绘制的线条都是黑色的。如果想要绘制其他颜色的线条,首先需要创建一个特定颜色的画笔,然后将此画笔选入设备描述表中,接下来绘制的线条的颜色就由这个新画笔的颜色决定了。
可以利用MFC提供的类CPen来创建画笔对象。该类封装了与画笔相关的操作。它有三个构造函数,其中一个构造函数的原型声明如下所示。 
CPen( int nPenStyle, int nWidth, COLORREF crColor ); 

其中,第一个参数 (nPenStyle)指定笔的线型 (实线、点线、虚线等);第二个参数 CnWid由)指定笔的线宽:第三个参数 CcrColor)指定笔的颜色,这个参数是COLORREF类型,利用RGB这个宏可以构建这种类型的值。 RGB宏的声明如下所示。 
COLORREF RGB( BYTE bRed , BYTE bGreen, BYTE bBlue color); 
可以看到, RGB宏有三个参数,分别代表红、绿、蓝三种颜色的值。这三个参数都是 BYTE类型,取值范围为0-255。如果将RGB宏的三个分量全部设置为0,则得到黑色:如果全部设置为255,则得到白色:……可以将这三个分量设置成0-255之间的任意值,从而得到各种不同的颜色。


另外,在程序中,当构造一个 GDI对象后,该对象并不会立即生效,必须选入设备描述表,它才会在以后的绘制操作中生效。利用 SelectObject函数可以实现把 GDI对象选入设备描述表中,并且该函数会返回指向先前被选对象的指针。这主要是为了在完成当前绘制操作后,还原设备描述表用的。例如,当我们在某个局部范围内绘图时,可能需要改变画笔的颜色,并把新画笔选入设备描述表。当这部分绘图操作完成之后,需要恢复到原来的画笔颜色,然后完成其他部分的绘图操作。一般情况下,在完成绘图操作之后,都要利用 SelectObject函数把先前的 GDI对象选入设备描述表,以便使其恢复到先前的状态。
如例 	4-14所示是在 Draw程序中绘制彩色线条的程序代码。
例 4-14 

voi d CDrawView : :OnLButtonUp(UINT nFlags , CPoin t point) 

CPen pen(PS_SOLID , 1 , RGB(255 , O, O)) ; 
CCli entDC dc(th工 s) ; 
CPen* pOldPen = dc . SelectObject(&pe口) ; 
dC .M oveTo( m-p tOrig工 n) ; 
dc .Li neTo(point) ; 
dc . SelectObject(pOldPen) ; 
CView: :OnLButtonUp(nFlags , point) ; 

上述例 4-14所示代码中,首先创建一个实线画笔,其宽度为1,颜色为红色。接着利用 SelectObject函数将新画笔对象选入设备描述表。再利用画线函数绘制线条。最后,再次调用 SelectObject函数恢复设备描述表中的画笔对象。 
Build井运行 Draw程序,井拖动鼠标画线,这时可以看到这次绘制的是红色的线条。读者可以试着修改画笔的颜色,将会绘制出其他各种颜色的线条。也可以改变画笔的宽度,例如改为 10,此时程序运行结果如图 4.15所示。 
图 4.15宽度为 10的画笔绘制结果
也可以改变画笔的线型,例如选择虚线线型,即用下面这行代码替换例 4-14所示代码中构造画笔对象的那行代码。 
CPen pen(PS_DASH , 10 , RGB(255 , O, O)); 
. 	Build井运行 Draw程序,并拖动鼠标左键进行画线操作,将会发现绘制的还是一条实线,并不是想像中的虚线。这是因为画笔的宽度要小于等于 1时,虚线线型才有效。因此,
第4 



读者可以修改构造画笔对象的代码,将其宽度设置为1,再次Build并运行Draw程序,井拖动鼠标左键绘制线条,这时可以看到绘制的是虚线,如图4.16所示。另外,我们还可以绘制点线 (将画笔的线型改为 PS DOT),程序运行结果如图 4.17所示。
图 4.16绘制虚线条图 4.17绘制点线 

⌨️ 快捷键说明

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