Eine (warscheinlich) dumme frage
-
Der selbe Code, nur anders eingerückt:
case WM_DRAWITEM: { LPDRAWITEMSTRUCT pdis = (LPDRAWITEMSTRUCT) lParam; switch (pdis->CtlID) { case IDC_BUTTON1: { HDC hDC = GetDC(hButton); HDC hComDC = CreateCompatibleDC(hDC); SelectObject(hComDC, hBitmap); BitBlt(hDC, 0, 0, bmpbut.bmWidth, bmpbut.bmHeight, hComDC, 0, 0, SRCCOPY); DeleteObject(hComDC); ReleaseDC(hButton, hDC); } break; case IDC_BUTTON2: { HDC hDC = GetDC(hButton1); HDC hComDC = CreateCompatibleDC(hDC); SelectObject(hComDC, hBitmap1); BitBlt(hDC, 0, 0, bmpbut.bmWidth, bmpbut.bmHeight, hComDC, 0, 0, SRCCOPY); DeleteObject(hComDC); ReleaseDC(hButton1, hDC); } break; if (pdis->itemState & ODS_SELECTED) InvertRect(pdis->hDC, &pdis->rcItem); // wenn Button gedrückt invertieren } }
Siehst du es jetzt?
Was ich über Einrückungsstil/Klammerstil geschrieben habe hat schon seinen Grund.
ps: Der Compiler müsste dir hier auch eine Warning geben. Irgendwas über "unreachable code". Warnings ignorieren ist auch keine gute Idee.
-
mmh ne hat auch nicht geholfen
-
Beschreib mal wie du meinst dass die Ausführung die Zeile
if (pdis->itemState & ODS_SELECTED)
erreichen soll.
-
Tja gute frage.
Aber wenn ich nur einen button habe funktioniert ja alles. Warum nicht wenn ich 2 habe
-
Okay ich habe das Problem gelöst. Waren nur 2 kleine Wörter.
break; // und break;
-
Nein, die
break
s sind da schon OK.Ich glaube dir fehlen einfach noch viel zu viele Grundlagen.
Eine "korrekte" Lösung wäre:
case WM_DRAWITEM: { LPDRAWITEMSTRUCT pdis = (LPDRAWITEMSTRUCT) lParam; bool invertIfSelected = false; switch (pdis->CtlID) { case IDC_BUTTON1: invertIfSelected = true; { HDC hDC = GetDC(hButton); HDC hComDC = CreateCompatibleDC(hDC); SelectObject(hComDC, hBitmap); BitBlt(hDC, 0, 0, bmpbut.bmWidth, bmpbut.bmHeight, hComDC, 0, 0, SRCCOPY); DeleteObject(hComDC); ReleaseDC(hButton, hDC); } break; case IDC_BUTTON2: invertIfSelected = true; { HDC hDC = GetDC(hButton1); HDC hComDC = CreateCompatibleDC(hDC); SelectObject(hComDC, hBitmap1); BitBlt(hDC, 0, 0, bmpbut.bmWidth, bmpbut.bmHeight, hComDC, 0, 0, SRCCOPY); DeleteObject(hComDC); ReleaseDC(hButton1, hDC); } break; } if (invertIfSelected && (pdis->itemState & ODS_SELECTED)) InvertRect(pdis->hDC, &pdis->rcItem); // wenn Button gedrückt invertieren }
-
Mmh nachdem ich aber die breaks; weggenommen habe, hat alles funktioniert
-
Ja, das ist mir schon klar.
Trotzdem ist es Mist ohne diebreak
s.Ist dir denn klar was ohne die
break
s passiert wenn das ganze mitpdis->CtlID == IDC_BUTTON1
ausgeführt wird?
-
ne warum?
-
Verstehst du überhaupt irgendwas davon was das Programm macht?
-
hustbaer schrieb:
Verstehst du überhaupt irgendwas davon was das Programm macht?
Die erste Frage war eigentlich schon Beweis genug, das dies nicht der Fall ist:
https://www.c-plusplus.net/forum/331622-10
Weitere Buttons waren als Kommentar schon vorgesehen ...