BM_GETSTATE Nachricht -> BST_PUSHED auslesen
-
Hi,
ich möchte mit SendMessage(hWnd, BM_GETSTATE, 0, 0); auslesen ob ein Button gedrückt dargestellt wird oder nicht. Wenn er nicht gedrückt ist möchte ich ihn mit SendMessage(hWnd, BM_SETSTATE, 1, 0) als gedrückt darstellen, bzw wenn er gedrückt ist möchte ich ihn mit SendMessage(hWnd, BM_SETSTATE, 0, 0) wieder normal darstellen. Dazu muss ich allerdings immer den momentanen Status mit BM_GETSTATE auslesen. Jetzt habe ich allerdings das Problem, dass der Rückgabewert mehrere Bit Flags enthält: BST_CHECKED, BST_FOCUS, BST_INDETERMINATE, BST_PUSHED und BST_UNCHECKED. Ich möchte allerdings nur den BST_PUSHED Wert abfragen, also ob der Button gedrückt ist oder nicht.Also meine Frage: wie mache ich das?
gruß
-
bool bPushed = (uiStatus & BST_PUSHED)!=0;
-
wofür steht denn uiStatus?^^
-
Für den Wert, den Du mit BM_GETSTATE bekommst. So schwer?
-
ne eigentlich nicht aber ich frag nach, weil es nicht so funktioniert wie ich will... wahrscheinlich hab ich nur nen Denkfehler drin aber ich komm nicht drauf. Also mein Code schaut grad so aus:
LRESULT lResult = SendMessage(hWnd, BM_GETSTATE, 0, 0); bool bPushed = (lResult & BST_PUSHED) != 0; if(bPushed) { //Hier soll was passieren wenn der Button gedrückt ist } else { //Hier soll was passieren wenn der Button nicht gedrückt ist }Allerdings hat bei mir lResult immer den Wert 0 und bPushed dann den Wert FALSE. Ich weiß grad echt nicht wo mein Fehler liegt. Er springt immer in die else Anweisung, egal ob der Button gedrückt ist oder nicht.
gruß
-
Dann ist der Button eben nicht unten.
Bist Du sicher das hwnd auch hier das Handle des Buttons ist?
-
naja das Handle des Buttons wird ja im lParam übergeben. Aber auch wenn ich anstatt hWnd lParam einsetze bekomme ich des selbe Ergebnis...
case WM_COMMAND: switch(LOWORD(wParam)) { case 1://ID des Buttons switch(HIWORD(wParam)) { case BN_CLICKED: LRESULT lResult = SendMessage((HWND)lParam, BM_GETSTATE, 0, 0); bool bPushed = (lResult & BST_PUSHED) != 0; if(bPushed) { MessageBox(NULL, L"Pushed", L"MB", MB_OK); SendMessage((HWND)lParam, BM_SETSTATE, 0, 0); } else { MessageBox(NULL, L"Not Pushed", L"MB", MB_OK); SendMessage((HWND)lParam, BM_SETSTATE, 1, 0); } break; } } return 0;Also wenn ich es so habe, dann ist lResult = 520, bPushed = false und er springt in die else Anweisung, gibt "Not Pushed" aus und stellt den Button dann als gedrückt dar. Wenn ich dann wieder auf den (als gedrückt dargestellten) Button klicke macht er das Selbe, obwohl er ja eigentlich ausgeben sollte, dass der Button gedrückt ist und ihn dann auf nicht gedrückt setzen sollte.
Ich schätze ich hab irgend nen fundamentalen Denkfehler drin, komm aber nicht drauf. Danke schon mal für die Hilfe!
Gruß
-
Dein Code ist ein Witz.
BN_CLICKED kommt erst an wenn der Button losgelassen wird!
Logo also, dass immer angezeigt wird "Not pushed"!
-
asooo^^ okay dann is mir alles klar... danke dir 
LG