64,653
社区成员
发帖
与我相关
我的任务
分享
//原来的窗口过程指针,如果放在类里,且不是静态的话在回调消息里会成为野对象
//但是如果放在类外面或者静态的话, 那此类又怎么能声明成多份类呢
WNDPROC DefWndProc;
class Edit
{
private:
HINSTANCE m_hLibRichEdit;
public:
HWND hwnd;
void load()
{
LONG HP_Rich;
__asm
{//成员函数无法直接取地址,所以用汇编取出地址
mov eax,offset HP_RichEditProc
mov HP_Rich, eax
};
DefWndProc = (WNDPROC)SetWindowLong (hwnd, GWL_WNDPROC, (long)(LRESULT)HP_Rich);
}
//回调消息处理函数
LRESULT CALLBACK HP_RichEditProc (UINT uMsg, WPARAM wParam, LPARAM lParam)
{//因为类成员函数隐藏了一个this参数所以此参数并非是类指针而是回调消息的第一个参数"句柄"
LRESULT ret = NULL;
ret= ::CallWindowProc (DefWndProc, (HWND)this,(UINT)uMsg, wParam, lParam );
return ret;
}
};
//在窗口中调用
//Edit edit1;
//edit1.hwnd=GetDlgItem(hWnd,IDC_EDIT1);
//edit1.load();
//剩下最后一个问题,如何在回调函数中使用类的非静态成员