Button- Style während Laufzeit ändern?



  • Hallo Forum,

    ich steh mal wieder vor einem Rätsel:

    Kann ich während der Laufzeit den Style eines Buttons ändern? Ich möchte zunächst Text auf einen Button anzeigen und sobald der Anwender auf den Button gedrückt hat, ein Icon auf dem Button darstellen.

    Kann ich da einfach via:

    (..)
    SendMessage(GetDlgItem(hDlg,IDC_BUTTON1),(UINT) BM_SETSTYLE ,(WPARAM) LOWORD(BS_TEXT), TRUE);  //für Texteinträge
    (..)
    SendMessage(GetDlgItem(hDlg,IDC_BUTTON),(UINT) BM_SETSTYLE ,(WPARAM) LOWORD(BS_ICON), TRUE);  //für Texteinträge
    

    hin- und her schalten ?

    Danke, Tobi



  • Warum probist du es nicht aus?

    Warum benutzt du beim 3. Param. LOWORD??



  • Hello,

    ich habs schon ausprobiert -das ging aber nicht. Ob's jetzt an meiner Unfähigkeit liegt oder prinzpiell weiss ich nicht.

    In meiner MSDN Hilfe steht :
    (..)
    BM_SETSTYLE
    wParam = (WPARAM) LOWORD(dwStyle); // style
    lParam = MAKELPARAM(fRedraw, 0); // redraw flag
    (...)

    MfG Tobi



  • bei mir steht:

    lResult = SendMessage(      // returns LRESULT in lResult     (HWND) hWndControl,      // handle to destination control     (UINT) BM_SETSTYLE,      // message ID     (WPARAM) wParam,      // = (WPARAM) () wParam;    (LPARAM) lParam      // = (LPARAM) () lParam; );
    

    nimm das LOWORD einfach da weg. obs was hilft weiß ich nicht



  • mmh .. entweder ich bin zu blöd oder es geht nicht.. (oder beides :-))

    Das hab ich versucht:

    (..)
    //Ausgangszustand: Text auf Button
    SendMessage(GetDlgItem(hDlg,IDC_BUTTON1),(UINT) BM_SETSTYLE ,(WPARAM) BS_TEXT, TRUE); 
    SetWindowText(GetDlgItem(hDlg,IDC_BUTTON1),"Text auf Button");
    (..)
    //dann irgendwann soll ein Icon drauf:
    
    hIcon= LoadImage(GetModuleHandle (NULL), MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR );
    SendMessage(GetDlgItem(hDlg,IDC_BUTTON1),(UINT) BM_SETSTYLE ,(WPARAM) BS_ICON,TRUE) ; 
    SendMessage (GetDlgItem(hDlg,IDC_BUTTON1), BM_SETIMAGE, (WPARAM) IMAGE_ICON,(LPARAM)hIcon);
    

    Bei mir funtzt des nicht...

    ich arbeite mit vc++ und in dem Resourcen- Editor kann ich dem gezeichneten Button manuell den Style zuweisen, aber genau das will ich eben nicht..

    Irgendwelche Ideen?

    MfG
    Tobi



  • du bist tatsächlich nur zu blöd!



  • 😃

    Geht das etwa?? Wo is denn mein Sch***- Fehler?? Die SendMessage- Aufrufe stimmen doch, oder?

    MfG
    Tobi



  • Bin mir nicht sicher, ob das etwas damit zu tun hat, aber normalerweise solltest du wohl alle Styles angeben, nicht nur die neuen. Also evtl. erst die alten Styles auslesen, den neuen Style hinzufügen und dann wieder setzen 😉



  • so wie ich die dokumentation verstehe ist BM_SETSTYLE aber nur für die button styles zuständig, also nicht sowas wie WS_VISIBLE oder WS_CHILD. 🙄



  • Ich dachte, man müsste BS_PUSHBUTTON o.ä. noch mit angeben - scheint aber wohl nicht der Fall zu sein. Also nur ein Fehlalarm 😉



  • #define BS_PUSHBUTTON       0x00000000L
    

    😃



  • OK, noch ein Grund mehr, warum meine Aussage Schwachsinn war 🙄



  • Kann man vielleicht die "Styles" nur ändern wenn man mit "CreateWindowEx" gearbeitet hat?

    Laut MSDN:
    "If you create a button by specifying the BUTTON class with the CreateWindow or CreateWindowEx function, you can specify a combination of the button styles in the following table..."

    😕

    Tobi


Anmelden zum Antworten