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。