【发布时间】:2021-11-24 22:46:30
【问题描述】:
我有 2 个自绘菜单项,当我启动程序时,我只看到一个自绘菜单项;第一个。它正在被绘制,除了菜单栏被绘制在未在第一个位置绘制的所有其他菜单项上,如果我将鼠标悬停在第二个所有者绘制的菜单项上或以它绘制的任何其他方式更新它,如果我随后与主窗口(ig Resizing)实际上更新了菜单栏,它继续绘制任何其他未在第一个位置绘制的所有者绘制的项目。
问题:如何让菜单栏不在菜单项上绘制,
// 测量项目:
VOID MeasureMenuItem(LPMEASUREITEMSTRUCT ItemStruct)
{
ItemStruct->itemWidth = 50;
ItemStruct->itemHeight = 10;
return;
}
// 绘制项目:
VOID DrawMenuItem(LPDRAWITEMSTRUCT ItemStruct)
{
HDC hDC = ItemStruct->hDC;
SelectObject(hDC, GetStockObject(DC_PEN));
SelectObject(hDC, GetStockObject(DC_BRUSH));
SetBkMode(hDC, TRANSPARENT);
if (ItemStruct->itemState & ODS_HOTLIGHT)
{
SetDCPenColor(hDC, RGB(20, 20, 20));
SetDCBrushColor(hDC, RGB(20, 20, 20));
SetTextColor(hDC, RGB(255, 255, 255));
}
else
{
SetDCPenColor(hDC, RGB(70, 70, 70));
SetDCBrushColor(hDC, RGB(70, 70, 70));
SetTextColor(hDC, RGB(255, 255, 255));
}
Rectangle(hDC, ItemStruct->rcItem.left, ItemStruct->rcItem.top, ItemStruct->rcItem.right, ItemStruct->rcItem.bottom);
DrawText(hDC, (LPCWSTR)ItemStruct->itemData, -1, &ItemStruct->rcItem, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
ReleaseDC(MainWindow, hDC);
return;
}
// 菜单
HMENU Bar = CreateMenu();
HMENU File = CreateMenu();
HMENU Edit = CreateMenu();
AppendMenu(Bar, MF_OWNERDRAW, (UINT_PTR)File, L"File");
AppendMenu(Bar, MF_OWNERDRAW, (UINT_PTR)Edit, L"Edit");
MENUINFO Info;
Info.cbSize = sizeof(Info);
Info.fMask = MIM_BACKGROUND;
Info.hbrBack = (HBRUSH)CreateSolidBrush(RGB(100, 100, 100));
SetMenuInfo(Bar, &Info);
SetMenu(MainWindow, Bar);
【问题讨论】:
标签: c++ winapi menu drawing ownerdrawn