2014-01-28 3 views
0

У меня есть одна проблема. Я пытаюсь уничтожить дочернее окно, но оно также разрушает родительское окно, поэтому приложение закрывается. У меня такой код.Уничтожение дочернего окна без родителя WIN32 APi

HWND cloneWin =FindWindowEx(hWnd, 0, szChildWin, 0); 
     if (cloneWin) { 
      MessageBox(NULL,"You are trying to create more than one child window\n Current child window will be destroyed", "Message", MB_OK|MB_ICONINFORMATION); 
      DestroyWindow(cloneWin); 
     } 

Что не так? THX заранее!

ответ

2

The documentation говорит:

Нить не может использовать DestroyWindow уничтожить окно, созданное в другом потоке.

Поскольку вы пытаетесь найти эти окна с помощью FindWindowEx, кажется очевидным, что окна были созданы в другом процессе, не говоря уже о другом потоке. Другими словами, ваш вызов DestroyWindow никогда не будет успешным. Трудно понять, почему это приносит другое приложение, но, поскольку вы не подчиняетесь правилам, я полагаю, что разумно, что все может случиться.

Это правдоподобно Я полагаю, что вы можете отправить окно сообщение WM_CLOSE и надеяться, что он ответит, позвонив по телефону DestroyWindow. Это будет действительный вызов DestroyWindow, потому что это будет сделано в потоке, который создал окно. Но все зависит от того, как это другое окно отвечает на WM_CLOSE.

+0

Thx для ответа, я только что попробовал SendMessage (cloneWin, WM_CLOSE, 0,0); Но он также уничтожает все приложения (( – CROSP

+0

Угадайте, что вам не повезло. Почему бы вам не попробовать менее агрессивный подход. Все-таки я верю, что у меня есть ваш вопрос. –

Смежные вопросы