So reproduzieren Sie die gedrückte Farbe und den Schattierungseffekt einer StandardsystemtasteC++

Programme in C++. Entwicklerforum
Anonymous
 So reproduzieren Sie die gedrückte Farbe und den Schattierungseffekt einer Standardsystemtaste

Post by Anonymous »

Dank dieser Antwort konnte ich es schaffen, eine Schaltfläche wie diese anzupassen:

Image

Ich konnte diesen Effekt erzielen, indem ich die WM_NOTIFY-Nachricht und den Benachrichtigungscode NM_CUSTOMDRAW verarbeitete:

Code: Select all

LRESULT HandleWindowNotify_prog(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

LPNMHDR item = (LPNMHDR)lParam;
LRESULT result = 0;

if (item->idFrom == ID_CONNECTBTN || item->idFrom == ID_UPDATEBTN || item->idFrom == ID_BROWSEFILEBTN){
if (item->code == NM_CUSTOMDRAW) result = HandlingCustomDraw(item);
}

if (item->code == BCN_DROPDOWN) {
LoadLanguageMenu(hwnd);
}

return result;
}

Code: Select all

int HandlingCustomDraw(LPNMHDR button_item) {

if (button_item->idFrom == ID_CONNECTBTN) {

if (item->uItemState & CDIS_HOT) {
if (item->uItemState & CDIS_SELECTED) {
ChangeBkColorButtons(item, Unchek_brush);
return CDRF_DODEFAULT;
}
ChangeBkColorButtons(item, Hot_brush);
return CDRF_DODEFAULT;
}
else if ((item->uItemState & CDIS_DISABLED)) {
if (process_state >= STATE_3_DEVICE_CONNECTED) {
ChangeBkColorButtons(item, Unchek_brush);
return CDRF_DODEFAULT;
}
else {
return CDRF_DODEFAULT;
}
}

ChangeBkColorButtons(item, Check_brush);
return CDRF_DODEFAULT;

}
Abhängig vom Status der Schaltfläche wende ich einen Farbverlauf an oder nicht, und wenn ich mir trotzdem ansehe, wie eine Standard-Systemschaltfläche funktioniert, denke ich, dass es Raum für Verbesserungen gibt.

Image
Mit der Standard-Systemschaltfläche sind die Übergänge zwischen den Zuständen viel sanfter als die in meiner Schaltfläche und ich habe keine Informationen darüber gefunden, wie ich das ändern kann. Es könnte auch sein, dass die einzige Möglichkeit darin besteht, mit BS_OWNERDRAW eine vom Besitzer gezeichnete Schaltfläche zu erstellen?
Meine Frage lautet also: Gibt es einen besseren Weg, dies zu erreichen? Wie würden Sie den Code verbessern, damit er eher der Standard-Systemschaltfläche ähnelt?
Regard

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post