如何修复加载图标()函数不显示图标?

How do I fix LoadIcon() Function not displaying icon?

本文关键字:图标 显示 显示图 函数 何修复 加载      更新时间:2023-10-16

我正在尝试使用LoadIcon()功能为我的3D游戏的应用程序窗口使用自定义图标(有关3D游戏的详细信息,请参阅我在此网站上的第一个问题(。 我初始化了实例句柄,就像我在代码论坛站点上看到的那样(与此类似,我什至没有注册它(,这是调用GetModuleHandle()函数并将其参数设置为NULL. 然后,我将图像的文件名用于与可执行文件位于同一文件夹中的hIconhIconSm(我最初将文件与源代码放在同一文件夹中,但这似乎不起作用(。这是我WNDCLASSEX对象初始化代码(其中也有HINSTANCE初始化(:

HINSTANCE hinstance;
hinstance = GetModuleHandle(NULL);
WNDCLASSEX wc;
wc.cbClsExtra = NULL;
wc.cbSize = sizeof(WNDCLASSEX);
wc.cbWndExtra = NULL;
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(hinstance, "ArtificialIconLg.png");
wc.hIconSm = LoadIcon(hinstance, "ArtificialIcon.ico");
wc.hInstance = NULL;
wc.lpszClassName = "MyWindowClass";
wc.lpszMenuName = "";
wc.style = NULL;
wc.lpfnWndProc = &WndProc;

我还将包括我的CreateWindowEx()函数:

m_hwnd = ::CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "MyWindowClass", "Artificial", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1024, 768, NULL, NULL, NULL, window);

LoadIcon仅从编译为 EXE 和 DLL 的资源中加载美术资源。 它将资源 ID 作为第二个参数。(它键入字符串的事实使其令人困惑(。 另外,我认为您不能直接通过 LoadIcon 加载 png 文件。

将.ico文件与 Visual Studio 项目一起添加到资源文件(.rc 文件(中,并在 resources.h 文件中添加相应的标识符。 Visual Studio为您完成大部分工作,只需右键单击并添加即可。

然后在代码中:

wc.hIcon = LoadIcon(hinstance, MAKEINTRESID(ICO_ARTIIFICIAL));
wc.hIconSm = LoadIcon(hinstance, MAKEINTRESID(ICO_ARTIIFICIAL));