C 启用";鼠标悬停事件“;用于非主题自定义绘制按钮
我有一个定制的按钮。我启用了视觉样式,然后,仅仅因为我不想让这个特定的按钮成为主题,我使用了C 启用";鼠标悬停事件“;用于非主题自定义绘制按钮,c,winapi,button,custom-controls,mouseover,C,Winapi,Button,Custom Controls,Mouseover,我有一个定制的按钮。我启用了视觉样式,然后,仅仅因为我不想让这个特定的按钮成为主题,我使用了SetWindowTheme(hwndCustomDrawnButton,L“”,L“”)在WM\u CREATE消息中创建主题后立即禁用主题。按钮图形的代码如下所示: case WM_NOTIFY: { LPNMHDR item = (LPNMHDR)lParam; if (item->idFrom == 13 && item->code == NM_CUST
SetWindowTheme(hwndCustomDrawnButton,L“”,L“”)
在WM\u CREATE
消息中创建主题后立即禁用主题。按钮图形的代码如下所示:
case WM_NOTIFY:
{
LPNMHDR item = (LPNMHDR)lParam;
if (item->idFrom == 13 && item->code == NM_CUSTOMDRAW)
{
LPNMCUSTOMDRAW item_draw = (LPNMCUSTOMDRAW)item;
if (item_draw->uItemState & CDIS_SELECTED)
{
SetDCBrushColor(item_draw->hdc, RGB(91, 173, 236));
SelectObject(item_draw->hdc, GetStockObject(DC_BRUSH));
SetDCPenColor(item_draw->hdc, RGB(91, 173, 236));
SelectObject(item_draw->hdc, GetStockObject(DC_PEN));
}
else
{
SetDCBrushColor(item_draw->hdc, RGB(0, 125, 195));
SelectObject(item_draw->hdc, GetStockObject(DC_BRUSH));
SetDCPenColor(item_draw->hdc, RGB(0, 125, 195));
SelectObject(item_draw->hdc, GetStockObject(DC_PEN));
}
// Here I draw rectangle and text...
return CDRF_SKIPDEFAULT;
}
}
break;
当uItemState
为CDIS\u HOT
时,我尝试处理该情况,但它不起作用(我想这是因为我禁用了此控件的主题)当鼠标在按钮上时,有没有办法改变按钮的外观?我指的是当WM\u NOTIFY
中的uItemState
为CDIS\u HOT
时,如果我不禁用主题,我会得到的确切场景。我试着浏览网页,结果发现TrackMouseEvent的函数对我来说很难理解。如果这是一个有效的方法来解决我的问题,请任何人都能给我提供一个代码示例或教程,其中详细解释了这个函数
我在Windows8.1上的VisualStudio中使用纯C(没有mfc或其他任何东西)。我的应用程序将从上的Windows 7可用。
谢谢 如果这篇CP文章有帮助,试试看。谢谢!我读过这篇文章,但它在WindowProc中实现了我的按钮没有的功能,我的主窗口只有一个,它是按钮本身的父窗口。你可以对按钮过程进行子类化。请参见,您可以为任何窗口(例如按钮)请求鼠标悬停通知。这是一个简单的问题,填写一个并调用。子类化按钮并创建一个TrackMouseeEvent结构查看教程解决了这个问题。我将打开另一个主题,因为我遇到的一般问题根本没有解决。感谢@Frankie_C。