实现类非静态成员函数做窗口过程函数
来源:互联网 发布:苏州哪里有mac专柜 编辑:程序博客网 时间:2024/06/11 22:39
实现类非静态成员函数做窗口过程函数,无非是想办法把类对象指针传递给窗口过程。最简单的办法是使用全局变量,在很多场景下是快捷有效的办法。这里介绍的办法是借助::SetWindowLong(hWnd, GWL_USERDATA, (LONG)pWindow)调用,把类指针传递给窗口。在窗口过程函数中再调用 GetWindowLong来获取出来使用。
通过CreateWindowEx最后一个参数,把类指针传递给窗口,详见代码:
class CMyWindow{protected: static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { CMyWindow* pWindow; if (WM_NCCREATE == uMsg) { MDICREATESTRUCT* pMDIC = (MDICREATESTRUCT*)((LPCREATESTRUCT)lParam)->lpCreateParams; pWindow = (CMyWindow*)(pMDIC->lParam); ::SetWindowLong(hWnd, GWL_USERDATA, (LONG) pWindow); } else { pWindow=(CMyWindow*)::GetWindowLong(hWnd, GWL_USERDATA); } if (NULL != pWindow) { return pWindow->WndProc(hWnd, uMsg, wParam, lParam); } else { return ::DefWindowProc(hWnd, uMsg, wParam, lParam); } } virtual LRESULT WndProcSelf(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { //this is self wndproc return 0L; } virtual HWND CreateEx(DWORD dwExStyle, LPCTSTR lpszClass, LPCTSTR lpszName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hParent, HMENU hMenu, HINSTANCE hInst) { MDICREATESTRUCT mdic; memset(& mdic, 0, sizeof(mdic)); mdic.lParam = (LPARAM) this; return CreateWindowEx(dwExStyle, lpszClass, lpszName, dwStyle, x, y, nWidth, nHeight, hParent, hMenu, hInst, & mdic); }private: HWND m_hWnd;};
- 实现类非静态成员函数做窗口过程函数
- 非静态成员函数做窗口过程(非映射表实现),成员函数做消息映射
- C++[类设计]静态窗口过程调用非静态成员函数
- 类的static函数实现非static成员函数作窗口过程函数
- 类的非静态成员函数做boost::thread参数
- boost thread 使用类的非静态成员函数做线程函数之【原理】
- 类中的静态成员函数访问非静态成员变量
- 静态成员函数引用非静态成员
- 静态成员函数访问非静态成员
- 静态成员函数调用非静态成员
- 使非MFC窗口程序的窗口回调过程成为C++类的成员函数
- 非静态类成员作为线程函数
- 关于编译器对c++ 类静态成员、静态成员函数、非静态成员函数的处理
- 非静态成员函数地址
- C++ 类非静态成员函数作为线程入口函数实现
- 用非静态类成员函数作为线程函数
- 用非静态类成员函数作为线程函数
- 用非静态类成员函数作为线程函数
- android的OptionsMenu
- android audio 架构分析(2) AudioPolicyService 的结构
- SSH连接Debian出现延迟的解决方法
- mount/umount详解
- BM模式匹配算法-原理(图解) 比较清楚的一篇
- 实现类非静态成员函数做窗口过程函数
- 安装mysql5.5时,到了start service没反应解决方案
- Generate profile using VS ultimate 2010
- POJ 1177: Picture
- 分享Android进行远程登录下配置的方法
- 【Android开发学习39】VideoView在GLSurfaceView之上显示的解决方案
- android问题
- typedef和typename关键字
- GDC2013见闻:手游当道,免费模式为王