簡體   English   中英

禁用Win32 C ++中單個應用程序的按鈕動畫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM