求救!为什么我的主对话框无法隐藏窗体?

horin153 2004-09-03 05:02:29
我的程序是基于对话框的, 我希望主对话框能够根据需要隐藏在托盘上.但我无论如
何,都只能把对话框从任务栏上隐藏,无法使对话框的窗体隐藏. 即:
我用ShowWindow(SW_HIDE)时, 对话框的窗体只能去活变灰, 并且仍然存在, 任务栏
上图标能够消失.
目前我已经尝试了多种方法, 如:把主对话框做成无模式的, 作为一个隐藏窗口的子
对话框, 设置窗体大小为0, 去除WS_APP_WINDOWN属性等. 因而我问的第一个问题是:

隐藏窗体(不是任务栏图标)到底有那些限制条件???

我的主对话框中用了toolbar, menu; 并且派生于自定义的一个基类CSizebleDlg(此
基类主要用于保存对话框的大小, 位置, 改变大小等). 但在有类似特征的程序中,
却无此类似问题!

请有类似经历的大侠指点.
...全文
178 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
horin153 2004-09-03
  • 打赏
  • 举报
回复
呵呵,感谢大家的支持!
在公司高手的帮助下,已经解决了这个问题.
原因是我用WM_POSITIONCHANGED消息来处理size的变化.而隐藏对话框时,尺寸变化为0 ,这导致WM_POSITIONCHANGED消息,而在此消息处理中,我又调用了Invalidate(),所以就在hide后又onpaint了.

解决: 我首先把对话框最小化,然后再隐藏. 这样在任务管理器中还可以见到程序.不好.

另一解决: 处理OnSize消息,而不是WM_POSITIONCHANGED. 这样就一切正常了.

结贴.
Avoid 2004-09-03
  • 打赏
  • 举报
回复
IDD_TESTWK1_DIALOG是你对话框的ID
Avoid 2004-09-03
  • 打赏
  • 举报
回复
刚才忘了一句关键的句子,
CTestDlg *pdlg = new CTestDlg;
pdlg->Create(IDD_TESTWK1_DIALOG);
m_pMainWnd = pdlg;
pdlg->ShowWindow(SW_HIDE);
放在CTestApp::InitInstance()中
去掉
CTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
holyeagle 2004-09-03
  • 打赏
  • 举报
回复
窗口是模式还是无模式?会不会是这个问题?
zhaogaojian 2004-09-03
  • 打赏
  • 举报
回复
原因是你放的位置不对在OnPaint()中添加
this->ShowWindow(SW_HIDE);
msvbvm60 2004-09-03
  • 打赏
  • 举报
回复
在OnitDialog里 SetTimer()

然后在 OnTimer()里 ShowWindow(SW_HIDE);即可
horin153 2004-09-03
  • 打赏
  • 举报
回复
DentistryDoctor(牙科医生): 我也怀疑过,所以还特地做了个主对话框派生于CSizebleDlg, 但隐藏没有问题.

vckbase 中的文档我也看了多遍, 并且基本上都试过, 没有效果:(

在ShowWindow(SW_HIDE)之后, 不知道是不是还要执行其他什么动作? 可我跟踪之后几乎都是mfc中的东西.
huaboy408 2004-09-03
  • 打赏
  • 举报
回复
http://www.vckbase.net/code/downcode.asp?id=2254
Avoid 2004-09-03
  • 打赏
  • 举报
回复
CTestDlg *pdlg = new CTestDlg;
m_pMainWnd = pdlg;
pdlg->ShowWindow(SW_HIDE);
lixiaosan 2004-09-03
  • 打赏
  • 举报
回复
http://www.yesky.com/20011110/204659.shtml
http://www.vckbase.com/document/viewdoc.asp?id=492
http://www.vckbase.com/document/viewdoc.asp?id=495
http://www.vckbase.com/document/viewdoc.asp?id=498
kvls 2004-09-03
  • 打赏
  • 举报
回复
直接使用API呢?
::ShowWindow(m_hWnd, SW_HIDE);
DentistryDoctor 2004-09-03
  • 打赏
  • 举报
回复
CSizebleDlg?是不是它的问题?

15,979

社区成员

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

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