Unkompliziertester Weg, einen Button mittels Bitmap darzustellen
-
Danke, aber das Problem bei der Sache ist nur, dass der dösige 3D Rahmen weiterhin dargestellt wird.
-
Dann BS_FLAT noch hinzufügen.
-
Das erzeugt leider auch einen dicken schwarzen Ramen um den Button.
-
LPDRAWITEMSTRUCT lpdis; static HDC hdcMem; . . . case WM_CREATE: hButton = CreateWindow ("Button", "", WS_VISIBLE | WS_CHILD | BS_OWNERDRAW, 20, 20, 50, 30, hWnd1, (HMENU) ID_BUTTON, GetModuleHandle (NULL), 0); return 0; case WM_DRAWITEM: lpdis = (LPDRAWITEMSTRUCT) lParam; hdcMem = CreateCompatibleDC (lpdis->hDC); if (lpdis->CtlID == ID_BUTTON) SelectObject (hdcMem, LoadImage (GetModuleHandle (NULL), "bitmap1.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE)); StretchBlt (lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, lpdis->rcItem.right - lpdis->rcItem.left, lpdis->rcItem.bottom - lpdis->rcItem.top, hdcMem, 0, 0, 20, 20, SRCCOPY); DeleteDC (hdcMem); return 0; . . .
-
Alles klar

EDIT: Was ich noch vergessen hatte zu erwähnen, ist, dass ich es möglichst übersichtlich auf alle Buttons in meinem Prgramm anwenden können sollte.
-
Um mehrere Button zu "verwalten, füge einfach noch ein paar hiervon hinzu:
if (lpdis->CtlID == ID_BUTTON) SelectObject (hdcMem, LoadImage (GetModuleHandle (NULL), "bitmap1.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE));einfach ID_BUTTON und "bitmap1.bmp" ersetzen.
-
Die Buttons sollten dafür aber ownderdrawn sein oder?
EDIT: Steht ja da. Danke

-
SelectObject(hdcMem, LoadImage (hInst, (LPCSTR) IDB_BTT_ADD_N, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE));Hier bekomme ich leider eine Zugriffsverletzung....
-
Vergiß auch ned das Handle, was LoadImage zurückgibt, mit DeleteObject wieder freizugeben.
-
Hallo tenchou,
entschuldige diese vielleicht etwas unangenehme Frage, aber wie alt bist du? Manche Leute in diesem Forum stellen die Vermutung an, dass sich dein Alter im Bereich 15-7 Jahre bewegt. Ist das wahr?
-
CodeOriginator schrieb:
Hallo tenchou,
entschuldige diese vielleicht etwas unangenehme Frage, aber wie alt bist du? Manche Leute in diesem Forum stellen die Vermutung an, dass sich dein Alter im Bereich 15-7 Jahre bewegt. Ist das wahr?
Was hat das denn mit seiner Frage oder mit WinAPI zu tun??! Aber ich kann dich beruhigen, mein Alter bewegt sich nicht im Bereich 15-7 Jahre!!!
-
Verstehe gerade auch nicht was das soll, aber okay. Der Code läuft jedenfalls gut.
-
wenn du zum Beispiel das hier machst (in WM_DRAWITEM):
if (lpdis->itemState & ODS_SELECTED) { if (lpdis->CtlID == ID_BUTTON) SelectObject (hdcMem, LoadImage (GetModuleHandle (NULL), "bitmap_sel.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE)); } else { if (lpdis->CtlID == ID_BUTTON) SelectObject (hdcMem, LoadImage (GetModuleHandle (NULL), "bitmap.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE)); }kannst du auch noch verschiedene Bilder für einen Button einstellen, wenn dieser gerade gedrückt wird. Also 2 Bilder: 1 wenn der Buton gedrückt wurde und 1 wenn irgend etwas anderes mit dem Button ist.
-
Danke für den Tip, das wäre der nächste Schritt gewesen

-
Dachte ich mir schon und deshalb habe ich das einfach mal vorausschauend gepostet
