扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:李马 来源:CSDN 2007年9月24日
关键字:
在本页阅读全文(共2页)
可能你会有所疑问:为什么CWindow的例子直接使用了“=”来进行赋值,而CListBox则要使用Attach来初始化。当然,其实这两者并没有实质上的区别,只不过是CWindow重载了operator=操作符,而CListBox没有这样做罢了(严格说来,派生自CWindow的CListBox当然继承了CWindow的operator=,但是它并不能用于CListBox对象,如果强行使用则会得到一个“error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct HWND__ *' (or there is no acceptable conversion)”的错误)。如果你也希望CListBox支持operator=的初始化方式,可以这样来对CListBox进行封装:
class CListBox : public CWindow |
下面来介绍对控件事件的处理。通常控件在某些事件发生时会以发送WM_COMMAND(普通控件)或WM_NOTIFY(公共控件)消息的方式通知其父窗口,然后我们在其父窗口的窗口过程中处理这些消息即可。WM_COMMAND和WM_NOTIFY的参数意义如下:
WM_COMMAND | WM_NOTIFY | |
wParam | HIWORD(wParam)为通知消息代码,LOWORD(wParam)为控件ID | 发生通知消息的控件ID,不过仍建议使用lParam参数中的ID |
lParam | 发生通知消息的控件句柄 | 一个指向NMHDR结构的指针,这个结构中包含了通知消息的各种信息 |
在ATL中,可以使用如下的宏来进行各种消息的分流(在此将Windows消息分流的宏也一并加上):
消息分流宏 | 说明 |
MESSAGE_HANDLER | 用于将某个特定消息分流至一个消息处理函数。 |
MESSAGE_RANGE_HANDLER | 用于将某个范围内的消息一并分流至同一个消息处理函数。 |
COMMAND_HANDLER | 用于将来自特定ID、特定通知码的WM_COMMAND消息分流至一个消息处理函数。 |
COMMAND_ID_HANDLER | 用于将来自特定ID的WM_COMMAND消息分流至一个消息处理函数。 |
COMMAND_CODE_HANDLER | 用于将来自特定通知码的WM_COMMAND消息分流至一个消息处理函数。 |
COMMAND_RANGE_HANDLER | 用于将来自某个ID范围内的WM_COMMAND消息分流至一个消息处理函数。 |
NOTIFY_HANDLER | 用于将来自特定ID、特定通知码的WM_NOTIFY消息分流至一个消息处理函数。 |
NOTIFY_ID_HANDLER | 用于将来自特定ID的WM_NOTIFY消息分流至一个消息处理函数。 |
NOTIFY_CODE_HANDLER | 用于将来自特定通知码的WM_NOTIFY消息分流至一个消息处理函数。 |
NOTIFY_RANGE_HANDLER | 用于将来自某个ID范围内的WM_NOTIFY消息分流至一个消息处理函数。 |
另外,处理Windows消息、WM_COMMAND消息、WM_NOTIFY消息的消息处理函数应该分别满足如下规格要求:
// atlwin.h |
李马牌通讯录管理系统
别误会,这并不是什么正儿八经的所谓“信息管理系统”,而只是我为本章写下的一个简单示例而已。这里面并不涉及数据的存储,而只是为演示本章的内容而实现了必要的流程而已。在此李马并不打算对这个程序的代码进行过多解说,仅仅点出几点需要特殊说明的。
// 初始化公共控件先 |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1667302
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者