77范文网 - 专业文章范例文档资料分享平台

第5章(4)

来源:网络收集 时间:2019-03-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

VC++培训教程草稿(2000年撰写) 张孝祥、袁龙友著 网址:http://www.it315.org

dc.LineTo(point); m_ptEnd=point; } CView::OnMouseMove(nFlags, point); }

代码dc.SetROP2(R2_NOT);是一条很重要的语句,该句代码设置逆转当前屏幕颜色的绘图模式。这种模式下,在屏幕上首次画出的线是可见的,但在同一位置再画一遍时,线就不见了。这样可以方便的实现不断画线、擦线的效果。

请读者运行光盘中的例子体会与前两个画线程序的不同之处,在结合代码,认真的理解本例画线的过程。

5.5.2 画刷的使用

本节将通过两个简单的小程序来讲解画刷的具体使用步骤。假如我们要在屏幕上的一段区域内用我们自定义的画刷将其填充,那么首先想到的是,如何来确定这块区域,学过几何的读者都知道,两点可以确定一条直线,那么两点也可以确定一块矩形区域。 5.5.2.1 带颜色的画刷的使用

本例所要实现的功能就是,在窗口上,以鼠标按下的点为起点,以鼠标抬起的点为终点,在两点组成的矩形范围内用我们自定义的画刷给其填充颜色。完整例程请参见光盘中的例子代码EX05-03。

? 第一步:新建一个MFC应用程序工程。

1) 启动Visual C++,选择File|New,弹出新建对话框。

2) 在新建对话框左边选择MFC AppWizard(exe),右边工程名为EX05_03或用户

自定义工程名,文件存放位置用户自定义。

3) 单击OK按钮,弹出MFC AppWizard对话框,选择新建Single document单文

档应用程序,其他一切采用默认设置。

? 第二步:在工程的CEX05_03View类中添加成员变量CPoint m_ptOrigin,用于记录

用户鼠标左键按下时的点坐标。

? 第三步:打开ClassWizard,在工程的CEX05_03View类中添加鼠标左键按下和鼠标

左键抬起的消息响应,分别为WM_LBUTTONDOWN和WM_LBUTTONUP。

? 第四步:完成WM_LBUTTONDOWN消息执行代码,当鼠标左键按下时,用户只需要一

个操作,就是保存按下的点的坐标。

1) 在工作台CEX05_03View类下面找到OnLButtonDown函数,双击它,在左边的

代码编辑区中显示该函数体。 2) 在该函数中填写如下代码:

void CEX05_03View::OnLButtonDown(UINT nFlags, CPoint point) {

// TODO: Add your message handler code here and/or call default m_ptOrigin =point;

CView::OnLButtonDown(nFlags, point); }

其中point是调用OnLButtonDown函数时,系统自动给我们传入的鼠标按下的点的坐标。

? 第五步:完成WM_LBUTTONUP消息执行代码,当鼠标抬起时定义画刷,并用画刷填

VC++培训教程草稿(2000年撰写) 张孝祥、袁龙友著 网址:http://www.it315.org

充鼠标按下和抬起之间的矩形区域,填充结束后,将原来的画刷选回。

1) 在工作台CEX05_03View类下面找到OnLButtonUp函数,双击它,在左边的代

码编辑区中显示该函数体。 2) 创建蓝色的画刷。

CBrush br(RGB(0,0,255));

3) 获取一个设备描述表。

CClientDC dc(this);

4) 定义一个指向画刷对象的指针变量,将新创建的画刷选入设备描述表,并将返

回的旧画刷保存在我们定义的指向画刷对象的指针变量中。

CBrush *pOldBr=dc.SelectObject(&br);

5) 在获取的设备描述表上,从原来保存的鼠标按下的点的位置到鼠标抬起的点的

位置内画一矩形,由于我们定义的带颜色的画刷已经选给设备描述表了,因此,设备描述表就用我们定义的带颜色的画刷来填充这块区域。

dc.Rectangle(CRect(m_ ptOrigin,point));

或者 dc.Rectangle(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y);

6) 绘图工作结束,将旧的画刷选回设备描述表。

dc.SelectObject(pOldBr);

OnLButtonUp函数中的完整代码如下: void CEX05_03View::OnLButtonUp(UINT nFlags, CPoint point)

{ // TODO: Add your message handler code here and/or call default CBrush br(RGB(0,0,255)); CClientDC dc(this); CBrush *pOldBr=dc.SelectObject(&br); dc.Rectangle(CRect(m_ptOrigin,point)); dc.SelectObject(pOldBr); CView::OnLButtonUp(nFlags, point);

}

代码中用到的Rectangle函数是设备描述表类CClient由基类CDC继承过来的成员函数,该函数实现的功能就是在用户指定的两点之间画一矩形,原形如下:

BOOL Rectangle( int x1, int y1, int x2, int y2 ); BOOL Rectangle( LPCRECT lpRect );

第一种参数形式是分别由两个点的x和y坐标来确定。

第二种参数形式是由一个CRect类的对象或一个指向RECT结构的指针来确定的。其中CRect类是由Windows RECT结构派生来的,因此,它继承了公用整数型数据类型。该类的构造函数如下所示:

CRect( );

CRect( int l, int t, int r, int b ); CRect( const RECT& srcRect ); CRect( LPCRECT lpSrcRect ); CRect( POINT point, SIZE size );

CRect( POINT topLeft, POINT bottomRight );

和CBrush有点类似的是,利用该类的构造函数就可以确定一块矩形区域。本例中用的

VC++培训教程草稿(2000年撰写) 张孝祥、袁龙友著 网址:http://www.it315.org

是最后一种构造函数,通过两个点来确定矩形区域。

在先前的5.4.1节中讲自定义画刷的时候,我们给出了几个例子,如创建剖面线刷子、创建空刷子,读者不妨,将前面的代码带入本例子中体验一下。

5.5.2.2 带位图的画刷的使用

本例所要实现的功能就是,在窗口上,以鼠标按下的点为起点,以鼠标抬起的点为终点,在两点组成的矩形范围内用我们自定义的画刷给其填充位图。要定义一个位图画刷,那么至少应该在工程中添加一个位图资源。完整例程请参见光盘中的例子代码EX05-04。

? 第一步:新建一个MFC应用程序工程,工程名为EX05_04或用户自定义。 ? 第二步:给新建的工程添加一幅位图资源 IDB_BITMAP1。

1) 单击工作台的

ResourceView标签,使工作台窗口显示的资源面板页面。

2) 展开最顶层的EX05_04 resources结点,我们发现没有Bitmap这个资源。鼠

标右击结点EX05_04 resources,在弹出的快捷菜单中选择Insert。如图5-01所示。

3) 选择Insert之后会弹出插入资源对话框。如图5-02所示,在该对话框中有许

多资源允许用户添加,如位图资源(Bitmap)、光标资源(Cursor)、对话框资源(Dialog)、菜单资源(Menu)、字符串资源(String Table)等等。这些资源可以是用户自己定义制作的,也可以是机器中已经存在的。单击对话框上的New按钮,表示我们要自己制作一个新资源;单击Import按钮表示往工程中导入一个机器上已经存在的资源;按钮Custom允许用户自己定义一个加入到工程中的资源的ID号,如果用户不指定,系统会为我们新添加的资源自动生成一个ID号。本例中我们打算自己绘制一个位图,因此,选中Bitmap一项,然后单击对话框右边的New按钮。

图5-01 选择插入资源

VC++培训教程草稿(2000年撰写) 张孝祥、袁龙友著 网址:http://www.it315.org

图5-02 插入资源对话框

4) 选择New以后,在工作台的资源面板中就多了一个位图资源,如图5-03所示,

并且系统自动为我们刚刚添加的位图资源命名了一个ID号为IDB_BITMAP1。 5) 同时,在工作台右边的代码编辑区中出现了一个位图编辑器,如图5-04所示,

在那里,我们可以利用编辑器右边的调色板和工具来编辑位图资源,还可以通过拉伸位图编辑器中网格周围的蓝色方点来调整位图的大小。例如,本例中画了一幅大小为15×15的红色五角星位图。

图5-03 资源面板中新添了位图资源

VC++培训教程草稿(2000年撰写) 张孝祥、袁龙友著 网址:http://www.it315.org

? ? ?

图5-04 在资源编辑器中编辑位图资源

第三步:在工程的CEX05_04View类中添加成员变量CPoint m_ptOrigin,用于记录用户鼠标左键按下时的点坐标。

第四步:打开ClassWizard,在工程的CEX05_04View类中添加鼠标左键按下和鼠标左键抬起的消息响应,分别为WM_LBUTTONDOWN和WM_LBUTTONUP。

第五步:完成WM_LBUTTONDOWN消息执行代码,当鼠标左键按下时,保存按下的点的坐标。

1) 在工作台CEX05_04View类下面找到OnLButtonDown函数,双击它,在左边的

代码编辑区中显示该函数体。 2) 在该函数中填写如下代码:

void CEX05_04View::OnLButtonDown(UINT nFlags, CPoint point) {

// TODO: Add your message handler code here and/or call default m_ptOrigin =point;

CView::OnLButtonDown(nFlags, point); }

其中point是调用OnLButtonDown函数时,系统自动给我们传入的鼠标按下的点的坐标。

第六步:完成WM_LBUTTONUP消息执行代码,当鼠标抬起时定义画刷,并用画刷填充鼠标按下和抬起之间的矩形区域,填充结束后,将原来的画刷选回。

1) 在工作台CEX05_04View类下面找到OnLButtonUp函数,双击它,在左边的代

码编辑区中显示该函数体。 2) 定义一个CBitmap类的对象,并加载上一步骤中添加的资源位图。利用该位图

创建一个位图画刷。

CBitmap bmp;

bmp.LoadBitmap(IDB_BITMAP1); CBrush br(&bmp);

?

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第5章(4)在线全文阅读。

第5章(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/524769.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: