CWnd::SubclassWindow
動態呼叫此成員函式「子類別」視窗並將它附加至 CWnd 物件。
BOOL SubclassWindow(
HWND hWnd
);
參數
- hWnd
視窗的控制代碼。
傳回值
如果不是零,則函式成功,則為 0。
備註
當視窗動態子類別化,視窗訊息傳遞 CWnd 的訊息對應會將則先呼叫 CWnd 類別的訊息處理常式。傳遞至基底類別中的訊息會傳遞至視窗的預設訊息處理常式。
此成員函式將視窗控制項 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