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

📄 04.1 mfc消息映射机制.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
本章将剖析 MFC消息映射机制,探讨发送给窗口的消息是如何被 MFC框架通过窗口句柄映射表和消息映射表来用窗口类的处理函数进行响应的。另外,还将讲述 ClassWizard 这一工具的运用,讨论设备描述表及其封装类 CDC的使用,以及 CDC是如何与具体的设备发生关联的,并结合具体的画图程序进行分析。 
' 

MFC 消息映射机制

首先为读者介绍一些绘图方面的知识,从最简单的画线开始。在程序中画线和在纸上画线不太一样,在纸上画线时,我们只需用笔在纸上拖动一下就可以绘制出一条线,但在程序中画线时需要知道两个点,即线条的起点和终点。程序中如何捕获到这两个点呢?读者回想一下,本书第 1章中就曾介绍, Windows程序是基于消息编程的。在程序运行过程中,当单击鼠标左键时,就可以获得一个点,即线条的起点。接着按住鼠标左键并拖动一段距离后松开鼠标,此时也可以获得一个点,即线条的终点。也就是说,我们需要捕获两个消息,一个是鼠标左键按下消息 (WM-LBUπONDOWN),在该消息响应函数中可以获得将要绘制的线条的起点:另一个是鼠标左键弹起来的消息 CWM_LBUTIONU凹,在该消息响应函数中可以在得将要绘制的线条的终点。有了这两个点就可以绘制出一条线。有了这一思路,下面我们就来实际编写一个绘制线条的程序。
首先新建一个单文档类型的 MFC AppWizard (exe)工程,取名为Draw。既可以在视类中进行鼠标左键操作消息的捕获,也可以在框架类中进行此项工作。先在框架类中进行这项工作。利用第 3章中介绍的为一个类添加某个消息的响应函数的方法,我们为 CMainFrame类添加 WM_LBUTTONDOWN这个消息的响应函数。在此函数内部,添加一条显示消息框的代码(利用 MessageBox函数实现),用来在程序运行时向用户表明鼠标左键确实按下去了。
在添加 MessageBox函数这行代码时,根据 VC++提供的智能提示(代码如下所示), 
读者可以发现此处的 MessageBox函数与我们在第 2章中利用 SDK编程时使用的 
MessageBox函数有所区别,此处的 MessageBox调用少了一个参数:窗口句柄 (HWND类型的变量hWnd)。在第3章中,我们已经讲述CWnd类定义了一个HWND类型的成员变量ffi_hWnd,用于保存当前窗口的句柄,并且该成员变量具有public类型的访问权限。这样,窗口的所有操作就不再需要传递这个句柄了,因为它己经是成员变量,可以直接使用。根据类继承性原理,所有派生于CWnd类的子类都拥有这一成员变量,用来保存当前子类窗口的句柄,因此在调用与子类窗口有关的操作时,也不再需要传递这个窗口句柄了。我们知道CMainFrame是CWnd类的一个子类,因此也就应该明白为什么此处MessageBox
函数会没有窗口句柄这一参数了。 
void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
 //TODO: Add your message handler code here and/or call default 
MessageBox("CFrameWnd::1int MessageBox (lPCTSTR IpszText, LPCTSTR IpszCaption = NULL", UINT nType = MB_OK);
} 
同时,读者会发现 MessageBox函数的后两个参数都具有默认值,因此,添加的 MessageBox函数调用如例4-1所示。 
{?~ 4-1 

void CMainFrarne::OnLButtonDown(UINT nFlags , CPoint point) 
// TODO: Add your rnessage handler code here and/or call default 
MessageBox ("MainFrame Clicked"); 
CFrameWnd::OnLButtonDown(nFlags , point) ; 
Build并运行Draw程序,然后在程序窗口上单击鼠标左键,发现程序并未如我们所愿,弹出消息框。这是为什么呢?我们暂时先把这一问题搁置一下,再看一下,如果在视类中捕获鼠标左键操作消息并处理,结果会如何?
小技巧:Build命令的功能是编译并链接应用程序。在VC++开发环境中,除了选择Build菜单中的Build菜单命令之外,还可以单击工具栏上的Build工具按钮,或者按F7键,都会执行Build命令。 

⌨️ 快捷键说明

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