
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;
}

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
Mobile version