DestroyWindow销毁问题

shuibingmiao 2006-06-06 06:02:04
用DestroyWindow销毁时是否窗口内的控件、子窗口等也跟着销毁
...全文
541 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoshi0 2006-07-20
  • 打赏
  • 举报
回复
窗体是系统画到屏幕上的,如果调用了DestroyWindow,窗体就会收到一个WM_DESTROY的消息,这个消息的一般处理是直接调用PostQuitMessage(0);将消息循环退出。

如果你不让这个消息做默认处理,它就只能销毁你的窗体(当然窗体上什么东西都没有了)

但消息循环还没有退出。
BlueDeepOcean 2006-07-13
  • 打赏
  • 举报
回复
是的,函数销毁由窗口句柄hWnd指定的窗口。该函数发送WM_DESTROY、WM_NCDESTROY消息给窗口的回调函数来使窗口无效,同时撤销它的键盘输入焦点状态。函数同时销毁属于此窗口的菜单,并将线程消息队列中还未处理的、属于该窗口的消息发送给该窗口的回调函数。该函数销毁定时器和撤销窗口对剪切板的拥有权。
如果该窗口作为一个父窗口或拥有者窗口,那么将先销毁所有的子窗口或自身拥有的窗口,之后再销毁自身。

eg.

HWND hButton;
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
char szChildWindow[64];
BOOL fFirst = TRUE;
switch(message)
{
......
case WM_LBUTTONDOWN:
hButton = CreateWindow("BUTTON","Test",WM_VISIBLE|WS_CHILD,10,10,600,80,hWnd,(HMENU)IDC)BUTTON1,hInst,NULL);
break;
case WM_RBUTTONDOWN:
DestroyWindow(hButton);
break;
case WM_PARENTNOTIFY:
if (fFirst)
{
sprintf(szChildWindow,"子窗口(ID=%d)被Create!",HIWORD(wParam));
fFirst = FALSE;
}
else
printf(szChildWindow,,"子窗口(ID=%d)被销毁!",HIWORD(wParam));
MessageBox(NULL,szChildWindow,"Create(Destroy)Window",MB_OK);
break;
......
}
......
}
......
wt_sanlian 2006-07-13
  • 打赏
  • 举报
回复
en!
hillyard 2006-07-12
  • 打赏
  • 举报
回复
恩 楼上说的对 DestroyWindow 在销毁父类窗口的同时 自动销毁与之相关的子类窗口。
tianshu888 2006-06-07
  • 打赏
  • 举报
回复
是这样的
If the specified window is a parent or owner window, DestroyWindow automatically destroys the associated child or owned windows when it destroys the parent or owner window.

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧