gpt4 book ai didi

c++ - 设置应用程序图标的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:38 25 4
gpt4 key购买 nike

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

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

  1. 当包含一个图标作为资源时,它会立即显示为可执行文件的图标,但要使图标显示在任务栏上,我必须重新启动计算机。在那之前,它会继续显示为以前的图标。清理解决方案,重新启动 VS,没有任何效果。这不是什么大问题,因为它不会影响已发布的 exe,但如果知道它将旧图标缓存在何处以及如何删除它,那就太好了。

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

至于第二件事,我的代码是这样的:

   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 可能导致该错误的原因,并且至少要找出它认为无效的句柄,但还没有成功。我在调用 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,调用会成功且没有错误状态,但是来自 the docs ,我需要使用 ICON_BIG 来设置 alt-tabbing 时使用的图标。此外,如果我使用 ICON_BIG 但加载 16x16 图标,我不会收到任何错误状态,但没有任何变化。

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

最佳答案

我已经重新审视了这个问题,看看是否可以结束我的问题。我一直无法通过将应用程序的图标嵌入到可执行文件中来使该应用程序的图标显示在 alt-tab 列表中;它会显示在任务栏中,作为文件在资源管理器中的图标,在其他地方也很好。

我想我会尝试一些更简单的方法来手动设置图标,然后使用 LoadIcon() 代替,如下面的代码所示:

HICON hIcon = LoadIcon( GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1) );
if( hIcon )
{
SendMessage( GetHandle(), WM_SETICON, ICON_BIG, (LPARAM)hIcon );
DestroyIcon( hIcon );
}
// ... Same for ICON_SMALL

这似乎已经成功了。我真的不知道为什么,但到目前为止,这是唯一有影响的变化。这真的不是我应该花更多时间解决的问题,所以我会解决这个问题。

关于c++ - 设置应用程序图标的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com