WinAPI的CreateWindow 如何指定任务栏图标

发布于 2022-08-28 11:09:15 字数 3302 浏览 12 评论 0

我现在画了一个窗体,但是奇怪的是任务栏的图标并没有显示成默认的图标,而是如下图:
任务栏图标 :
下面是我的全部代码,请问有啥问题:

    #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;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天暗了我发光 2022-09-04 11:09:15

找到问题了,将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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文