我想在c ++中使用winapi淡出窗口。我想在不负责任的情况下制作像windows一样的效果。它们变成全灰色和半透明。我正在尝试使用
AnimateWindow(hwnd, 1000, AW_BLEND | AW_HIDE);
但是这会使窗口隐藏因为参数AW_HIDE而我想要淡出例如只有70%。有没有办法使用动画窗口做到这一点,或者我可以用另一种方式做到这一点?
答案 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;
}
我希望这对你有所帮助。