CWnd::SubclassWindow
Вызовите этот подкласс функции-члена динамически" окна "и вложение его этому объекту CWnd.
BOOL SubclassWindow(
HWND hWnd
);
Параметры
- hWnd
Дескриптор окна.
Возвращаемое значение
Ненулевой если функция успешно; в противном случае – значение 0.
Заметки
Если окно будет динамически subclassed сообщения windows направят через сопоставление сообщения CWnd и вызывает обработчики сообщений в классе CWnd первым. Сообщения, передаваемые базового класса передаются в обработчик сообщений по умолчанию в окне.
Эта функция-член к объекту вложение элемента управления Windows 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