Unable to have different icons for taskbar and window bar?

261 Views Asked by At

I have two icons (.ico files). A big 32x32 one and another small 16x16.

enter image description here

I'm trying to set the hIcon of my WNDCLASSEX to be the big one, and hIconSm to the smaller one. Yet I cannot for the life of me figure out how to do that! I first tried LoadIcon:

wndclass.hIcon = LoadIcon(instance, MAKEINTRESOURCE(IDI_SKELETON));
wndclass.hIconSm = LoadIcon(instance, MAKEINTRESOURCE(IDI_SKELETON_SM));

It always loads the same icon for both the top window bar and the taskbar. Same thing with LoadImage.

enter image description here

Here's all the codes:

Resource.h

#define IDI_SKELETON 1000
#define IDI_SKELETON_SM 1001

Skeleton.rc

#include "Resource.h"

IDI_SKELETON       ICON "Skeleton.ico"
IDI_SKELETON_SM    ICON "Skeleton_sm.ico"

WinMain.cpp

#include <windows.h>
#include "Resource.h"

LRESULT CALLBACK
HandleEvent(HWND   window,
            UINT   message,
            WPARAM wparam,
            LPARAM lparam)
{
    switch(message)
    {
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC dc;
            RECT rect;

            dc = BeginPaint(window, &ps);
            GetClientRect(window, &rect);
            DrawText(dc, TEXT("This is a test window"), -1, &rect,
                         DT_SINGLELINE | DT_CENTER | DT_VCENTER);
            EndPaint(window, &ps);
        }
        break;

        case WM_CLOSE:
        {
            PostQuitMessage(0);
            return 0;
        }
        break;
    }
    return DefWindowProc(window, message, wparam, lparam);
}

int CALLBACK
WinMain(HINSTANCE instance,
        HINSTANCE previous,
        LPSTR     cmd,
        int       cmdshow)
{
    WNDCLASSEX wndclass;
    TCHAR classname[] = TEXT("24HoursClass");

    wndclass.cbSize = sizeof(wndclass);
    wndclass.style = CS_VREDRAW | CS_HREDRAW;
    wndclass.lpfnWndProc = HandleEvent;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = instance;
    wndclass.hIcon = (HICON)LoadImage(instance, MAKEINTRESOURCE(IDI_SKELETON), IMAGE_ICON,
             GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), 0);
    wndclass.hIconSm = (HICON)LoadImage(instance, MAKEINTRESOURCE(IDI_SKELETON_SM), IMAGE_ICON,
             GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wndclass.lpszMenuName = 0;
    wndclass.lpszClassName = classname;

    RegisterClassEx(&wndclass);

    HWND window = CreateWindowA(classname, "24 Hours",
            WS_OVERLAPPEDWINDOW | WS_VISIBLE,
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            0, 0, instance, 0);

    MSG msg;

    while(GetMessage(&msg, window, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

What am I missing?

Any help is appreciated!

0

There are 0 best solutions below