Aussehen eines Buttons bei Focuserhalt ändern
-
Hallo.
Ich beschäftige mich derzeit mit Buttons. Bei der Suche im Forum hab ich zwei Threads über das Einfärben gefunden.
Allerdings möchte ich den Button nur einfärben, wenn er den Focus erhalten hat, da er sich etwas abheben sollte. Ansonsten soll der ganz normal aussehen. Es würde auch reichen wenn der gestrichelte Rahmen bei Focuserhalt sich vom Rest etwas abheben könnte (z.B. auch farbig wäre). Allerdings weiß ich nicht wie man das bewerkstelligt.
Ich habe schon eine Klasse von CButton abgeleitet und die DrawItem überschrieben. Allerdings hab ich es dort nur geschafft die Textfarbe zu ändern. Ich denke aber schon das dort anzusetzen ist. Weiß da jemand drüber Bescheid?
-
Hier mal mein Owner Drawn Button - so weit ich ihn gemacht habe:
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC dc; dc.Attach(lpDrawItemStruct->hDC); //Device Context zuweisen CRect rect; rect = lpDrawItemStruct->rcItem; //Rechteck des Buttons dc.FillSolidRect(rect, GetSysColor(COLOR_BTNFACE)); //Gefülltes Rechteck in den Button zeichnen UINT state = lpDrawItemStruct->itemState; //Get state of the button dc.SetTextColor(RGB(0,0,0)); // Set the color of the caption to be yellow CString strTemp; GetWindowText(strTemp); // Get the caption which have been set dc.DrawText(strTemp,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); // Draw out the caption if ( (state & ODS_SELECTED) ) // If it is pressed { dc.DrawEdge(rect,EDGE_SUNKEN,BF_RECT); // Draw a sunken face } else { dc.DrawEdge(rect,EDGE_RAISED,BF_RECT); // Draw a raised face } if ( (state & ODS_FOCUS ) ) // If the button is focused { // Draw a focus rect which indicates the user // that the button is focused dc.SelectStockObject(HOLLOW_BRUSH); dc.DrawEdge(rect,EDGE_RAISED,BF_RECT); dc.Rectangle(rect); int iChange = 4; rect.top += iChange; rect.left += iChange; rect.right -= iChange; rect.bottom -= iChange-1; dc.DrawFocusRect(rect); } dc.Detach(); }
bis auf die Tatsache das er nicht als StandartButton genommen werden kann reagiert er wie ein normaler button (also reagiert nicht auf Return).
Wenn du das etwas änderst dürfte es das sein was du haben willst
EDIT: mh damn, is wohl die alte version, er wird beim anklicken halt nicht "reingedrückt", hab die version die das konnte wohl gelöscht
-
Hmmm, mein Problem ist aber genau die Reaktion auf <Return>. Das Programm soll eine Maschine steuern wo der Anwender nur mit Enter weiterdrücken muss. Maus soll nur im "Notfall" verwendet werden.
-
dann bringts dir nix DrawItem zu überschreiben, in dem moment verliert der Button die eigenschaft eine Standart Buttons
schau mal bei CodeGuru oder CodeProject irgendwo hab ich mal was gesehen wie man Owner Drawn Buttons auch mit Enter erreichen kann. War mir damals aber zu kompliziert/als das ich lust gehabt hätte mir das anzuschaun
vielleicht haben die das hier sogar schon gelöst:
http://www.codeguru.com/Cpp/controls/buttonctrl/article.php/c5169
-
Taelan schrieb:
dann bringts dir nix DrawItem zu überschreiben, in dem moment verliert der Button die eigenschaft eine stan**** Buttons
schau mal bei CodeGuru oder CodeProject irgendwo hab ich mal was gesehen wie man Owner Drawn Buttons auch mit Enter erreichen kann. War mir damals aber zu kompliziert/als das ich lust gehabt hätte mir das anzuschaun
vielleicht haben die das hier sogar schon gelöst:
http://www.codeguru.com/Cpp/controls/buttonctrl/article.php/c5169Das Projekt hinter Deinem Link kenne ich bereits, es kann aber leider auch nicht mit Enter umgehen. Im übrigen gibts da noch eins mit der gleichen Funktionalität. Ich hab auch nochmal gegoogelt aber nix gefunden. Werde wohl damit leben müssen.