FAQ:WinAPI VCPP:удалить контрол из собственного обработчика — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Новая: ===Нужно удалить контрол (CComboBox) из диалога. Причём это надо сделать из обработчика сообщения этого кон...) |
RXL (обсуждение | вклад) |
||
Строка 41: | Строка 41: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | [[Category:FAQ:WinAPI VCPP]] | + | [[Category:FAQ:WinAPI VCPP]] [[Category:FAQ:MFC]] |
Текущая версия на 22:10, 3 октября 2009
Нужно удалить контрол (CComboBox) из диалога. Причём это надо сделать из обработчика сообщения этого контрола.
Вот так вылетает ошибка:
void CMyDialog::OnSelchange() { CComboBox* m_pControl = (CComboBox*)GetDlgItem(IDC_MYCOMBO); m_pControl->DestroyWindow(); }
Удалять объект из принадлежащего ему обработчика нельзя. Нужно удалить объект после завершения обработчика. Например, можно послать в диалог-родитель некое сообщение, в обработчике которого и удалить контрол.
Например:
enum { e_command_delete = WM_USER + 1, }; void CMyDialog::OnSelchange() { // кладём в очередь сообщений своё сообщение PostMessage(WM_COMMAND, (e_command_delete << 16) | IDC_MYCOMBO, 0x5555); } BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam) { if ((wParam >> 16) == e_command_delete) { if (((WORD)wParam) == IDC_MYCOMBO) { CComboBox* m_pControl = (CComboBox*)GetDlgItem(IDC_MYCOMBO); m_pControl->DestroyWindow(); return 1; } } return CDialog::OnCommand(wParam, lParam); }