Win32(非MFC)下创建的非模式窗口,如何销毁

yxlovemoney 2014-06-16 11:09:41
找了资料说用DestroyWindow,但使用后,该窗口的进程依旧还在,



调试的时候,感觉好像进入了消息循环出不来的感觉。

然后我主要的代码是这样写的

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
//DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_LOGIN), NULL, DataDlgProc);
MSG msg;
/* 创建非模态对话框 */
hDialog = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG_LOGIN), NULL, DataDlgProc);
ShowWindow(hDialog, SW_SHOW);

// 非模态对话框的消息循环处理
while (GetMessage(&msg, NULL, 0, 0))
{
// 翻译加速键表。该函数处理菜单命令中的加速键。
if(!TranslateAccelerator(msg.hwnd, NULL, &msg))
{
// 不是非模式对话框的消息才分发
if(!IsDialogMessage(hDialog, &msg))
{
/* 将虚拟键消息转换为字符消息 */
TranslateMessage(&msg);
/* dispatches a message to a window procedure. */
DispatchMessage(&msg);
}
}
}
return msg.wParam;
}



然后是回调函数部分


BOOL CALLBACK DataDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
// 节省空间,省略前面代码

case WM_CLOSE:
//EndDialog(hWnd, 0);
DestroyWindow(hDialog);// 调试时关闭窗口,就一直跑在这里再跑不出去
return TRUE;


}
return FALSE;
}



求教到底怎样才能真正地销毁呢?
...全文
322 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlx_beat 2014-07-01
  • 打赏
  • 举报
回复
引用 3 楼 buyong 的回复:
SendMessage WM_CLOSE
如果你是非模态对话框那就可以这么做,如果登陆界面做成模态对话框,在响应确定或取消的时候 EndDialog。
yxlovemoney 2014-06-22
  • 打赏
  • 举报
回复
引用 2 楼 hlx_beat 的回复:
WM_DESTROY:PostQuitMessage(...);
非常感谢,那想问问,关闭窗口时,不调用PostQuitMessage能否作为隐藏窗口的一种方法呢? 就比如说我有一个登录窗口,输入帐号密码后,如果把这个窗口销毁,登录后显示的主界面就出 不来了,所以能否用这种方法实现这类效果?
movsd 2014-06-16
  • 打赏
  • 举报
回复
还要用PostQuitMessage才能退出。
buyong 2014-06-16
  • 打赏
  • 举报
回复
SendMessage WM_CLOSE
hlx_beat 2014-06-16
  • 打赏
  • 举报
回复
WM_DESTROY:PostQuitMessage(...);

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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