Icon von Control zur Laufzeit ändern



  • Hi,

    ich habe das folgende Problem:

    Ich möchte gerne das Icon eines Controls in einem Dialog zu verschiedenen Zeiten mit unterschiedlichen Icons aus der Resource darstellen, mein Versuch scheitert:

    GetDlgItem(IDC_ICON_NAME)->SetIcon((HICON)::LoadImage(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON_EINS), IMAGE_ICON, 32/*nWidth*/, 32/*nHeight*/, LR_DEFAULTCOLOR), FALSE);
    

    Funktioniert auch nicht:

    GetDlgItem(IDC_ICON_NAME)->SetIcon(AfxGetApp()->LoadIcon(IDI_ICON_EINS), FALSE);
    

    Wie kann man solch ein Problem lösen?

    😕



  • Gegenfrage: Wie äußert sich dieses "funktioniert nicht"?



  • Na ja, trotz Aufruf eines "UpdateData(FALSE);" nach dem Neusetzen des Icons (wie oben beschrieben) wird kein neues Icon auf dem Control dargestellt.

    Es wird immer noch das angezeigt, welches ich in der Resourcenansicht des Dialoges zunächst mit dem Control assoziiert habe.

    ???



  • Hast du mal ein Invalidate() ausprobiert? (UpdateData() tauscht Informationen zwischen den Controls und den damit verbundenen Klassenmembern aus, ist also nicht das richtige für diese Anwendung)



  • Hab ich soeben probiert, sowohl für das Fenster als auch dediziert für das Control:

    GetDlgItem(IDC_ICON_NAME)->Invalidate(TRUE);

    Dasselbe Verhalten, kein Änderung des Icons. 😕


  • Mod

    1. SetIcon ist für Toplevel Fenster
    2. CStatic haben eine eigene Metode bzw. Nachricht bzw. SetIcon die mit WM_SETICON nichts zu tun hat. CStatic::SetIcon benutzt STM_SETICON, CWnd::SetIcon benutzt WM_SETICON!



  • Ich danke euch beiden, das war's! 😉


Log in to reply