FAQ:WinAPI VCPP:удалить контрол из собственного обработчика
Материал из Весельчак У
Нужно удалить контрол (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); }