使用Setwindowlong子类化一个类,截取一些消息处理。但是由于将消息处理函数和设置函数都放在了同一个类中(消息处理函数比较好调用)出现了一下错误:
cannot convert from 'long (__stdcall CSkinCtrl::*)(struct HWND__ *,unsigned int,unsigned int,long)' to 'long'
Conversion is a valid standard conversion, which can be performed implicitly or by use of static_cast, C-style cast or function-style cast
谁有办法解决这个难题吗??(我不想改变自己的程序结构,就是这两个函数还是做一个类的成员函数。)
十分急,谢谢大大们了。
cannot convert from 'long (__stdcall CSkinCtrl::*)(struct HWND__ *,unsigned int,unsigned int,long)' to 'long'
Conversion is a valid standard conversion, which can be performed implicitly or by use of static_cast, C-style cast or function-style cast
谁有办法解决这个难题吗??(我不想改变自己的程序结构,就是这两个函数还是做一个类的成员函数。)
十分急,谢谢大大们了。
==================================
第一函数要和原窗口过程的回调函数一致,如果要做为类成员的话,一定要是static类型!
google一下
但是WindowProc没有这样的参数,只有一个HWND句柄,你可以利用全局变量把这个句柄与类的实例指针关联起来。
这个算是第二个问题了,回答了,可以加分
==========================================================================================
这个好办啊,一种办法是可以用全局变量保存当前类对象的指针,然后能过指针来访问。更好的办法是将当前对象的指针和窗口关联,然后再静态函数中取出!方法如下:在动态类中,一般OnCreate中设置:
SetWindowLong(hwnd, GWL_USERDATA, this);静态函数中获得
CXXX *pXXX = reinterpret_cast<CXXX *>(GetWindowLong(hDlg, GWL_USERDATA));
pXXX->ToDo (); //调用动态成员函数