SetProp 和 GetProp

来源:互联网 发布:淘宝网狗窝 编辑:程序博客网 时间:2024/05/11 01:14

  今天在对ComboBox进行重绘的时候,由于ComboBox是通过资源添加到,而我要实现的是用SDK方式实现一个类,重绘ComboBox的时候,只要定义一个类,就可以用类对象对添加到ComboBox进行操作了。但开始的时候,消息响应函数不是设置成全局,就要设置成静态的,所以我的类中的ComboBox句柄就必须写成静态的了,从而,如果我有多个ComboBox的时候,就要出问题了。后来找到了SetProp函数和GetProp函数后,终于解决了问题了。方法如下:

定义一个全局的函数(MsgSender),用它来分发所有的窗口消息,而真正的处理消息的不声明成静态,而通过类指针查找。而要区分到底是那个窗口的消息的话就要用到SetProp和GetProp了

首先,在要设置消息响应函数前调用SetProp(hwnd,ATOM_XX,(HANDLE)this);hwnd是要设置消息响应函数的窗口句柄,

ATOM_XX是一个宏(具体可以查看SetProp函数),this 就是我们的当前类了(此处假设是CWnd)。

在消息处理函数中,只要取出该类指针即可操作了,示例代码如下:

设置窗口处理函数:

#defint WND_OBJ  "@"

LRESULT CALLBACK MsgSender(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);//分发消息函数

class CWnd

{...

....

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);//真正处理消息函数

};

SetProp(hwnd1,WND_OBJ,(HANDLE)this);//设置窗口1

SetWindowLong(hwnd1,GWL_WNDPROC,MsgSender);

 

SetProp(hwnd2,WND_OBJ,(HANDLE)this);//设置窗口2

SetWindowLong(hwnd2,GWL_WNDPROC,MsgSender);

 

LRESULT CALLBACK MsgSender(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

{

     CWnd* pWnd = NULL;

    pWnd = (CWnd*)GetProp(hwnd,WND_OBJ);//从句柄去取得类指针

    pWnd->WndProc(hwnd,message,wParam,lParam);// 处理消息

........

........

 

}

 

哈哈 ,太棒了。。。。。

原创粉丝点击