【问题解决】windows程序使用LaodImage加载图标无法显示在程序窗口标题栏

来源:互联网 发布:知乎 身体发肤受之父母 编辑:程序博客网 时间:2024/06/06 18:41

记录我在学习windows程序设计发现的问题。

在windows程序设计中使用LoadImage函数加载图标时发现自己设定的图标虽然能够在windows任务栏和.exe文件上显示,但是却无法显示在程序窗口栏。就像这样:




后来发现原来是因为自己在resource.h文件中的图标资源标识符与在.rc文件中的图标资源标识符不相同导致的。如图:




更改为相同标识符后,程序显示正常了。如图:




最后附上代码:


#include <Windows.h>#include "resource.h"#define WINDOWS_CLASS_NAME TEXT("Window_Practice")#define WINDOWS_TITLE_NAME TEXT("Window_Practice")#define WINDOW_WIDTH 400#define WINDOW_HEIGHT 400LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);void ErrorReport(LPCTSTR szReport);int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR szCmdLine, int iCmdShow){HWND hWnd;MSG msg;WNDCLASS wndclass;wndclass.style = CS_HREDRAW | CS_VREDRAW;wndclass.lpfnWndProc = WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = hInst;wndclass.hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON_KNIGHT), IMAGE_ICON,0, 0, LR_DEFAULTSIZE);wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);wndclass.lpszClassName = WINDOWS_CLASS_NAME;wndclass.lpszMenuName = NULL;wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);if(!RegisterClass(&wndclass)){ErrorReport(TEXT("注册窗口失败!"));return -1;}hWnd = CreateWindow(WINDOWS_CLASS_NAME, WINDOWS_TITLE_NAME,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT,NULL, NULL, hInst, NULL);ShowWindow(hWnd, iCmdShow);UpdateWindow(hWnd);while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){switch (msg){case WM_CREATE:return 0;case WM_SIZE:return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hWnd, msg, wParam, lParam);}void ErrorReport(LPCTSTR szReport){MessageBox(NULL, szReport, WINDOWS_CLASS_NAME, MB_ICONERROR);}



1 0
原创粉丝点击