WEB开发网
开发学院软件开发VC ATL3.0中的窗口类 阅读

ATL3.0中的窗口类

 2006-07-22 22:53:41 来源:WEB开发网   
核心提示: WinMain函数中创建了一个CmyWindow类的实例并实现了一个标准的消息循环,(有一些地方,ATL3.0中的窗口类(5),我们必须遵循ATL的规范,比如在这里我们必须使用_Module,所以如果我们不在函数的结尾显式地将它置为FALSE,则消息映射表的后续部分不会被继续查找,)消息映

WinMain函数中创建了一个CmyWindow类的实例并实现了一个标准的消息循环。(有一些地方,我们必须遵循ATL的规范,比如在这里我们必须使用_Module。)

消息映射:

有三组用于消息映射的宏,他们分别是:

  • 窗口消息映射宏,用于所有的窗口消息(如WM_CREATE、WM_PAINT等);
  • 命令消息映射宏,专用于WM_COMMAND消息(比如由控件或菜单发出的消息);
  • 通知消息映射宏,专用于WM_NOTUFY消息(通常由通用控件发出此消息,比如工具栏控件或列表视图控件)

窗口消息映射宏:

有两个窗口消息映射宏,他们分别是:

  • MESSAGE_HANDLER
  • MESSAGE_RANGE_HANDLER

第一个宏将一个特定的消息映射到相应的处理函数;第二个宏将一组消息映射到一个处理函数。消息处理函数都要求具有如下的原形:

LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

其中,参数uMsg是消息标识,wParam和lParam是两个附加与消息的参数,(他们的具体意义取决与消息类别。)

消息处理函数使用bHandled来标志消息是否已经被完全捕获,如果bHandled被设置成FALSE,程序将继续在消息映射表的后续部分查找这个消息的其它处理函数。这个特性使得我们对一个消息使用多个处理函数成为可能。什么时候需要对一个消息使用多个处理函数呢?可能是在对多个类链接时,也可能是我们只想对一个消息做出响应但是并不真正捕获它。在处理函数被调用之前,bHandled被置为TRUE,所以如果我们不在函数的结尾显式地将它置为FALSE,则消息映射表的后续部分不会被继续查找,也不会有其它的处理函数被调用。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:ATL 窗口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接