Как воспроизвести цвет нажатия и эффект затенения системной кнопки по умолчаниюC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как воспроизвести цвет нажатия и эффект затенения системной кнопки по умолчанию

Сообщение Anonymous »

Благодаря этому ответу мне удалось настроить такую кнопку:

Изображение

Я мог добиться этого эффекта, обработав сообщение 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»