Эффект наведения кнопки Ownerdraw - PullRequest
0 голосов
/ 04 апреля 2019

Я установил кнопку владельца. Я делаю это с помощью Rectangle и используя сообщение WM_DRAWITEM. И по кнопке удалось судить о ВКЛ / ВЫКЛ. Но я хочу добавить эффект наведения как css: hover. Я хочу сменить цвет на несколько секунд. Это трудно. Я искал несколько дней. Но я не могу найти решение. Это мой первый вопрос. Прошу прощения за плохой английский.

Я пытался поймать мышь (x, y). Но я не могу.

case WM_MOUSEMOVE:
x = LOWORD(lp); 
y = HIWORD(lp); 


if(buttonlefttop<= x <= buttonlefttop + buttonwidth && buttontoptop<= y 
<= buttontoptop + buttonheight){
            std::cout<<"[INFO] "<<"ON\n";
}else{
            std::cout<<"[INFO] "<<"OFF\n";
}

case WM_DRAWITEM: hdc = ((LPDRAWITEMSTRUCT) (lp)) -> hDC;

        if (((LPDRAWITEMSTRUCT)(lp))->itemState & ODS_SELECTED) {
            hpen = CreatePen(PS_SOLID, 5, RGB(80, 91, 109));
            hbr = CreateSolidBrush(RGB(80, 91, 109));

            SelectObject(hdc, hpen);
            SelectObject(hdc, hbr);

            std::cout<<"[INFO] ON\n";
        }else {
            hpen = CreatePen(PS_SOLID, 5, RGB(73, 147, 120));
            hbr = CreateSolidBrush(RGB(73, 147, 120));

            SelectObject(hdc, hpen);
            SelectObject(hdc, hbr);

            std::cout<<"[INFO] OFF\n";
        }
        Rectangle(hdc , 0 , 0 ,
         buttonwidth,buttonheight
        );
        DeleteObject(SelectObject(hdc , GetStockObject(WHITE_BRUSH)));
        return TRUE;

Я не могу добавить hovereffect.

1 Ответ

2 голосов
/ 04 апреля 2019

Вы можете использовать Buffered Animation API , доступный с Windows Vista.Это тот же API, который стандартные элементы управления Win32 используют для рисования анимированных эффектов замирания.

API заботится о:

  • создании растрового изображения для первого изображения анимации с замиранием
  • создание растрового изображения для последнего изображения анимации затухания
  • создание таймера для периодического вызова WM_PAINT
  • генерация промежуточных изображений анимации

В основном вам нужно только визуализировать первое и последнее изображения анимации, и API автоматически отображает промежуточные шаги.

В Интернете существует множество примеров использования этого API.На странице API, на которую я ссылался выше, она уже есть.На CodeGuru есть руководство по , в котором есть лучшие объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...