
Я мог добиться этого эффекта, обработав сообщение WM_NOTIFY и код уведомления NM_CUSTOMDRAW:
Код: Выделить всё
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;
}
Код: Выделить всё
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;
}

С системной кнопкой по умолчанию переходы между состояниями намного более плавные, чем с обычной в моей кнопке, и я не нашел никакой информации о том, как это изменить. Возможно также, что единственный способ — создать кнопку, нарисованную владельцем, с помощью BS_OWNERDRAW?
Итак, мой вопрос: есть ли лучший способ добиться этого? как бы вы улучшили код, чтобы он больше походил на системную кнопку по умолчанию?
Принимаю во внимание
Подробнее здесь: https://stackoverflow.com/questions/798 ... tem-button
Мобильная версия