CWnd::SubclassWindow
更新 : 2007 年 11 月
ウィンドウを "動的サブクラス化" し、CWnd オブジェクトに結び付けるためにこのメンバ関数を呼び出します。
BOOL SubclassWindow(
HWND hWnd
);
パラメータ
- hWnd
ウィンドウへのハンドルを指定します。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
ウィンドウが動的サブクラス化されたとき、ウィンドウ メッセージは CWnd のメッセージ マップを使って送られ、CWnd クラスの最初のメッセージ ハンドラを呼び出します。基本クラスに渡されたメッセージは、ウィンドウの既定のメッセージ ハンドラに渡されます。
このメンバ関数は、ウィンドウを CWnd オブジェクトに結び付け、ウィンドウの WndProc 関数と AfxWndProc 関数を置き換えます。CWnd オブジェクトの古い WndProc へのポインタを格納します。
メモ : |
---|
この関数が呼び出されるときに、ウィンドウが 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();
}
必要条件
ヘッダー : afxwin.h