SubclassWindow和SubclassDlgItem介绍
2015-05-04 11:14
543 查看
在对话框中将一个控件映射到一个变量,有三种方法:
1. DDX的方法
2. GetDlgItem的方法,例如CEdit pEdt = (CEdit *)GetDlgItem(IDC_EDIT1);
3. SubclassWindow的方法(或者其扩展SubclassDlgItem),例如CEditm_edit;m_edit.SubclassDlgItem(IDC_EDIT1);
oldWndProc = (WNDPROC)::SetWindowLong(hWnd,GWL_WNDPROC, (DWORD)AfxGetAfxWndProc());
前者的作用是把CWnd中的m_hWnd设置为hWnd,后者的作用是改变该窗口的窗口函数为AfxGetAfxWndProc()的返回.
AfxGetAfxWndProc返回了AfxWndProc的函数指针,即窗口函数的指针,AfxWndProc包裹了AfxCallWndProc,后者又调用了pWnd->WindowProc(nMsg,
wParam, lParam);。
可见SubclassWindow完成了两项功能:
1. 我们对该窗体实例调用成员函数将会直接改变相关窗体句柄对应的窗体(Attach)
2. 系统传给相关窗体句柄的消息会先经过该窗体实例的消息映射(SetWindowLong)。
1. DDX的方法
2. GetDlgItem的方法,例如CEdit pEdt = (CEdit *)GetDlgItem(IDC_EDIT1);
3. SubclassWindow的方法(或者其扩展SubclassDlgItem),例如CEditm_edit;m_edit.SubclassDlgItem(IDC_EDIT1);
SubclassWindow
CWnd::SubclassWindow(HWND hWnd)中调用两个主要操作:Attach(hWnd)和WNDPROColdWndProc = (WNDPROC)::SetWindowLong(hWnd,GWL_WNDPROC, (DWORD)AfxGetAfxWndProc());
前者的作用是把CWnd中的m_hWnd设置为hWnd,后者的作用是改变该窗口的窗口函数为AfxGetAfxWndProc()的返回.
AfxGetAfxWndProc返回了AfxWndProc的函数指针,即窗口函数的指针,AfxWndProc包裹了AfxCallWndProc,后者又调用了pWnd->WindowProc(nMsg,
wParam, lParam);。
可见SubclassWindow完成了两项功能:
1. 我们对该窗体实例调用成员函数将会直接改变相关窗体句柄对应的窗体(Attach)
2. 系统传给相关窗体句柄的消息会先经过该窗体实例的消息映射(SetWindowLong)。
SubclassDlgItem
调用了SubclassWindow,但之前调用了::GetDlgItem获取一个控件ID对应的窗口句柄。相关文章推荐
- 关于SubclassWindow()和SubclassDlgItem
- DDX_Control、SubclassWindow和SubclassDlgItem
- SubclassWindow和SubclassDlgItem
- 【C++】DDX_Control、SubclassWindow和SubclassDlgItem的区别
- 【C++】DDX_Control、SubclassWindow和SubclassDlgItem的区别
- SubclassWindow和SubclassDlgItem
- 3月25日 subclassdlgitem、release和debug、ondlgctrlid
- SUBCLASSDLGITEM函数
- subclassdlgitem 子类化一个MFC的基本控件
- 关于SubClassDlgItem
- 利用SubclassDlgItem函数动态连接控件和控件对象
- SUBCLASSDLGITEM函数
- subclassdlgitem
- 关于SubClassDlgItem
- VC/MFC中subclassdlgitem函数详解
- 利用SubclassDlgItem函数动态连接控件和控件对象
- 关于SubClassDlgItem
- MFC控件的SubclassDlgItem
- MFC控件的SubclassDlgItem
- MFC控件的SubclassDlgItem