在Windows程序中加载图标

Loading an icon in Windows program

本文关键字:加载 图标 程序 Windows      更新时间:2023-10-16

我正在尝试设置自定义图标到我的程序中,但没有任何反应。

  1. 我用这个工具创建了一个图标。
  2. 我创建了一个资源文件,内容为:

    MYICON1 ICON  "glider.ico"
    
  3. 我将资源文件添加到我的Visual Studio 2013项目中,并将其类型设置为"resource Compiler"。类型"资源"不工作("无效或损坏的文件:无法在0x1A读取")

  4. 在创建窗口时,我用以下代码加载图标:

    wc.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( MYICON1 ) ); // MYICON1 is defined in Resource.h as 101.
    

只是为了确保我正确理解了你的问题"当你将资源文件的类型设置为"资源编译器"时,一切都编译得很好,对吧?这是正确的设置,就这样吧。其他的是。net应用程序。

所以问题只是你没有看到图标?您在编辑器中创建了多大的图标?LoadIcon函数非常老,只能加载默认大小的图标,通常是32x32。如果想加载不同大小的图标,则需要使用LoadImage函数。超过99%的情况下,你应该调用这个函数来加载图标。我已经很多年没有使用LoadIcon了。

HICON hIcon = static_cast<HICON>(::LoadImage(hInstance,
    MAKEINTRESOURCE(MYICON1),
    IMAGE_ICON,
    48, 48,    // or whatever size icon you want to load
    LR_DEFAULTCOLOR);

就像退役忍者在他的评论中建议的那样,当代码没有按预期工作时,一定要测试函数的返回值。例如,测试hIcon是否为NULL。如果是这样,则LoadImage函数失败,您需要找出原因。最有可能的是,您传递的参数不正确。要么是你的应用模块中没有该ID的资源,要么是图标文件中没有相应大小的图标。

用于调试的另一个技巧是使用一个内置的系统图标。如果你能看到那个图标,你就知道一切正常,你就可以开始交换东西来加载你的自定义图标。例如:

HICON hIcon = static_cast<HICON>(::LoadImage(NULL,
    MAKEINTRESOURCE(IDI_WARNING),
    IMAGE_ICON,
    0, 0,
    LR_DEFAULTCOLOR | LR_SHARED | LR_DEFAULTSIZE));

应该显示标准警告图标,就像您在消息框中看到的那样。如果工作,但加载你的自己的图标不工作,问题很可能是与你创建的。ico文件。

你可以像这样设置你的图标资源,并使用加载图标'与wcexh图标和wcexh图标Sm。它同时设置项目输出图标和程序图标。

'IDI_MAIN_ICON           ICON                    "cellphone.ico"
'Load Icon( h Instance, MAKEINTRESOURCE(IDI_MAIN_ICON));'