如何在类里面定义回调函数?
我想自己写个很简单的窗口类,大致如下
class CMain
{
public:
1. typedef LRESULT CALLBACK (*WNDPROC) (HWND, UINT, WPARAM, LPARAM);
......
2. WNDPROC WndProc;
3. LRESULT CALLBACK TheWndProc(HWND, UINT, WPARAM, LPARAM);
}
对于3,我该如何定义呢?
我用:
LRESULT CALLBACK CMain::TheWndProc(HWND hwnd.....)
{
......
}
这样定义出来后,用WndProc = TheWndProc就出错了
不知道对这些应该如何正确定义,请大侠们帮忙解释一下。
[解决办法]
一个称作thunk的东西可以做这个,据说ATL就是用thunk把wnd_proc放到类里的,你可以参考这个文章的第一部分
http://blog.csdn.net/aj3423/article/details/8736586
codeproject上也有两篇讲thunk的
另外针对窗口回调这个问题有个取巧的办法(我没用过,仅供参考),因为CreateWindowEx最后那个参数是
lpParam
[in] Pointer to a value to be passed to the window through the CREATESTRUCT structure passed in the lParam parameter the WM_CREATE message.
class CMain {
public:
virtual LRESULT wnd_proc(...) {}
};
LRESULT wnd_proc_helper(hwnd,msg,wp, LPARAM lp) {
CMain* win = (CMain*)lp;
win->wnd_proc(hwnd,msg,wp,lp);
}