设置菜单带bitmap,为什么16X16的图被削成13X13.谢谢

yangchun2005 2005-11-22 01:57:01
如题
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ohfox 2005-12-25
  • 打赏
  • 举报
回复
你用GetSystemMetrics()看一下,菜单前面的位图大小就是13*13的
QuickGo 2005-12-24
  • 打赏
  • 举报
回复
不怎么精妙,但是好歹是实现了
QuickGo 2005-12-24
  • 打赏
  • 举报
回复
还是给段代码吧:
case WM_MEASUREITEM:
pMeasure=(LPMEASUREITEMSTRUCT)lparam;
pMeasure->itemWidth=100;
pMeasure->itemHeight=20;
switch(pMeasure->itemID)
{
case ID_MENU+12:

break;
case ID_MENU+13:

break;
}
break;
case WM_DRAWITEM:
InvalidateRect(hwnd,NULL,false);
pDrawItem=(LPDRAWITEMSTRUCT)lparam;
switch(pDrawItem->itemID)
{
case ID_MENU+12:
HBRUSH hBrush,hOldBrush;
HPEN hPen,hOldPen;

if(pDrawItem->itemAction == ODA_DRAWENTIRE)
{
hPen=CreatePen(PS_SOLID,1,GetSysColor(COLOR_MENU));
hBrush=CreateSolidBrush(GetSysColor(COLOR_MENU));

hOldPen=(HPEN)SelectObject(pDrawItem->hDC,hPen);
hOldBrush=(HBRUSH)SelectObject(pDrawItem->hDC,hBrush);

Rectangle(pDrawItem->hDC,
pDrawItem->rcItem.left-6,pDrawItem->rcItem.top-6,pDrawItem->rcItem.right+60,pDrawItem->rcItem.bottom+6);
DrawIconEx(pDrawItem->hDC,2,2,LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON5)),16,16,0,CreateSolidBrush(GetSysColor(COLOR_BTNFACE)),DI_MASK|DI_IMAGE);
TextOut(pDrawItem->hDC,25,pDrawItem->rcItem.top,"Index",strlen("Index"));

DeleteObject(SelectObject(pDrawItem->hDC,hOldBrush));
DeleteObject(SelectObject(pDrawItem->hDC,hOldPen));
}

if(pDrawItem->itemAction == ODA_SELECT || pDrawItem->itemAction == ODS_HOTLIGHT)
{
HBRUSH hBrush,hOldBrush;
COLORREF OldColor;
HPEN hPen,hOldPen;
SetBkMode(pDrawItem->hDC,TRANSPARENT);
RECT rect=pDrawItem->rcItem;
rect.right=rect.left+20;

if(pDrawItem->itemState & ODS_SELECTED)
{
hBrush=CreateSolidBrush(GetSysColor(COLOR_ACTIVECAPTION));
hPen=CreatePen(PS_SOLID,1,GetSysColor(COLOR_MENU));

hOldBrush=(HBRUSH)SelectObject(pDrawItem->hDC,hBrush);
hOldPen=(HPEN)SelectObject(pDrawItem->hDC,hPen);

Rectangle(pDrawItem->hDC,pDrawItem->rcItem.left,pDrawItem->rcItem.top,
pDrawItem->rcItem.right,pDrawItem->rcItem.bottom);
DrawIconEx(pDrawItem->hDC,2,2,LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON5)),16,16,0,NULL,DI_NORMAL);
OldColor=SetTextColor(pDrawItem->hDC,RGB(255,255,255));
TextOut(pDrawItem->hDC,pDrawItem->rcItem.left+25,
pDrawItem->rcItem.top,"Index",strlen("Index"));

//DrawEdge(pDrawItem->hDC,&rect,EDGE_RAISED,BF_RECT);
rect.left=rect.right;
rect.right+=1;
SetTextColor(pDrawItem->hDC,OldColor);
}
else
{
hBrush=CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
hPen=CreatePen(PS_SOLID,1,GetSysColor(COLOR_MENU));

hOldBrush=(HBRUSH)SelectObject(pDrawItem->hDC,hBrush);
hOldPen=(HPEN)SelectObject(pDrawItem->hDC,hPen);

Rectangle(pDrawItem->hDC,pDrawItem->rcItem.left-30,pDrawItem->rcItem.top,
pDrawItem->rcItem.right,pDrawItem->rcItem.bottom);
DrawIconEx(pDrawItem->hDC,2,2,LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON5)),16,16,0,CreateSolidBrush(GetSysColor(COLOR_BTNFACE)),DI_NORMAL);
TextOut(pDrawItem->hDC,pDrawItem->rcItem.left+25,
pDrawItem->rcItem.top,"Index",strlen("Index"));
rect.left=rect.right;
rect.right+=1;
}
}

break;
}
break;
Snow_Ice11111 2005-11-26
  • 打赏
  • 举报
回复
关注一下。
linsi 2005-11-25
  • 打赏
  • 举报
回复
帮顶一下。。。。
yangchun2005 2005-11-22
  • 打赏
  • 举报
回复
我就是用的api

CBitmap g_b1;
g_b1.LoadBitmap( IDB_BITMAP_SAVE );
...
...
::SetMenuItemBitmaps( pPopup->m_hMenu,IDM_SAVE,MF_BYCOMMAND,(HBITMAP)g_b1,NULL);

不知如何处理MEASURE以及DRAWITEM
QuickGo 2005-11-22
  • 打赏
  • 举报
回复
我的一点个人建议,如果要在菜单上显示图标,还是采用自绘的方式比较合适,只需要处理MEASURE以及DRAWITEM就可以了,也不难实现,不要用现成的一些api,会导致图像失真。
thisisll 2005-11-22
  • 打赏
  • 举报
回复
是不是人家要留点空的地方?
把代码贴出来看看

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧