Modaler Dialog: Icon in der Titelleiste
-
Hallo,
ich habe eine modalen Dialog mit der Funktion DialogBox(), also ohne das Ganze mit WNDCLASS(EX) usw., erstellt. Ich arbeite mit VC++ 6 und konnte problemlos eine *.ico Datei als Ressource hinzufügen. Dieses Icon wird nun als Symbol der exe im Explorer und auch in der Taskleiste angezeigt, wenn das Programm gestartet ist. Allerdings würde ich dieses Icon nun auch gerne in der Titelleiste des Dialogfensters anzeigen.
Das Problem ist, dass sich zur Zeit überhaupt kein Icon dort befindet, obwohl ich in den Eigenschaften des Dialoges "Systemmenü" angehakt habe. Im Ressourceneditor wird auch noch ein Standardicon angezeigt; die fertige exe besitzt aber wie gesagt gar kein Icon - weder mein eigenes, noch dieses Standardicon.
Weiß jemand, woran das liegen kann und wie ich das Problem lösen kann?

ph4nt0m
-
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWndParent,GWL_HINSTANCE); HICON hIcon = LoadIcon(hInstance, IDC_DEINICON); if(hIcon) SendMessage(hWndParent, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);hWndParent ist das HWND aus dem CallBack des Hauptdialogs in dem du das Icon einfügen willst.
-
Das Icon muss dabei manuell geladen und das Handle der DialogBox zugewiesen werden.
Siehe folgenden Code:static HICON hicon; case WM_INITDIALOG: // IDI_ICON1 durch eigene Resource-ID ersetzen hicon = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0); if(hicon) SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hicon); // weiterer Code return TRUE;Nicht vergessen, den Speicher für das Icon bei WM_DESTROY mit
if(hicon) DestroyIcon(hicon);wieder freizugeben.
-
Vielen Dank an euch beide
Eure Lösungen sind ja recht ähnlich und es hat auch sofort wie gewünscht funktioniert.@LowFly:
Bei dir fehlt noch das MAKEINTRESOURCE beim Aufruf von LoadIcon. Du könntest das ja bei Gelegenheit eben ändern, falls mal jemand mit demselben Problem auf diesen Beitrag stößt
ph4nt0m