次の方法で共有


CWnd::SubclassWindow

ウィンドウを "動的サブクラス化" し、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

参照

関連項目

CWnd クラス

階層図

CWnd::DefWindowProc

CWnd::SubclassDlgItem

CWnd::Attach

CWnd::PreSubclassWindow

CWnd::UnSubclassWindow