常用消息 1、WM_LBUTTONDOWN 产生:单击。 参数:wParam:包含一个整数值,以标识鼠标键的按下状态。鼠标的按下标识及说明: MK_LBUTTON 标识按下鼠标左键 MK_MBUTTON 标识按下鼠标中键 MK_RBUTTON 标识按下鼠标右键 lParam:长参数lParam的低字位包含当前坐标的x坐标,在高字节包含当前坐标的Y坐标。 相似的消息有:WM_LBUTTONUP、WM_RBUTTONDOWN、WM_RBUTTONUP、WM_LBUTTONDBLCLK、WM_RBUTTONDBLCLK 2、WM_KEYDOWN 产生:按下一个非系统键的时候产生该事件,系统键是指实现系统操作的组合键,例如,Alt与某个功能键的组合以实现菜单操作等。 参数:wParam:按下键的虚拟键盘码,虚拟键码用来标识按下或者释放的是哪个键,例如功能键F1的虚拟键码在windows.h文件中定义为VK_F1。 lParam:长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。 相似的消息有WM_KEYUP:放开按下的非系统键时产生的事件。 3、WM_CHAR 产生:按一个非系统键时产生。 参数:wParam:所按下的键的ASCII码。lParam:长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。 4、WM_CREATE 产生:由CreateWindow函数发出,创建窗口。 参数:wParam:没用。lParam:包含一个指向CREATESTRUCT数据结构的指针,该结构是传递给CreateWindow函数的参数的副本。 5、WM_CLOSE 产生:当关闭当前窗口时产生。 参数:wParam:未用。lParam:未用。 6、WM_DESTROY 产生:当窗口要销毁时由DestroyWindow函数发出。 参数:wParam:没用到。lParam:没用到。 7、WM_QUIT 产生:退出应用程序时由PostQuitMessage函数发出。 参数:wParam:含有退出代码,退出代码标识应用程序退出运行时的有关信息。lParam:未用。 8、WM_COMMAND 产生:用户与窗口或控件交互时,控件向其窗口发送WM_COMMAND消息。该消息的wParam参数的低字节中包含子窗口(控件)的标识值ID,高字节中包含子窗口向父窗口发出的通知代码,lParam参数中包含控件子窗口句柄。 9、WM_PAINT 用户改变窗口大小或拖动窗口,系统向应用程序发送WM_PAINT消息,WM_PAINT消息调用BeginPaint函数。 消息处理函数 1、windows消息和控件通知的处理函数 windows消息和控件通知都是由派生于CWnd的窗口类对象处理的。它们包括CFrameWnd、CMDIFrameWnd、 CMDIChildWnd、CView、CDialog以及从这些派生的用户自定义的类。这样的类对象封装了windows窗口句柄HWND。 windows消息和控件通知都有默认的处理函数,这些函数在CWnd类中进行了预定义,MFC类库以消息名为基础形成这些处理函数的名称,这些处理函数的名称都以前缀"On"开始。有的处理函数不带参数,有的则有几个参数;有的还有除void以外的返回值类型。CWnd中消息处理函数的说明都有 afx_msg前缀。关键字afx_msg用于把处理函数和其他CWnd成员函数区分开来。例如,消息WM_PAINT的处理函数在CWnd中被声明成:afx_msg void OnPaint(); windows消息常见的有鼠标消息(如WM_LBUTTONDOWN)消息)、键盘字符消息(WM_CHAR消息)、键盘按键消息(WM_KEYDOWN)、窗口重画消息WM_PAINT,水平和垂直条滚动消息WM_HSCROLL和WM_VSCROLL)以及系统时钟消息 WM_TIMER等。 2、命令消息的处理函数 由于用户界面的对象是用户自已定义的,每个应用程序的用户界面对象千差万别,所以对用户界面对象的命令消息没有默认的处理函数。如果某条命令直接影响某个对象,则应该让这个对象来处理这条命令。例如FILE菜单上的Open命令当然与应用程序有关:应用程序打开一个特定的文档来响应该命令。所以,Open 命令的处理函数是应用程序类的一个成员函数。 把命令消息映射成处理函数时,ClassWizard以命令ID来命名处理函数,可以接受、修改、或替换推荐使用的名字。例如,Edit菜单项的Cut命令,对应ID就是ID_EDIT_CUT,处理函数被命名成:afx_msg void OnEditCut(); 此外,对于控件按钮的BN_CLICKED通知消息,其处理函数可以被命名为: afx_msg void OnClickedUseAsDefault(); 命令消息的处理函数没有参数值,也不返回值。 消息映射 用MFC Application Wizard 创建应用程序框架时,AppWizard为创建的每个命令目标类(包括派生的应用程序对象、文档、视图、和边框窗口等)编写一个消息映射。每个命令目标类的消息映射存在相应的.cpp文件中。可以在AppWizard创建的基本消息映射的基础上,使用ClassWizard为每个类将处理的消息和命令添加一些条目。例如,对于应用程序类,MFC AppWizard创建的基本消息映射为: BEGIN_MESSAGE_MAP(CTextEditApp,CWinApp) //{{AFX_MSG_MAP(CTextEditApp) ON_COMMAND(ID_APP_ABOUT,OnAppAbout) //注:ClassWizard将在此处添加和删除消息映射宏 //不要编辑这些生成的代码块 //}}AFX_MSG_MAP //基于标准文件的文档命令(新建和打开) ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen) //标准的打印设置命令 ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp::OnFilePrintSetup) END_MESSAGE_MAP() |
|