我最近開始學習 Win32 API,每次都成功編譯,直到現在。
我在資源檔案(main.rc和resource.h)中添加了一個圖示,并在包含main.h頭檔案(參考資源頭的位置)后,出現以下轉換錯誤:
錯誤:從“int”到“LPCSTR”的無效轉換{aka 'const char*'} [-f permissive]
注意:在宏“IDI_MYICON”的定義中
我在網上查看了一些解決方案,但是大多數(如果不是全部)都是關于非 Unicode 字串,而不是資源。我忘記了什么嗎?
main.c 檔案:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_MYICON); //icon resource referenced here
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_MYICON); //icon resource referenced here as well
//.....
main.rc 檔案:
#include "resource.h"
IDI_MYICON ICON "my_icon.ico"
main.h 檔案:
#pragma once
#include "resource.h"
資源.h檔案:
#define IDI_MYICON 101
uj5u.com熱心網友回復:
API 函式類似于LoadCursor并LoadIcon采用指向字串的指標作為引數來指定要加載的資源,而不是整數(這就是整數IDI_MYICON)。
這樣做的原因是資源可以將名稱作為識別符號,而不僅僅是數字識別符號。
要在這些 API 中使用數字識別符號,您需要將其轉換為字串指標。API 提供了MAKEINTRESOURCE用于此目的的宏。
例如,wc.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_MYICON));。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/364066.html
