Radiobutton Hintergrundfarbe ändern



  • Caste während dem return noch zu 'LRESULT'. Außerdem sei noch gesagt, dass du dich um die Destruktion des Brushes kümmern musst.



  • hm, mit LRESULT zeigt er zwar keinen fehler mehr an, aber der verdammte hintergrund bleibt so grau. Was is da falsch?

    PS: Wie kann ich Destruktion machen? Müsste ich dann doch hinter return; machen, aber das wird doch nicht mehr aufgerufen, oder?



  • Ist es wirklich grau? Das ist irgendwie merkwürdig finde ich, zumal du ja ein WHITE_BRUSH zurückgibst. Am besten machst du eine statische Variable für den Brush, initialisierst ihn (am besten in WM_CREATE), und gibst ihn mit DeleteObject wieder frei (z.b. in WM_DESTROY).

    EDIT: Wenn du willst, dass der Hintergrund transparent ist, dann verwende dafür den HOLLOW_BRUSH (+GetStockObject). Ich bin mir allerdings nicht absolut sicher ob das funktionieren würde 🙄



  • ja, das Problem ist, dass ich irgendeinen BRUSH übergeben kann, da passiert einfach gar nichts, auch wenn ich BLACK_BRUSH oder so was lade. So ein Mist.
    Hab jetz folgendes:

    static HBRUSH hbrush;

    WM_CREATE:
    hbrush=(HBRUSH)GetStockObject(WHITE_BRUSH);

    WM_CTLCOLORBTN:
    return (LRESULT)hbrush;

    WM_DESTROY:
    DeleteObject(hbrush);

    Müsste das jetz nich gehn?
    Ich verzweifel langsam.



  • So ist's eigentlich ganz gut. Wo steht dieser Code jetzt eigentlich? Hast du den Radiobutton gesubclassed, oder steht der Code in der WindowProc des Elternfensters?



  • steht in der wndproc des parentwindow

    WM_CREATE:
    rbnormal = CreateWindow("BUTTON", "normal", WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON, 150, 10, 100, 20, hwnd, (HMENU)ID_RBNORMAL,((LPCREATESTRUCT)lParam)->hInstance,NULL);



  • Das scheint auch ganz ok zu sein. Schau mal mit dem Debugger nach ob die WindowProc diese Nachricht überhaupt erhält.

    Achja, du könntest folgendes noch verbessern:

    WM_CTLCOLORBTN:
    if( (HWND)lParam == rbnormal ) //verhindert, dass alle buttons diesen Brush bekommen
      return (LRESULT)hbrush;
    break;
    


  • So langt es eigentlich schon:

    case WM_CTLCOLORBTN: 
        return (LRESULT)GetStockObject(HOLLOW_BRUSH);
    

    Die zurückgegebenen Handles von GetStockObject() darfst du sogar gar nicht freigeben ⚠

    [edit]das if darfst du natürlich reinmachen, wenn irgendein Button grau sein soll[/edit]



  • However, only owner-drawn buttons respond to the parent window processing this message.

    It is not necessary (but it is not harmful) to delete stock objects by calling DeleteObject.



  • toll, was soll des jetz mit owner-drawn, heißt des das mein radiobutton garkeine andre Farbe annehmen kann? Oder brauch ich ne andre Message?



  • Don't Panik! Ich wußte doch, dass irgend so eine Nachricht kommt. Es ist aber WM_CTLCOLORSTATIC.

    It is not necessary (but it is not harmful) to delete stock objects by calling DeleteObject.

    Unter Window 3 durfte man die glaub noch nicht freigeben. (Hab ich letztens in nem alten Buch gelesen)



  • DANKEEEEEEEEE!!!

    Das Ding is weiß!

    Yippie!

    einfach messages austauscht und es funzt. Na endlich



  • Herzlichen Glückwunsch 😃


Anmelden zum Antworten