我现在画了一个窗体,但是奇怪的是任务栏的图标并没有显示成默认的图标,而是如下图:
:
下面是我的全部代码,请问有啥问题:
#include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> #include <stdio.h> #include <GL/GL.h> #pragma comment (lib,"kernel32.lib") #pragma comment (lib,"user32.lib") #pragma comment (lib,"opengl32.lib") #pragma comment (lib,"Gdi32.lib") LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wPara,LPARAM lPara); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg = {0}; WNDCLASSEX wc = {0}; wc.cbSize = sizeof(WNDCLASSEX); wc.lpfnWndProc = WndProc; wc.hInstance = GetModuleHandle(NULL); wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND); wc.lpszClassName = "Hello,world"; wc.style = CS_OWNDC; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIconW(wc.hInstance,MAKEINTRESOURCEW(IDI_APPLICATION)); wc.hIconSm = LoadIconW(wc.hInstance,MAKEINTRESOURCEW(IDI_APPLICATION)); if(!RegisterClassEx(&wc)) return 1; CreateWindowW(L"Hello,World",L"Hello,World",WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,640,480,0,0,hInstance,0); while(GetMessage(&msg,NULL,0,0) > 0) DispatchMessage(&msg); return 0; } LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wPara,LPARAM lPara) { switch(msg) { case WM_CREATE: { PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 32, 0,0,0,0,0,0, 0, 0, 0, 0,0,0,0, 24, 8, 0, PFD_MAIN_PLANE, 0, 0,0,0 }; HDC ourWindowHandleToDeviceContext = GetDC(hWnd); int letWindowChooseThisPixelFormat = ChoosePixelFormat(ourWindowHandleToDeviceContext,&pfd); SetPixelFormat(ourWindowHandleToDeviceContext,letWindowChooseThisPixelFormat,&pfd); HGLRC ourOpenGLRenderingContext = wglCreateContext(ourWindowHandleToDeviceContext); wglMakeCurrent(ourWindowHandleToDeviceContext,ourOpenGLRenderingContext); // printf("opengl version: %s\n",glGetString(GL_VERSION)); // MessageBoxA(0,(char*)glGetString(GL_VERSION),"OPENGL VERSION",0); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd,msg,wPara,lPara); break; } return 0; }
解决方案
找到问题了,将LoadIcon的第一个参数设为NULL就好了.
附:官方文档上对第一个参数的解释:
A handle to an instance of the module whose executable file contains the icon to be loaded. This parameter must be NULL when a standard icon is being loaded.