共用方式為


CWnd::SubclassWindow

動態呼叫此成員函式「子類別」視窗並將它附加至 CWnd 物件。

BOOL SubclassWindow(
   HWND hWnd 
);

參數

  • hWnd
    視窗的控制代碼。

傳回值

如果不是零,則函式成功,則為 0。

備註

當視窗動態子類別化,視窗訊息傳遞 CWnd 的訊息對應會將則先呼叫 CWnd 類別的訊息處理常式。傳遞至基底類別中的訊息會傳遞至視窗的預設訊息處理常式。

此成員函式將視窗控制項 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