博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mfc对话框启动就直接隐藏在右下角显示托盘图标
阅读量:4878 次
发布时间:2019-06-11

本文共 1131 字,大约阅读时间需要 3 分钟。

之前在网络上找了一份mfc对话框启动就直接隐藏窗体,在右下角显示托盘图标的demo

在win7下可以正常使用,但在win10上直接溢出,导致计算机跟注销似的崩溃现象。

后来找到原因是因为在OnInitDialog 中 执行了 SetWindowPlacement()(函数设置指定窗口的显示状态和恢复,最大化,最小化位置) 

操作,然后在执行的时候由于只是给下面几个值做了赋值,然而主要的位置信息没有赋值

WINDOWPLACEMENT wp;        wp.length = sizeof(WINDOWPLACEMENT);    wp.flags = WPF_RESTORETOMAXIMIZED;    wp.showCmd = SW_HIDE;

在win10上执行的时候就溢出了

在上面的操作中需要获取一下位置值

WINDOWPLACEMENT wp;    GetWindowPlacement(&wp);  //再次获取尺寸等信息,要不然会溢出(win10上崩溃)    wp.length = sizeof(WINDOWPLACEMENT);    wp.flags = WPF_RESTORETOMAXIMIZED;    wp.showCmd = SW_HIDE;    SetWindowPlacement(&wp);

后来又做了些修改,导致程序执行上面的隐藏操作不起作用在OnInitDialog 里

为了解决这个问题,就添加了消息处理函数 PreTranslateMessage

在消息处理函数中通过自定义消息 来隐藏窗口(想到这个方法是由于后来窗口起来之后手动点击隐藏操作就可以实现隐藏,但直接在OnInitDialog  里就不起作用)

自定义消息:

#define WM_HIDMESSAGE (WM_USER+1)

在OnInitDialog 最后发送该消息:

PostMessage(WM_HIDMESSAGE, NULL);

在PreTranslateMessage里处理该消息:

this->ShowWindow(SW_HIDE);

就实现了窗口启动隐藏功能了,不过,不过,会在右下角闪一下窗体在隐藏,效果不理想啊。

再后来就在OnInitDialog  发送隐藏消息之前加了句窗体最小化操作:

ShowWindow(SW_MINIMIZE);

很奇怪在OnInitDialog  执行 最小化操作就能起作用。

就这样先执行最小化操作,然后再执行隐藏操作,两者结合就能实现效果还不错的窗体启动就隐藏,在右下角显示托盘图标

转载于:https://www.cnblogs.com/wainiwann/p/7278678.html

你可能感兴趣的文章
Mybatis分页插件
查看>>
ASP.NET MVC IOC 之AutoFac攻略
查看>>
【BZOJ 4031】 4031: [HEOI2015]小Z的房间 (Matrix-Tree Theorem)
查看>>
final关键字的作用
查看>>
Bzoj4567---背单词
查看>>
[Python基础]006.IO操作
查看>>
一个非常棒的jQuery 评分插件--好东西要分享
查看>>
Statement和PreparedStatement的异同
查看>>
软件测试中的路径覆盖
查看>>
代码库工具:SVN
查看>>
成为优秀设计师的十大条件
查看>>
上传本地文件到github仓库基本操作
查看>>
ubuntu15.10安装后换源之后更新源出现Could not open lock file/var/lib/dpkg/lock等提示
查看>>
swing 学习笔记六(对话框Dialog )
查看>>
七、Zabbix-模板,应用集,监控项,触发器
查看>>
总结新系统部署时,Oracle的一些注意事项:
查看>>
HDU4722——Good Numbers——2013 ACM/ICPC Asia Regional Online —— Warmup2
查看>>
线性回归
查看>>
windows2003中如何查看服务器日志
查看>>
缓存读者按照行读取文件
查看>>