CWnd::SubclassWindow
动态调用该成员函数的“子类”窗口并将它附加到此 CWnd 对象。
BOOL SubclassWindow(
HWND hWnd
);
参数
- hWnd
一个窗口的句柄。
返回值
非零,如果函数运行成功;否则为0。
备注
当窗口会动态子类,windows消息传递e CWnd 的消息映射将路由并将调用 CWnd 的选件类的消息处理程序。 通过指向基类的消息将传递到窗口的默认消息处理程序。
此成员函数附加Windows控件绑定到 CWnd 对象并替换"窗口的 WndProc 和 AfxWndProc 功能。 函数存储指向旧 WndProc 在 CWnd 对象。
备注
当调用该函数时时,无法已经附加窗口到MFC对象。
示例
// The following code shows how to subclass the edit control and list box
// controls inside a combo box. It uses WM_CTLCOLOR for subclassing.
// CSuperComboBox represents the combo box
HBRUSH CSuperComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (nCtlColor == CTLCOLOR_EDIT)
{
//Edit control
if (m_edit.GetSafeHwnd() == NULL)
m_edit.SubclassWindow(pWnd->GetSafeHwnd());
}
else if (nCtlColor == CTLCOLOR_LISTBOX)
{
//ListBox control
if (m_listbox.GetSafeHwnd() == NULL)
m_listbox.SubclassWindow(pWnd->GetSafeHwnd());
}
HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
void CSuperComboBox::OnDestroy()
{
//unsubclass edit and list box before destruction
if (m_edit.GetSafeHwnd() != NULL)
m_edit.UnsubclassWindow();
if (m_listbox.GetSafeHwnd() != NULL)
m_listbox.UnsubclassWindow();
CComboBox::OnDestroy();
}
要求
Header: afxwin.h