如何解决隐藏托盘图标后的空白?

zys85 2008-06-03 02:30:24
HWND hTray = FindWindow(TEXT( "Shell_TrayWnd "), NULL);
if(hTray == NULL)
break;
hTray = FindWindowEx(hTray, NULL, TEXT( "TrayNotifyWnd "), NULL);
if(hTray == NULL)
break;
hTray = FindWindowEx(hTray, NULL, TEXT( "SysPager "), NULL);
if(hTray == NULL)
break;
hTray = FindWindowEx(hTray, NULL, TEXT( "ToolbarWindow32 "), NULL);
if(hTray == NULL)
break;
iNum = SendMessage(hTray, TB_BUTTONCOUNT, NULL, NULL); //获取任务栏上图标个数
for (i = 0; i < iNum; i++)
SendMessage(hTray, TB_HIDEBUTTON, i, TRUE); \
我用这个办法可以隐藏图标,但是留下了一片空白,只有在再次加入或删除图标后才能正常,查以前的帖子,发现有人说
try SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE, 0, "Environment ") etc.
可以解决问题,但是我使用后没有效果,不知道是使用方法的问题还是别的原因,我是2000系统,如果可以的话,详细一点.

p.s:折衷的办法是NOTIFYICONDATA nid2;
nid2.cbSize = sizeof(NOTIFYICONDATA);
nid2.hWnd = this->m_hWnd;
nid2.uID = IDR_MAINFRAME+1;
strcpy(nid2.szTip, "update"); //提示
Shell_NotifyIcon(NIM_ADD, &nid2);
Shell_NotifyIcon(NIM_DELETE, &nid2);
但我总觉得应该有更正确的办法.
...全文
498 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zys85 2008-06-05
  • 打赏
  • 举报
回复
up
zys85 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jimoguilai 的回复:]
那就先添加你自己程序的图标,然后全部隐藏,然后再删除自己的图标
[/Quote]
我的折衷办法就是类似于此,但是我总觉得这不是最好的办法,应该有类似的1个message可以完成这个功能
Chivalry 2008-06-04
  • 打赏
  • 举报
回复
那就先添加你自己程序的图标,然后全部隐藏,然后再删除自己的图标
zys85 2008-06-03
  • 打赏
  • 举报
回复
我装了个XP进行了试验,确实在XP下::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);是有效的。

那么现在问题就明确了,在2000下怎么实现这个功能呢。另外说下,hTray = FindWindowEx(hTray, NULL, TEXT( "SysPager "), NULL); 这一步在2000下是跳过得,不知道是不是有关系。
Chivalry 2008-06-03
  • 打赏
  • 举报
回复
我试过才给你说的
你原来得最后一个参数是"Environment",我在我的xp系统测试过的,没有效果
我发的这个,最后一个参数是0,我在我的xp系统测试过的,是可以的
Chivalry 2008-06-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zys85 的回复:]
引用 2 楼 jimoguilai 的回复:
这样就可以了

C/C++ code::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);


就是因为这样没有效果我才会发帖子的,你可以把代码写上去试下
[/Quote]

我试过才给你说的
你原来得最后一个参数是"Environment",我测试过的,最后一个参数是0
zys85 2008-06-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jimoguilai 的回复:]
这样就可以了

C/C++ code::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
[/Quote]

就是因为这样没有效果我才会发帖子的,你可以把代码写上去试下
Chivalry 2008-06-03
  • 打赏
  • 举报
回复
这样就可以了
::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
leelittlelong 2008-06-03
  • 打赏
  • 举报
回复
我觉得你的办法挺好。。。 够严谨
我一般都连隐藏都不去隐藏。。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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