弹出对话框最小化的问题

hikaruxx 2010-04-29 10:43:12
我建立了一个对话框程序,点一个按钮后,会弹出另一个对话框,在弹出对话框中放一个最小化按钮,点最小化,可以使用当前的弹出对话框最小化,而且也可以把父对话框最小化,但这样有个问题,任务栏上有一个exe任务,不管我怎么点都没办法还原,请问各位大牛,我该怎么处理,才可以点任务栏上的这个任务,可以还原对话框。

注:我不想通过更改弹出对话框的样式WS_EX_APPWINDOW,因为这样任务栏上会有两个图标,我只需要一个,谢谢
...全文
472 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hikaruxx 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 visualeleven 的回复:]
引用 5 楼 hikaruxx 的回复:
引用 4 楼 visualeleven 的回复:
难道你点击后不能还原吗?应该是没有问题的啊


你可以尝试一下,是不可以的

我试了一下,父窗口和子窗口最小化以后,点击任务栏上的按钮可以还原窗口,任务栏也只有一个图标按钮啊,就是父窗口的。
测试环境:Win7 +VC6SP6
[/Quote]

不可以呀,我用的是XP+VC6SP6
你能不能把你测试的工程代码发给我,谢谢
ziven000@163.com
尹成 2010-04-30
  • 打赏
  • 举报
回复
这样应该是完全可以的啊
重载子对话B的WM_PAINT消息,重新EnablWindow(FALSE)父窗口
void CXXXDlg::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
if (!IsIconic())
{
GetParent()->EnableWindow(FALSE);
}
// Do not call CDialog::OnPaint() for painting messages
}
aa3000 2010-04-30
  • 打赏
  • 举报
回复
处理主对话框的 WM_ACTIVATEAPP 消息。
Eleven 2010-04-30
  • 打赏
  • 举报
回复
应该是父窗口被模特对话框阻塞了,你可在子窗口最小化以后EnableWindow父窗口就可以了
void B::OnButton() // 点击B上的按钮最小化B和A窗口
{
ShowWindow(SW_MINIMIZE);
GetParent()->ShowWindow(SW_MINIMIZE);
GetParent()->EnableWindow(TRUE);
}

当然你也要重载子对话B的WM_PAINT消息,重新EnablWindow(FALSE)父窗口
void CXXXDlg::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
if (!IsIconic())
{
GetParent()->EnableWindow(FALSE);
}
// Do not call CDialog::OnPaint() for painting messages
}
hikaruxx 2010-04-30
  • 打赏
  • 举报
回复
太感谢了,终于解决了
Eleven 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hikaruxx 的回复:]
引用 4 楼 visualeleven 的回复:
难道你点击后不能还原吗?应该是没有问题的啊


你可以尝试一下,是不可以的
[/Quote]
我试了一下,父窗口和子窗口最小化以后,点击任务栏上的按钮可以还原窗口,任务栏也只有一个图标按钮啊,就是父窗口的。
测试环境:Win7 +VC6SP6
hikaruxx 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]
难道你点击后不能还原吗?应该是没有问题的啊
[/Quote]

你可以尝试一下,是不可以的
Eleven 2010-04-29
  • 打赏
  • 举报
回复
难道你点击后不能还原吗?应该是没有问题的啊
hikaruxx 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]

比如你的父窗口为A,弹出的子窗口为B;

C/C++ code
void A::OnButton() // 点击A上的按钮弹出B对话框
{
B dlg(this);
dlg.DoModal();
}

void B::OnButton() // 点击B上的按钮最小化B和A窗口
{
ShowWindow(SW_MINIMIZE);
GetParent()->ShowW……
[/Quote]

我就是以这样的方式实现的。但这不是重点,最小化后,A和B都最小化了,在任务栏上有一个图标,我希望通过点这个图标,可以还原A和B的窗口
Eleven 2010-04-29
  • 打赏
  • 举报
回复
比如你的父窗口为A,弹出的子窗口为B;
void A::OnButton() // 点击A上的按钮弹出B对话框
{
B dlg(this);
dlg.DoModal();
}

void B::OnButton() // 点击B上的按钮最小化B和A窗口
{
ShowWindow(SW_MINIMIZE);
GetParent()->ShowWindow(SW_MINIMIZE);
}
LHacker 2010-04-29
  • 打赏
  • 举报
回复
关注一下~~~

15,979

社区成员

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

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