修改窗体风格,去掉WS_EX_TOOLWINDOW,任务栏上图标不能立即显示的问题

会思考的草 2012-02-09 04:42:29
如题,窗口需要在两种模式下切换,一种是正常的窗口,在任务栏有图标,有sysmenu,另一种是停靠的浮动条,此时在任务栏没有图标。

问题1
用ModifyWindowEx修改窗体风格WS_EX_TOOLWINDOW为WS_EX_APPWINDOW,任务栏上有图标但是无法立即显示,需要先切换到其他窗口,再点击我自己的窗口,任务栏图标才会出现。

问题2
任务栏图标出现后,点击任务栏图标,应该使窗口在最小化和正常显示之间切换,但是发现有时候点击任务栏图标,窗口无法收到WM_SYSCOMMAND/SC_MINIMIZE的点击消息,要再按一次才能收到这个消息,何故?
...全文
1007 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2012-03-23
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
会思考的草 2012-02-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fishion 的回复:]

很久没看到LZ出现了,最近又转VC开发了呀
[/Quote]
没办法,最近这个项目居然需要用MFC,我以为我以后再也没可能再碰MFC了呢,都忘光了。
fishion 2012-02-09
  • 打赏
  • 举报
回复
很久没看到LZ出现了,最近又转VC开发了呀
Eleven 2012-02-09
  • 打赏
  • 举报
回复
恭喜~
会思考的草 2012-02-09
  • 打赏
  • 举报
回复
修改窗体风格之前先ShowWindow(SW_HIDE)即可。
事实上我这里根本就不需要call SetWindowPos(... SWP_FRAMECHANGED),因为我的窗口是一个没有非客户区的窗口,没有标题栏,没有边框,就算是触发了WM_NCCALCSIZE,我也是直接return的。
会思考的草 2012-02-09
  • 打赏
  • 举报
回复
自己找到解决办法了。不是SetWindowPos,我已经调用过这个SetWindowPos(... SWP_FRAMECHANGED)了。

The Shell will remove a window's button from the taskbar only if the window's style supports visible taskbar buttons. If you want to dynamically change a window's style to one that does not support visible taskbar buttons, you must hide the window first (by calling ShowWindow with SW_HIDE), change the window style, and then show the window.
healer_kx 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oldmtn 的回复:]

问题1
用ModifyWindowEx修改窗体风格WS_EX_TOOLWINDOW为WS_EX_APPWINDOW,任务栏上有图标但是无法立即显示,需要先切换到其他窗口,再点击我自己的窗口,任务栏图标才会出现。

需要SetWindowPos
SWP_FRAMECHANGED
Applies new frame styles set using the SetWindowLong fu……
[/Quote]
++
oldmtn 2012-02-09
  • 打赏
  • 举报
回复
问题1
用ModifyWindowEx修改窗体风格WS_EX_TOOLWINDOW为WS_EX_APPWINDOW,任务栏上有图标但是无法立即显示,需要先切换到其他窗口,再点击我自己的窗口,任务栏图标才会出现。

需要SetWindowPos
SWP_FRAMECHANGED
Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE is sent only when the window's size is being changed.

15,979

社区成员

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

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