禁用 Win32 C++中单个应用程序的按钮动画
Disable button animation for a single application in Win32 C++
通过此调用
SystemParametersInfo(SPI_SETCLIENTAREAANIMATION, 0, (LPVOID)FALSE, 0);
我在 Win32 C++ 项目(没有 MFC 或其他任何内容)中禁用按钮动画,该项目启用了视觉样式通用控件 6.0.0.0,并通过调用函数正确初始化InitCommonControlsEx
。有没有其他方法可以做到这一点?我问是因为我不想禁用整个系统的动画,而只想禁用我的应用程序。我创建的按钮是自定义绘制的(不是所有者绘制的)。我在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,而不是正常时的颜色A,当鼠标结束时fade_until_you_reach_colorB。
谢谢
编辑:我添加两个 GIF第一个是我想要的(我通过之前调用SystemParametersInfo获得的),第二个是我想避免的动画
我想要什么
我不想要的
可以按如下方式禁用单个窗口和控件的主题:
SetWindowTheme(hbutton, L" ", L" ");
动画应该已经禁用,因为您使用的是自定义绘制。此方法还将禁用鼠标悬停效果。
通常,当您禁用按钮的主题时,新系统上的旧 3D 边框可能看起来很奇怪。您可以将BS_FLAT
添加到按钮的样式中。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- 使用 GLUT 使用键停止动画?
- SDL 操纵杆按钮按下/C++
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- Qt中来自不同功能的按钮引用
- 使用对象数组对 SFML 进行动画处理
- 单击按钮后对QML矩形的颜色设置动画
- 禁用 Win32 C++中单个应用程序的按钮动画
- C++使用MoveWindow()为按钮设置动画
- 停止当前动画时,按下释放按钮向上