tr1::bind与tr1::function的用法与具体应用
来源:互联网 发布:从零开始学淘宝txt 编辑:程序博客网 时间:2024/04/28 20:32
关于tr1::bind及tr1::function的用法,请参考:《function/bind的救赎》孟岩,http://blog.csdn.net/myan/article/details/5928531
以下是实际工程中的代码,用于非窗口类(比如DirectUI库的页面类,这些类并不包含可以用来接收消息的m_hWnd成员)创建一个隐藏窗口,并绑定其成员方法到这个隐藏窗口的消息处理函数上。
class CMessageWindow{protected:CMessageWindow() : m_hWnd(NULL), m_OldWndProc(NULL){}~CMessageWindow(){_ASSERT(!IsWindow(m_hWnd));}BOOL Create(LPCWSTR lpClassName = L"#32770"){if(lpClassName == NULL || wcslen(lpClassName) == 0)return FALSE;_ASSERT(m_hWnd == NULL);m_hWnd = CreateWindowEx(0, lpClassName, NULL, WS_POPUP, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL);if(m_hWnd == NULL){_ASSERT(FALSE);return FALSE;}SetWindowLongPtr(m_hWnd, GWLP_USERDATA, (LONG_PTR)this);m_OldWndProc = (WNDPROC)SetWindowLongPtr(m_hWnd, GWLP_WNDPROC, (LONG_PTR)MyWndProc);return TRUE;}BOOL Destroy() CONST{return DestroyWindow(m_hWnd);}template <typename T>BOOL BindHandler(UINT uMsg, T Function){if(uMsg < WM_USER)return FALSE;m_Handler[uMsg] = std::tr1::bind(Function, std::tr1::placeholders::_1, std::tr1::placeholders::_2);return TRUE;}template <typename T, typename CLASS>BOOL BindHandler(UINT uMsg, T Function, CLASS *lpClass){if(uMsg < WM_USER || lpClass == NULL)return FALSE;m_Handler[uMsg] = std::tr1::bind(Function, lpClass, std::tr1::placeholders::_1, std::tr1::placeholders::_2);return TRUE;}protected:HWND m_hWnd;private:static LRESULT CALLBACK MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){CMessageWindow *pThis = (CMessageWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA);LRESULT lResult = 0;if(uMsg >= WM_USER){std::map<UINT, std::tr1::function<LRESULT(WPARAM, LPARAM)>>::const_iterator Pair = pThis->m_Handler.find(uMsg);if(Pair != pThis->m_Handler.end()){lResult = Pair->second(wParam, lParam);}}else{lResult = CallWindowProc(pThis->m_OldWndProc, hWnd, uMsg, wParam, lParam);}return lResult;}private:WNDPROC m_OldWndProc;std::map<UINT, std::tr1::function<LRESULT(WPARAM, LPARAM)>> m_Handler;};
0 0
- tr1::bind与tr1::function的用法与具体应用
- std::tr1::function, std::tr1::bind的使用
- tr1::function与bind的实现原理——深入理解函数配接器
- 浅谈c++ Closure与tr1::function区别
- 使用tr1::function和tr1::bind实现类的非静态成员函数指针
- std::tr1::function模板类 std::tr1::bind()模板函数
- c++中tr1::bind和tr1::function讲解
- std::tr1::function模板类 std::tr1::bind()模板函数
- std::tr1::bind 或 std::tr1::function使用
- C++中std::tr1::function和bind 组件的使用
- C++中std::tr1::function和bind 组件的使用
- C++中std::tr1::function和bind 组件的使用
- C++中std::tr1::function和bind 组件的使用
- C++中std::tr1::function和bind 组件的使用
- C++中tr1::function和bind 组件的使用
- C++中std::tr1::function和bind 组件的使用
- tr1::function
- Tr1 Function
- ovs-ofctl 官方手册翻译(1)OpenFlow Switch Management Commands
- 我的2013
- 安卓UDP通信
- 利用函数传递结构体--冒泡排序
- phpredis中文手册——《redis中文手册》 php版
- tr1::bind与tr1::function的用法与具体应用
- 字符串中的字符包含问题
- C#中计时器Timer的三种使用方法
- c/c++各种字符、字符串类型转换
- JDBC连接各种数据库方法
- 互联网(internet)又称因特网
- C#数字图像处理有3种典型方法:提取像素法、内存法、指针法。
- socket穿透代理代码(C++版)
- 你知道这些游戏都在阿里云上吗?