MFC基于对话框,自制最小化按钮和关闭按钮,代码如何实现?

xiaojie10090 2012-04-13 11:01:36
为了界面美观,我自制了一张位图作为界面背景,并把对话框的标题栏去掉了,然后想自制一个最小化按钮和关闭按钮;
我现在关闭按钮的代码用的是系统默认的取消按钮的代码:CDialog::OnCancel();,能达到关闭对话框的效果,但是不知道这样做到底对不对;
还有最小化按钮的代码怎么写我就更不知道了,请大虾们帮帮忙解决一下啦!
...全文
1400 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
大家好啊呵 2014-08-19
  • 打赏
  • 举报
回复
谢谢各位大神老师指导
xiaojie10090 2012-04-17
  • 打赏
  • 举报
回复
在此多谢网络里各位大神耐心指导!都是好人啊!
向立天 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 6 楼 的回复:
最大化、最小化、还原
这些都是系统命令
这样操作比较合理
C/C++ code
PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
PostMessage(WM_SYSCOMMAND, SC_RESTORE, 0);

关闭对应的消息……
[/Quote]
最大化按钮有两个作用
你看一下最大化之后按钮不就变样了么
再按那个按钮就还原了
同样最小化后要想回到最小化之前的样子也需要通过还原消息
xiaojie10090 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
最大化、最小化、还原
这些都是系统命令
这样操作比较合理
C/C++ code
PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
PostMessage(WM_SYSCOMMAND, SC_RESTORE, 0);

关闭对应的消息是
C/C++ code
P……
[/Quote]

大神,非常感谢!对我有用。

PS:第三个是干嘛的?呵呵
xiaojie10090 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

模态对话框?DoModal()
我不知道你的窗口是什么类型的
总之,无码无真相
[/Quote]

void CLoginDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(1);
if(m_username==_T("xiaojie")&&m_password==_T("xiaojie"))
{
CDialog::OnOK();
CMainDLG dlg;
if(!dlg.DoModal())
{
return ;
}
}
else
{
MessageBox(_T("用户名或密码错误!请重新输入!"));
}
}
这是我第一个对话框调用第二个对话框的代码,在执行的时候同时用“CDialog::OnOK();”把第一个对话框关闭了;

void CMainDLG::OnBnClickedRegion1()
{
// TODO: 在此添加控件通知处理程序代码
CRegion1Dlg dlg;
if(!dlg.DoModal())
{
return ;
}
}
这是第二个对话框调用第三个对话框的代码,并没有将第二个对话框关闭

void CMainDLG::OnBnClickedGuanbi()
{
// TODO: 在此添加控件通知处理程序代码
PostQuitMessage(1);
}
这是用你给的函数写的三个对话框的关闭代码

这种方式是不是模态对话框啊,我也不是很明白,大神帮我看看吧,就是在这种情况下,点第三个对话框的关闭按钮时,报错了,若是在打开第三个对话框时同时关闭第二个对话框(像第一个调用第二个时那样),再点第三个的关闭按钮就不报错了
向立天 2012-04-14
  • 打赏
  • 举报
回复
最大化、最小化、还原
这些都是系统命令
这样操作比较合理
PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
PostMessage(WM_SYSCOMMAND, SC_RESTORE, 0);

关闭对应的消息是
PostMessage(WM_CLOSE);
疯狂-的-蜗牛 2012-04-14
  • 打赏
  • 举报
回复
模态对话框?DoModal()
我不知道你的窗口是什么类型的
总之,无码无真相
疯狂-的-蜗牛 2012-04-13
  • 打赏
  • 举报
回复
最小化:ShowWindow(SW_HIDE);
关闭:PostQuitMessage(1);
xiaojie10090 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

我不知道你的对话框类型是模态还是非模态
直接使用PostQuitMessage(1);时应用程序就退出了,所有对话框都将关闭
不想这样的话用:SendMessage(WM_CLOSE)或者EndDialog(1);关闭
[/Quote]

嗯,我发现了一个现象,我在测试前两个对话框的时候,在打开第二个对话框之后第一个对话框是自动关闭的,所以两个对话框的关闭按钮都好使,而打开第三个对话框的时候,第二个对话框我并没有将其关闭,这个时候点第三个对话框的关闭按钮就出现上述问题了,我创建的是模式对话框
疯狂-的-蜗牛 2012-04-13
  • 打赏
  • 举报
回复
我不知道你的对话框类型是模态还是非模态
直接使用PostQuitMessage(1);时应用程序就退出了,所有对话框都将关闭
不想这样的话用:SendMessage(WM_CLOSE)或者EndDialog(1);关闭
xiaojie10090 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

最小化:ShowWindow(SW_HIDE);
关闭:PostQuitMessage(1);
[/Quote]

您好!我用了你给的函数,我现在做了三个对话框,逐级调用的,运行之后,前两个都能正常关闭,但是最后一个对话框点击关闭按钮的时候就出现错误了,不得不终止运行
三个对话框的关闭按钮的程序我都是用的下面的代码:
void CLoginDlg::OnBnClickedGuanbi()
{
// TODO: 在此添加控件通知处理程序代码
PostQuitMessage(1);
}
是不是我忽略了某个地方导致的,还是这样用不好?

15,976

社区成员

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

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