LoadIcon(NULL, IDI_*) liefert immer nur das gleiche Standardicon
-
Hallo.
Ich bekomme beim Laden von Standardicons für mein Fenster immer nur ein und dasselbe Standardicon angezeigt, egal ob ich LoadIcon IDI_APPLICATION, IDI_WINLOGO oder eine der anderen Standardbezeichner für Icons übergebe. Das Programm kompiliert und läuft einwandfrei.
Habe gegoogelt und hier die Suche-Funktion bemüht, aber augenscheinlich bin ich tatsächlich der einzige, der dieses Probelm hat. Weiß jemand wieso das sein kann? An irgendwas muss es ja liegen, zumal ich mit LoadCursor ohne Probleme jeden Standardcursor laden kann.
Auch wenn's wahrscheinlich nicht viel bringt, gebe ich mal einen lauffähigen (und auch völlig trivialen) Beispielcode an, der aber geschildertes Problem hat (zumindest auf meinem Rechner):
//main.cpp #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; ZeroMemory(&wc, sizeof(wc)); wc.cbSize = sizeof(wc); wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); //egal welches IDI_..., es ist immer dasselbe Icon im Fenster wc.hCursor = LoadCursor(NULL, IDC_ARROW); //funktioniert einwandfrei, jeder Standardcursor wird angezeigt wc.hbrBackground = (HBRUSH)1; wc.lpszClassName = "ClassName"; wc.hIconSm = LoadIcon(NULL, IDI_WINLOGO); //dasselbe Problem RegisterClassEx(&wc); HWND hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, "ClassName", "Title", WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }EDIT: Bin zwar nicht auf die Standardicons von Windows angewiesen, aber es wäre dennoch gut zu wissen, warum sowas triviales bei mir grade nicht funktioniert. Andere Icons kann ich per Resourcen problemlos laden.
-
Dieses Verhalten kann auftreten, weil einige Systemkomponenten und Programme von Fremdanbietern IDI_WINLOGO als lpIconName in den LoadIcon-Eigenschaften angeben. Wird IDI_WINLOGO angegeben, erscheint statt des Windows-Logo-Symbols ein allgemeines Fenstersymbol als Systemmenü-Symbol.
Es handelt sich hierbei um ein programmtechnisch bedingtes Verhalten.
-
Auha, danke für des Rätsels Lösung. Jetzt kann ich wieder ruhig schlafen

Ciao.