Selbstgezeichnete Buttons



  • Hi Leute!
    Also das Problem ist folgendes:
    Es geht um die Ownerdraw Buttons. Mit diesem Code

    if(lpdis->itemState & ODS_HOTLIGHT) 
    	{
    		hBmp=(HBITMAP)LoadImage(0,"bild.bmp",IMAGE_BITMAP,0,0,
                                  LR_LOADFROMFILE| LR_DEFAULTSIZE|
    
                                  LR_DEFAULTCOLOR|LR_CREATEDIBSECTION);
    		obj = SelectObject(hDC, hBmp);
    
    			BitBlt(lpdis->hDC,0,0,30 ,30 ,hDC,0,0,SRCCOPY);
          }
    

    sollte mein Programm, wenn ich mit der Maus über Button fahren würde, "bild.bmp" als Grafik darstellen. Es tut es aber nicht. Weiss jemand vielleicht wieso? Oder habe ich das mit dem ODS_HOTLIGHT nicht so ganz richtig verstanden.

    PS: Wenn ihr meinen würdet, dass ich Grafik falsch lade oder Problem mit dem Pfad habe, es funzt, wenn ich statt ODS_HOTLIGHT ein ODS_SELECTED reinschreibe.



  • ODS_HOTLIGHT ist nur für Menüs gedacht. Bei Buttons wird dieses Flag niemals gesetzt.

    Wenn Du XP benutzt ist es am Einfachsten, wenn Du die neuen Buttons (Version 6, also auch die CommonControls initialisieren!) verwendest. Über das frisch für Buttons eingeführte CustomDraw-Feature kommst Du schnell zum Ziel. Und wenn es Dir lediglich um die Bilder geht, kannst Du dem (neuen) Button auch eine ImageLsit hinzufügen. Der Button zeigt dann, je nach Status, das richtige Image an.



  • Danke für die Aufklärung <-King->. Ich benutze XP aber es sollte auch unter Win 9x funktionieren. Trotzdem big thanks.



  • stealth schrieb:

    Ich benutze XP aber es sollte auch unter Win 9x funktionieren.

    Dann schreib Dir einfach eine gemeinsame Draw-Funktion. Wenn das Programm auf Systemen < XP läuft, setzt Du nachträglich das Style BS_OWNERDRAW. Deine Draw-Funktion wird nun entweder aus WM_DRAITEM oder aus NM_CUSTOMDRAW aufgerufen.


Anmelden zum Antworten