2016-01-17 1 views
0

С этим вызовомОтключить кнопку анимации для одного приложения в Win32 C++

SystemParametersInfo(SPI_SETCLIENTAREAANIMATION, 0, (LPVOID)FALSE, 0); 

отключить анимацию кнопок в моем проекте Win32 C++ (не MFC или что-нибудь еще), который имеет Visual Styles Common Controls 6.0.0.0 включен и правильно инициализирован вызовом функции InitCommonControlsEx. Есть ли альтернативный метод для этого? Я спрашиваю, потому что я не хочу отключать анимацию для всей системы, но ТОЛЬКО для моего приложения. Кнопки, которые я создаю, это Custom Drawn (не для владельца). создать кнопку, как это в WM_CREATE сообщения (hwndbutton определяется до статического, так что я могу поделиться между всеми сообщениями WM):

hwndbutton = CreateWindowEx(0, L"BUTTON", L"example", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, x, y, width, height, hwnd, (HMENU)button_id, GetModuleHandle(NULL), NULL); 

и рисую его

... 
case WM_NOTIFY: 
{ 
    LPNMHDR item = (LPNMHDR)lParam; 
    if (item->idFrom == button_id && item->code == NM_CUSTOMDRAW) 
     { 
      LPNMCUSTOMDRAW item_draw = (LPNMCUSTOMDRAW)item; 
      if (item_draw->uItemState & CDIS_HOT) 
      { 
       SetDCBrushColor(item_draw->hdc, RGB(180, 180, 180)); 
       SelectObject(item_draw->hdc, GetStockObject(DC_BRUSH)); 
      } 
      else 
      { 
       SetDCBrushColor(item_draw->hdc, RGB(255, 255, 255)); 
       SelectObject(item_draw->hdc, GetStockObject(DC_BRUSH)); 
      } 
      SetDCPenColor(item_draw->hdc, RGB(0, 0, 0)); 
      SelectObject(item_draw->hdc, GetStockObject(DC_PEN)); 
      RoundRect(item_draw->hdc, item_draw->rc.left, item_draw->rc.top, item_draw->rc.right, item_draw->rc.bottom, 0, 0); 
      return CDRF_DODEFAULT; // Return would be CDRF_SKIPDEFAULT but I want to keep the text "example" drawn 
} 
break; 
... 

К " кнопочная анимация ", я имею в виду, например, эффект затухания, который имеет место в цвете кнопки, когда вы перемещаете курсор над кнопкой, а затем оставляете его: я бы хотел, чтобы он был цветным, когда нормальное состояние или цвет B, когда мышь закончилась, а не цвет. когда normal и fade_until_you_reach_colorB, когда мышь закончилась.

Благодаря

EDIT: добавить два гифы Первое, что я хочу (и я получаю с предыдущим вызовом SystemParametersInfo), а второй является анимацией я хотел бы избежать

What I want

What I DON'T want

+0

Вы можете сделать свою кнопку владельца владельца, а затем нарисовать ее с помощью 'DrawThemeBackgroundEx'. –

+0

@JonathanPotter благодарит за ваш ответ ... Во всяком случае, я бы хотел, чтобы мои кнопки были нарисованы на заказ, это было возможно. Если у вас есть какие-либо пристрастия, не стесняйтесь отвечать обратно :-) – user5752858

ответ

1

тема для отдельных окон и элементов управления можно отключить следующим образом:

SetWindowTheme(hbutton, L" ", L" "); 

Анимация должна быть отключена, так как вы используете пользовательскую ничью. Этот метод также отключит эффект наведения мыши.

Обычно, когда вы отключите тему кнопки, она может выглядеть странно со старыми трехмерными границами на более новых системах. Вы можете добавить BS_FLAT в стиль кнопки.

+0

Я попробовал функцию, которую вы предоставили, и я также пробовал стиль «BS_FLAT», но я не мог достичь того, что имел в виду. Для примера приложения, кнопками которого я имею в виду, взгляните на Piriform CCleaner: когда кнопка в норме, цвет темно-синий; когда вы проходите и опускаете над ним курсор, он становится светлее на долю секунды, а затем возвращается к цвету, который у него был раньше. Я бы хотел такую ​​кнопку. – user5752858

+0

Я не могу установить другое приложение, чтобы понять, что вы имеете в виду. Я смущен, раньше вы сказали, что хотите отключить анимацию кнопки, теперь кажется, что вы хотите, чтобы пользовательская кнопка рисования исчезла и исчезла при наведении мыши. Вы хотите добавить анимацию? Насколько я знаю, для добавления такой анимации вы должны использовать свой собственный таймер и функции рисования. –

+0

Пожалуйста, смотрите оригинальный вопрос. Я, наконец, добавил два gifs того, что я хотел бы иметь, и чего я НЕ хочу иметь. – user5752858

Смежные вопросы