Winapi和半个淡出窗口

时间:2014-01-03 12:21:40

标签: c++ winapi

我想在c ++中使用winapi淡出窗口。我想在不负责任的情况下制作像windows一样的效果。它们变成全灰色和半透明。我正在尝试使用

AnimateWindow(hwnd, 1000, AW_BLEND | AW_HIDE);

但是这会使窗口隐藏因为参数AW_HIDE而我想要淡出例如只有70%。有没有办法使用动画窗口做到这一点,或者我可以用另一种方式做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以查看UpdateLayeredWindow

答案 1 :(得分:0)

WM_LBUTTONUP事件发生时,此代码会更改窗口的不透明度。 如果要为“淡出”效果设置动画,使用计时器可能是一种有效的方法。 在WM_TIMER处理程序中,更改alpha_value,它是::SetLayeredWindowAttributes()的第三个参数。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    LONG extend_style;
    BYTE alpha_value;

    switch (message)
    {
    case WM_COMMAND:
        ...
        break;
    case WM_LBUTTONUP:

        extend_style = ::GetWindowLong(hWnd, GWL_EXSTYLE );
        ::SetWindowLong(hWnd, GWL_EXSTYLE, extend_style | WS_EX_LAYERED );

        //0 ~ 255(Transparent Range, 0 is completely transparent)       
        alpha_value = 100; 

        ::SetLayeredWindowAttributes(hWnd, 0, alpha_value, LWA_ALPHA);

        break;
    case WM_PAINT:
         ...
         break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

我希望这对你有所帮助。