哪位大虾能给个SDK下自画菜单的完整例子啊,MSDN上的不完整啊?

haroldzhh 2006-02-24 04:33:40
MSDN上的例子不完整啊,弄不出来啊
多谢各位啦!!!!!
...全文
181 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
haroldzhh 2006-03-10
  • 打赏
  • 举报
回复
现在问题解决了,就是因为在填写MENUITEMINFO的时候少了一句
mii.cbSize = sizeof(MENUITEMINFO);
我看msdn上也没写嘛,所以就没写,看来不写还是不行啊
多谢各位回帖的同仁了!!!!!!!!
haroldzhh 2006-03-08
  • 打赏
  • 举报
回复
to iswjh(仁者无敌)
我按照你的程序,模仿着写了一个,去掉了菜单项左边的位图操作,可是怎么运行出来会没什么反映呢,还是原来的样子。自画个菜单怎么就这么费尽呢,msdn里面自画的部分我都看了无数遍啦,哎哟,烦啊
我想麻烦你再跟我说一说自画菜单的具体步骤,我看msdn上说的基本上就是填写MENUITEMINFO 结构,SetMenuItemInfo。然后处理两个消息WM_MEASUREITEM,WM_DRAWITEM,一个设长宽,一个开始画
难啊!!!!!!!!!!
haroldzhh 2006-03-08
  • 打赏
  • 举报
回复
希望大家来帮忙啊!!!!!
iswjh 2006-03-07
  • 打赏
  • 举报
回复
int CMainFrame::OnMeasureItem(WPARAM wParam,LPARAM lParam)
{
MEASUREITEMSTRUCT* lpmis=(MEASUREITEMSTRUCT*)lParam;
if(lpmis!=NULL)
{
if(lpmis->CtlType==ODT_MENU)
{
CustMenuItemData* lpmid;
lpmid=(CustMenuItemData*)lpmis->itemData;
if(lpmid->bIsTop)
{
if(lpmid->nPos==2 || lpmid->nPos==4)
lpmis->itemWidth=40;
else
lpmis->itemWidth=60;
lpmis->itemHeight=22;
}
else
{ lpmis->itemWidth=160;

if(lpmis->itemID==0)
lpmis->itemHeight=3;
else
lpmis->itemHeight=22;
}
return TRUE;
}
}
return FALSE;
}
int CMainFrame::OnDrawItem(WPARAM wParam,LPARAM lParam)
{
HBRUSH hbr=NULL,hbrLeft=NULL,hbrSel=NULL,hbrOrg=NULL;
HICON hIcon=NULL;
HFONT hfOrg=NULL;

RECT rc;
DRAWITEMSTRUCT* lpdis=(DRAWITEMSTRUCT*)lParam;
if(lpdis!=NULL)
{
if(lpdis->CtlType==ODT_MENU)
{
//Menu item data
CustMenuItemData* lpmid;
lpmid=(CustMenuItemData*)lpdis->itemData;


//Fill entire menu item
if(lpmid->bIsTop==FALSE)
{
hbr=CreateSolidBrush(RGB(249,248,247));
FillRect(lpdis->hDC,&lpdis->rcItem,hbr);
DeleteObject(hbr);
}
else
{
FillRect(lpdis->hDC,&lpdis->rcItem,GetSysColorBrush(COLOR_BTNFACE));
}
//Fill child menu item left
if(lpmid->bIsTop==FALSE)
{
hbrLeft=CreateSolidBrush(RGB(219,216,209));
CopyRect(&rc,&lpdis->rcItem);
rc.right=rc.left+20;
FillRect(lpdis->hDC,&rc,hbrLeft);

DeleteObject(hbrLeft);
}

//Draw separator
if(lpdis->itemID==0 && lpmid->bIsTop==FALSE)
{
HPEN hpen,hpenOrg;
hpen=CreatePen(PS_SOLID,1,RGB(166,166,166));
hpenOrg=(HPEN)SelectObject(lpdis->hDC,hpen);

MoveToEx(lpdis->hDC,24,lpdis->rcItem.top+1,NULL);
LineTo(lpdis->hDC,lpdis->rcItem.right,lpdis->rcItem.top+1);

SelectObject(lpdis->hDC,hpenOrg);
DeleteObject(hpen);
return TRUE;
}

SetBkMode(lpdis->hDC,TRANSPARENT);
CopyRect(&rc,&lpdis->rcItem);

//Draw child menu left icon
if(lpmid->bIsTop==FALSE)
{
switch(lpdis->itemID)
{
case IDM_COMMON_REG:
{
if(lpdis->itemState & ODS_DISABLED)
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_DISABLED_REGISTER));
else
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_REGISTER));

}
break;
case IDM_COMMON_CHARGE:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_CHARGE));
}
break;
case IDM_COMMON_RETURN:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_RETURN));
}
break;
case IDM_COMMON_CHANGEDRUG:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_CHANGEDRUG));
}
break;
case IDM_QUERY_CHARRF:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_CHARRF));
}
break;
case IDM_QUERY_CHARSTAT:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_CHARSTAT));

}
break;
case IDM_QUERY_INVOICE:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_INVOICE));
}
break;
case IDM_QUERY_DOCWORK:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_DOCTORWORK));
}
break;
case IDM_WINDOW_CLOSEALL:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_CLOSEALL));
}
break;
case IDM_SYSCFG_IME:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_IME));
}
break;
case IDM_SYSCFG_CODE:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_QUERYCODE));
}
break;
case IDM_HELP_ABOUT:
{
hIcon=LoadIcon(app.m_hInstance,MAKEINTRESOURCE(IDI_FRAME));
}
}

if(hIcon!=NULL)
DrawIconEx(lpdis->hDC,lpdis->rcItem.left+2,lpdis->rcItem.top+2,hIcon,16,16,0,NULL,DI_NORMAL);

lpdis->rcItem.left=24;//Reserve for draw icon
}

UINT nTextFlag;
if(lpmid->bIsTop)
{
nTextFlag=DT_CENTER | DT_VCENTER | DT_SINGLELINE;
}
else
{
nTextFlag=DT_LEFT | DT_VCENTER | DT_SINGLELINE;
}
hfOrg=(HFONT)SelectObject(lpdis->hDC,m_hfMenuItem);

if(lpdis->itemState & ODS_DISABLED)
SetTextColor(lpdis->hDC,RGB(219,216,209));

DrawText(lpdis->hDC,lpmid->szText,-1,&lpdis->rcItem,nTextFlag);
SetTextColor(lpdis->hDC,RGB(0,0,0));
SelectObject(lpdis->hDC,hfOrg);

if(lpdis->itemState & ODS_SELECTED && !(lpdis->itemState & ODS_DISABLED))
{
//Draw select item bar
int nROP;
nROP=SetROP2(lpdis->hDC,R2_MASKPEN);

lpdis->rcItem.left=rc.left;
CopyRect(&rc,&lpdis->rcItem);

hbrSel=CreateSolidBrush(RGB(182,189,210));
hbrOrg=(HBRUSH)SelectObject(lpdis->hDC,hbrSel);

Rectangle(lpdis->hDC,rc.left,rc.top,rc.right,rc.bottom);

SelectObject(lpdis->hDC,hbrOrg);
DeleteObject(hbrSel);


SetROP2(lpdis->hDC,nROP);

}
SetBkMode(lpdis->hDC,OPAQUE);
return TRUE;
}
}
return FALSE;
}


这是我写的一段代码,用的是SDK
bohlee 2006-03-07
  • 打赏
  • 举报
回复
我就不多此一举了
haroldzhh 2006-03-03
  • 打赏
  • 举报
回复
我顶啊
haroldzhh 2006-03-02
  • 打赏
  • 举报
回复
楼上的,我的邮箱是marlborozhh@yahoo.com.cn或者marlborozhh@hotmail.com
haroldzhh 2006-03-02
  • 打赏
  • 举报
回复
最好能是xp风格的
chenyulin 2006-03-01
  • 打赏
  • 举报
回复
邮箱
haroldzhh 2006-03-01
  • 打赏
  • 举报
回复
我顶
haroldzhh 2006-02-28
  • 打赏
  • 举报
回复
自己顶
lisypro 2006-02-28
  • 打赏
  • 举报
回复
www.pudn.com
haroldzhh 2006-02-24
  • 打赏
  • 举报
回复
有用c实现的吗,不要c++的啊
wangk 2006-02-24
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=1339
wangk 2006-02-24
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=537
http://www.vckbase.com/document/viewdoc/?id=1583

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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