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

📄 04.4 绘制连续线条.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
4.4 绘制连续线条 
Windows系统为我们提供了一个画图应用程序,在该程序中,利用画笔可以绘制连续的线条,下面我们就在 Draw程序中实现这样的功能。
为了绘制连续的线条,首先需要得到线条的起点,这在前面的内容已经实现了。然后需要捕获鼠标移动过程中的每一个点,这可以通过捕获鼠标移动消息 C WM_MOUSEMOVE)来实现。在此消息响应函数中,在依次捕获到的各个点之间绘制一条条非常短的线段,从而就可以绘制出一条连续的线条。
遵照这一思路,我们开始增加 Draw程序的功能。首先为视类增加鼠标移动消息 CWM_MOUSEMOVE)的响应函数(默认名称为 OnMouseMove)。这样,只要鼠标在应用程序窗口中移动时,都会进入到这个消息响应函数中。但这并不是我们所期望的,我们希望在鼠标左键按下去之后才开始绘图。因此,我们需要有一个变量来表示鼠标左键是否按下去了这一状态,然后在鼠标移动消息响应函数中对这一变量进行判断。当此变量为真,即鼠标左键已经按下去时,我们就开始绘图。于是,为视类添加一个 BOOL型的私有成员变量 m_bDraw,当鼠标左键按下去时,此变量为真:当鼠标左键弹起来时,此变量为假,这时,我们就不再绘制线条了。该变量的在视类头文件中的定义代码如下所示。 

private: 
BOOL ffi_bDraw; 

接下来在视类的构造函数中,将此变量初始化为 FALSE。 


ffi_bDraw = FALSE; 

当鼠标左键技下去时,即在视类的 OnLButtonDown函数中将此变量设置为真。 

ffi_bDraw = TRUE; 


当鼠标左键弹起来时,即在视类的 OnLButtonUp函数中将此变量设置为假。 


ffi_bDraw = FALSE; 

提酥示:11<读者轩可以叫将 OωButton
固 i侃此 盹饥ω阳∞叫 
然后在 On曲MOuseMoωve函数中首先对 m
1由岛∞臼 bDraw变量进行判断,如果其值为真,说明鼠标左键已经按下去了,这时就可以开始进行画线操作。还有一点需要注意,因为每给制一条线段后,下次应该从这条线段的终点开始继续绘制。因此,绘制完当前线段后,应该修
. 
'4 <411 <411 I 131 
第4

改线段的起点,将当前线段的终点作为下一条线段的起点,具体代码如例 4-23所示。例 4-23 
void CDrawView : : OnMouseMove(U工NT nFlags , CPoint point) { CClientDC dc(this); if(m_bDraw TRUE) 
dc . MoveTo(m-ptOrigin) ; 
dc . LineTo(point); 

//修改钱段的起点 
m-ptOrigin = point; 
CView: :OnMouseMove(nFlags , point); 
Build井运行 Draw程序,按下鼠标左键并在程序窗口中拖动鼠标,可以发现就像 Windows提供的画图程序中的画笔那样能够绘制连续的线条了,结果如图 4.27所示。.l!IIi础。....."泪' 





黯. r r:. 
图 4 .27在窗口中绘制连续线条

如果希望给线条增加颜色的话,就需要使用前面介绍的画笔类 (CPen类〉来实现。如例 4-24所示代码创建了一个红色的画笔,于是绘出的线条就是红色的。 
.lJ 4-24 

void CDrawview: : OnMouseMove(U工NT nFlags , CPoint point) { CClientDC dc(this); //创建一个红色的、宽度为 1的实线画笔 CPen pen(PS_SOLID , 1 , RGB(255 , O, O)); //把创建的画笔选入设备描述表 CPen *pOldPen = dc.SelectObject(&pen); if(m_bDraw TRUE) 
dc.MoveTo(m-ptOrigin) ; 
dc . LineTo(point) ; 
//修改线段的起点食 m-ptOr工g工n = point; 

1/恢复设备描述表 
dc . SelectObject(pOldPen) ; CView : :OnMouseMove(nFlags , point) ; 
读者可以 Build井运行 Draw程序,看看效果。 

⌨️ 快捷键说明

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