当前位置:  开发笔记 > 编程语言 > 正文

设置应用程序图标的问题

如何解决《设置应用程序图标的问题》经验,为你挑选了0个好方法。

(我正在使用Visual Studio 2008,但我记得也有旧版本的类似问题.)

我尝试了几种不同的方法(其中许多方法在其他问题中提到过),但我仍然遇到一些奇怪的问题:

    将图标作为资源包含时,它会立即显示为可执行文件的图标,但是为了显示在任务栏上的图标,我必须重新启动计算机.在那之前,它继续显示为以前的图标.清理解决方案,重新启动VS,没有任何影响.这不是一个非常大的问题,因为它不会影响已发布的exe,但是知道它在哪里保持旧图标缓存以及如何摆脱它会很好.

    无论我做什么,alt-tabbing时显示的图标是默认的应用程序图标(方形和白色以及通用).这包括嵌入在可执行文件的图标,以及设置ICON_BIGWM_SETICON.

至于第二件事,我的代码看起来像:

   hIcon = (HICON)(
      LoadImage( NULL, szFilename, IMAGE_ICON, 32, 32, LR_LOADFROMFILE ) );
   if( hIcon )
      SendMessage( hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon );

但是,发送后WM_SETICON,GetLastError()返回6,"句柄无效.". hWnd是一个有效的窗口句柄,hIcon似乎是一个有效的图标句柄.我已经尝试寻找WM_SETICON可能导致该错误的原因,并且至少要找出它认为无效的WHICH句柄,但还没有运气.我在调用之前立即清除了错误代码SendMessage(),因此必须在处理消息时将其设置在某处.

我尝试了另一种方法,从exe本身加载图标,其中资源的ID是101(它是第一个也是唯一包含的资源):

   hIcon = (HICON)(
      LoadImage( GetModuleHandle( NULL ), MAKEINTRESOURCE( 101 ),
      IMAGE_ICON, 48, 48, 0 ) );
   if( hIcon )
      SendMessage( hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon );

......但是同样的事情发生了; 在调用之后SendMessage(),GetLastError()给出相同的错误状态.

我尝试了不同的尺寸(例如48x48,所有这些尺寸都出现在图标文件中),但没有不同的效果.我知道这肯定是找到并加载图像,因为如果我指定一个不存在的大小或无效的资源ID或错误的文件名(取决于我如何加载它),它很久就会失败SendMessage().

奇怪的是,如果我指定ICON_SMALL而不是ICON_BIG,则调用成功且没有错误状态,但是从文档中,我需要使用ICON_BIG设置alt-tabbing时使用的图标.此外,如果我使用ICON_BIG但加载16x16图标,我没有错误状态,但没有任何变化.

关于什么可能导致WM_SETICON失败的任何想法?我发布的任何代码都有严重错误(除了格式化/样式/转换问题,因为它简化为基础知识)?

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有