为未显示的自定义绘制按钮

时间:2016-02-24 12:37:40

标签: c winapi button custom-controls mouseover

我有一个自定义绘制按钮。我启用了视觉样式,然后,因为我不希望这个特定的按钮成为主题,我使用SetWindowTheme(hwndCustomDrawnButton, L" ", L" ");WM_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;

我在uItemStateCDIS_HOT时尝试处理该案例,但它不起作用(我想这是因为我禁用了此控件的主题)。 有没有办法在鼠标悬停时更改此按钮的外观?我的意思是如果我不禁用主题而获得的确切方案,我会在{{1}时继续处理此案例} uItemState中的CDIS_HOT。我试图查看网页,但我发现WM_NOTIFY功能对我来说很难理解。如果这是解决我的问题的有效方法,那么任何人都可以向我提供代码示例或教程,其中有很好的解释这个功能吗?

我在Windows 8.1上使用Visual C ++(没有mfc或其他任何东西)。我的应用程序将在Windows 7上提供。 谢谢!

0 个答案:

没有答案