Sur*_*ine 5 c++ windows winapi icons visual-studio
我正在尝试在我的程序中设置一个自定义图标,但没有任何反应。
我创建了一个包含内容的资源文件:
MYICON1 ICON "glider.ico"
Run Code Online (Sandbox Code Playgroud)我将资源文件添加到我的 Visual Studio 2013 项目中,并将其类型设置为“资源编译器”。类型“资源”不起作用(“无效或损坏的文件:无法在 0x1A 读取”)
我在创建窗口时使用以下代码加载图标:
wc.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( MYICON1 ) ); // MYICON1 is defined in Resource.h as 101.
Run Code Online (Sandbox Code Playgroud)只是为了确保我正确理解了您的问题……当您将资源文件的类型设置为“资源编译器”时,一切都可以正常编译,对吗?那是正确的设置,把它留在那里。其他的东西是用于 .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);
Run Code Online (Sandbox Code Playgroud)
就像 Retired Ninja 在他的评论中建议的那样,当代码没有按预期工作时,一定要测试函数的返回值。例如,测试是否hIcon
为NULL
。如果是,则LoadImage
函数失败,您需要找出原因。最有可能的是,您传递的参数不正确。要么在您的应用程序模块中没有具有该 ID 的资源,要么在图标文件中没有具有相应大小的图标。
用于调试的另一个技巧是使用其中一个内置系统图标。如果你能看到那个图标,你就知道一切正常,你可以开始换出东西来加载你的自定义图标。例如:
HICON hIcon = static_cast<HICON>(::LoadImage(NULL,
MAKEINTRESOURCE(IDI_WARNING),
IMAGE_ICON,
0, 0,
LR_DEFAULTCOLOR | LR_SHARED | LR_DEFAULTSIZE));
Run Code Online (Sandbox Code Playgroud)
这应该显示标准警告图标,就像您在消息框中看到的那样。如果这样做有效,但加载您自己的图标不起作用,则问题很可能出在您创建的 .ico 文件上。
归档时间: |
|
查看次数: |
15584 次 |
最近记录: |