[英]Disable button animation for a single application in Win32 C++
有了這個電話
SystemParametersInfo(SPI_SETCLIENTAREAANIMATION, 0, (LPVOID)FALSE, 0);
我禁用了啟用了Visual Styles Common Controls 6.0.0.0並通過調用InitCommonControlsEx
函數正確初始化的Win32 C ++項目(沒有MFC或其他工具)中按鈕的動畫。 有替代方法可以做到這一點嗎? 我問是因為我不想禁用整個系統的動畫,而只禁用我的應用程序。 我創建的按鈕是“自定義繪制”(不是“所有者繪制”)。 我在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;
...
所謂“按鈕動畫”,是指例如當您將光標移到按鈕上然后離開它時,按鈕顏色發生的褪色效果:當正常狀態時,我希望它是colorA;當鼠標懸停在上面時,我希望它是colorB。正常時不是colorA,鼠標懸停時是不是fade_until_you_reach_colorB。
謝謝
編輯:我添加了兩個gif圖像,第一個是我想要的(我通過對SystemParametersInfo的先前調用獲得),第二個是我想要避免的動畫
可以如下禁用各個窗口和控件的主題:
SetWindowTheme(hbutton, L" ", L" ");
動畫應該已經被禁用,因為您正在使用自定義繪制。 此方法還將禁用鼠標懸停效果。
通常,當您禁用按鈕的主題時,在較新的系統上,它的舊3D邊框看起來可能很奇怪。 您可以將BS_FLAT
添加到按鈕的樣式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.