CWnd::SubclassWindow

动态调用该成员函数的“子类”窗口并将它附加到此 CWnd 对象。

BOOL SubclassWindow(
   HWND hWnd 
);

参数

  • hWnd
    一个窗口的句柄。

返回值

非零,如果函数运行成功;否则为0。

备注

当窗口会动态子类,windows消息传递e CWnd 的消息映射将路由并将调用 CWnd 的选件类的消息处理程序。 通过指向基类的消息将传递到窗口的默认消息处理程序。

此成员函数附加Windows控件绑定到 CWnd 对象并替换"窗口的 WndProcAfxWndProc 功能。 函数存储指向旧 WndProcCWnd 对象。

备注

当调用该函数时时,无法已经附加窗口到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

请参见

参考

CWnd 类

层次结构图

CWnd::DefWindowProc

CWnd::SubclassDlgItem

CWnd::Attach

CWnd::PreSubclassWindow

CWnd::UnsubclassWindow