第四课:mfc画图-mfc消息映射机制的剖析

第四课:mfc画图-mfc消息映射机制的剖析

ID:10849585

大小:56.75 KB

页数:0页

时间:2018-07-08

第四课:mfc画图-mfc消息映射机制的剖析_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《第四课:mfc画图-mfc消息映射机制的剖析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MFC消息映射机制的剖析,讲述如何运用ClassWizard,,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的函数进行响应的。掌握设备描述表及其封装类CDC的使用,CDC是如何与具体的设备发生关联的,融合具体的画图程序进行分析。如何设置封闭图形的填充刷子(位图画刷与透明画刷的使用)。主要介绍一些绘图方面的知识。程序实例:新建工程:->MFCAppWizard[exe]文件面为Draw选择单文档的应用程序完成之后编译运行。画直线、画图、画刷画位图、空白画刷操作步骤l明确画图的思路:按

2、下鼠标左键画图的原点,拖动鼠标到另外一个位置松开鼠标左键画图的终点。l画图需要消息的捕获。捕获的对象是鼠标左键按下WM_LBUTTONDOWN和抬起WM_LBUTTONUP的消息。l这两消息的捕获、响应在窗口类中进行,可以在框架类Frame类中也可以在视类View类中。l要对消息进行捕获我们需要设置一些额外的函数,这些函数MFC都有提供。如我们在CMainFrame上点击右键选择增加windows消息处理Addwindowsmessagehandler……,选择WM_LBUTTONDOWN点击“AddHandler

3、”添加而后点击“EditExisting”退出。CMainFramemessagehandlers在CMainFrame最底下被创建。具体内容详见下面程序代码。(这段代码添加的位置是在implementationoftheCMainFrameclass中,文件名为CMainFrame.cpp)l为了简单说明每一步的作用这个程序做出的反应,在消息响应函数中添加一个MessageBox程序代码,这个MessageBox要比先前的WinApi中使用的少一个”HWNDhWnd,”参数。MessageBox在CWnd中是属于

4、其中的一个成员函数,他不需要句柄因为有一个数据成员保存了和这个窗口相关的句柄。这里只有一个MessageBox函数在Run的时候没有弹出来!具体原因看注意。l作为对比我们在CDrawView中也添加一个消息响应函数WM_LbuttonDown,同样设置一个MessageBox函数,这个函数的参数LpszText为”Viewclick!”。Run我们发现这个消息弹出来了。l把框架类的的对WM_LBUTTONDOWN响应的OnLButtonDown函数删除。删除方法看注意。l查看当我们增加WM_LBUTTONDOWN这

5、个消息响应的时候在头文件和源文件里边都增加了些什么。增加的程序代码详见5。当我们增加一个消息响应函数的时候会在三个地方增加代码,头文件中消息原型声明、源文件中跟消息响应函数关联的宏、源文件中消息响应函数。这里在构造函数中给成员变量赋初值。lMFC中的消息响应。粗略的来看MFC中的消息响应跟WinAPI中消息响应不一样没有调用GetMessage函数,也没有调用回调函数进行消息响应,MFC中对消息的处理方法为消息映射。l继续画图。我们调用的OnLButtonDown(UINTnFlags,CPointpoint)里边

6、的CPoint类,这个类就是代表了一个点。当我们按下鼠标左键这个点的参数已经通过CPP的对象传递进来,所需要做的就是在这个响应函数中把这个点的参数保存。做法:View类中增加一个私有成员变量CPointm_ptOrigin,View构造函数中将这个点初始化为零,在On_LButtonDown中用给这个点的赋值语句”m_ptOrigin=point;”代替MessageBox函数保存点的参数,见程序段8l对终点的响应,也就是对鼠标左键弹开的响应。要增加消息响应函数WM_LBUTTONUP.。l添加变量HDChdc,用

7、hdc保存获取到的View类窗口所表示的窗口的句柄,获取窗口句柄的程序段:hdc=::GetDC(m_hWnd);l作图函数:MoveToEx。先将点移动到源点然后再到终点,画线用LineTo划一条线。至此用API函数画图就已经结束了。相关的程序段见10lMFC给我们封装了一个画图的代码。MFC将所有跟窗口相关的封装到了CWND中所有跟左图相关的都封装到了CDC中。用MFC提供的封装函数CDC进行画图l第三种做图的方式CClientDC封装函数作图。l如果我们想要获得View窗口的父窗口指针即Frame框架窗口指针

8、(句柄),怎么做呢?看注意。l第四种作图方式:CWindowDC,与CClientDC一样在构造的时候自己调用GetWindowDC再析构的时候自己调用ReleaseDC。不过CWindowDC作图区域范围更广了可以在非客户区域作图。CWindowDC派生于CDC。l画彩色的线条,先前画的都是黑色的主要是因为在设备描述表中有一个缺省的画笔颜色为黑色。我们要创

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。