如何在Dialog关闭的时候销毁Dialog的窗体句柄?

snaill 2004-09-16 05:11:38
希望通过工具条一次点击打开DIALOG,再点击关闭DIALOG

现在是通过判断窗体的有效性决定是否要Create DIALOG,实现代码如下。
if (!m_dlg.GetSafeHwnd())
{
m_dlg.Create(IDD_DIALOG, this);
m_dlg.ShowWindow(SW_SHOW);
}
else
{
m_dlg.SendMessage(WM_CLOSE);
m_dlg.DestroyWindow();
}

但是当DIALOG打开后一次点击打开DIALOG,然后点击DIALOG的关闭键,需要再点2次才可以显示DIALOG,跟踪发现Dialog在关闭后,并没有销毁HWND,怎么能够方便在DIALOG关闭的时候销毁HWND?不知谁有什么好的方法?
...全文
521 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
老夏Max 2004-09-16
  • 打赏
  • 举报
回复
你可以在CMainFrame中定义一个HWND,然后在使用GetSafeHwnd以后,将获得的HWND付给那个变量,呵呵,f
tiejun 2004-09-16
  • 打赏
  • 举报
回复
EndDialog();
老夏Max 2004-09-16
  • 打赏
  • 举报
回复
楼上的方法还需要获得HWND吧?应该使用::PostMessage(HWND,WM_CLOSE);
用在InitDialog中使用GetSafeHwnd获得对话框的HWND,呵呵
snaill 2004-09-16
  • 打赏
  • 举报
回复
楼上的,不是说了必须要释放资源的,不能使用ShowWindow的方法
KiGhost 2004-09-16
  • 打赏
  • 举报
回复
应该在SendMessage(WM_CLOSE)后 DestroyWindow ();
老夏Max 2004-09-16
  • 打赏
  • 举报
回复
显示的时候就ShowWindow(SW_SHOW); 隐藏的时候就ShowWindow(SW_HIDE); 增加一个标志位,判断是否显示了!
老夏Max 2004-09-16
  • 打赏
  • 举报
回复
呵呵,不会那么不理解吧。例如:
C××Dlg * pDlg;//头文件中定义

pDlg = new C××Dlg;
pDlg->Create();

最后在析构函数中删除pDlg
flyelf 2004-09-16
  • 打赏
  • 举报
回复
就是在OnClose中DestroyWindow
snaill 2004-09-16
  • 打赏
  • 举报
回复
1楼不行,因为dialog调用很多的资源,必须释放
2楼最后是那里阿?在dialog外边因为无法判断dialog的状态,所以肯定不行;如果在里面,总不能再OnClose里面吧?
老夏Max 2004-09-16
  • 打赏
  • 举报
回复
或者用Dialog类的指针,在最后delete那个指针就行了!
老夏Max 2004-09-16
  • 打赏
  • 举报
回复
m_dlg.DestroyWindow(); 改为
m_dlg..ShowWindow(SW_HIDE); 不就行了?

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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