С этим вызовомОтключить кнопку анимации для одного приложения в 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), а второй является анимацией я хотел бы избежать
Вы можете сделать свою кнопку владельца владельца, а затем нарисовать ее с помощью 'DrawThemeBackgroundEx'. –
@JonathanPotter благодарит за ваш ответ ... Во всяком случае, я бы хотел, чтобы мои кнопки были нарисованы на заказ, это было возможно. Если у вас есть какие-либо пристрастия, не стесняйтесь отвечать обратно :-) – user5752858