窗口过程函数
好,终于进入正题了。
在用MFC的时候,我们会发现MFC里面有消息映射,这么每个窗口类可以处理响应窗口消息,ATL也同样有自己的消息分发机制。由于窗口过程函数是全局函数(或静态函数),我们不可能吧一个程序的所有消息都在一个函数里面写,同时这个全局函数也没法和所有具体的窗口实例想绑定,即想调用具体类的成员函数都没办法实现,这样完成一个具有复杂功能的窗口程序也是不可能的了,我们上面的封装也一点意义都没了。为此,我们必须建立一个消息分发机制。
(1)方法1:映射表
在窗口过程函数参数中,我们看到有一个HWND参数,这是能让我们知道是哪个窗口发来的。由于HWND句柄是全局唯一不重复的,也和我们窗口实例有着一一对应的关系。由此,我们就想到可以维护一个全局的Map,如Map<HWND, Void*>,这样将HWND和窗口实例对象This指针建立一个映射表,进而就能够将消息分发到具体的窗口类了。
MFC就采用该方式,其维护了一个全局的哈希表来实现,代码就不再深究了。<

本文探讨Windows界面封装时如何处理窗口过程函数,尤其是通过映射表实现消息分发。介绍了利用HWND的全局唯一性,创建一个Map来绑定窗口句柄和实例对象,以此将消息转发到相应类的方法。文中提到了MFC的消息分发机制,并简单说明了在单线程环境下,如何确保HWND与实例对象的对应关系。
1342

被折叠的 条评论
为什么被折叠?



