FAQ:WinAPI VCPP:удалить контрол из собственного обработчика
Материал из Весельчак У
Версия от 20:43, 31 июля 2008; RXL (обсуждение | вклад) (Новая: ===Нужно удалить контрол (CComboBox) из диалога. Причём это надо сделать из обработчика сообщения этого кон...)
Нужно удалить контрол (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); }