看了很多介绍关于菜单如何绘图的文章,都是在单文档/多文档中实现的,利用Frame的Drawitem函数传进菜单的CDC然后绘制菜单,不知在对话框里如何实现,好像Drawitem没反应,请各位大侠帮忙解决,谢谢!
------------------------------------
支持CSDN's forum Explorer
《CSDN论坛新助手 CSDN's forum Explorer》
1、更快速的浏览
2、更方便地保存
3、更快捷的收/发短信
下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe
------------------------------------ 《CSDN论坛新助手 CSDN's forum Explorer》
1、更快速的浏览
2、更方便地保存
3、更快捷的收/发短信
下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe
------------------------------------
支持CSDN's forum Explorer
《CSDN论坛新助手 CSDN's forum Explorer》
1、更快速的浏览
2、更方便地保存
3、更快捷的收/发短信
下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe
------------------------------------ 《CSDN论坛新助手 CSDN's forum Explorer》
1、更快速的浏览
2、更方便地保存
3、更快捷的收/发短信
下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe
解决方案 »
- VC 粘贴板中图文数据的提取 能解决问题者 80%分,顶贴者 分享20%
- VC2005调试窗口没有Release
- 请问C++里的用CInternetSession 模拟HTTP发送请求后, 如何获得服务器在浏览器里响应的URL串啊?
- 高手帮忙!~~简单问题
- 谁知道 MSN Messenger 选择头像时,打开了图片预览窗口,但那些图片放在哪里?
- 请教一个VC编程问题,对于一个对话框中的多个子窗口,通过<Tab>键可以使各子窗口获得输入焦点,但如何可以查知或重设子窗口得到焦点的顺序..
- CTypedPtrArray的使用问题
- 给掩解释个名词---》“脱壳”
- IP Address ctr的使用:判断输入的子网掩码是否合法
- 请问如何用CAsyncSocket::GetSockOpt把socket设置成非阻塞方式??急急急急
- 菜鸟提问:如导出DLL中的MFC的派生类?
- 请高手帮忙啊!在线等
HMENU hMenu;
UINT nID; hMenu = GetMenu()->m_hMenu;
hMenu = GetSubMenu(hMenu,0);
nID = GetMenuItemID(hMenu,0);
ModifyMenu(hMenu,0,MF_BYPOSITION | MF_OWNERDRAW,nID,NULL); nID = GetMenuItemID(hMenu,1);
ModifyMenu(hMenu,1,MF_BYPOSITION | MF_OWNERDRAW,nID,NULL);用类向导为对话框添加对WM_MEASUERITEM和WM_DRAWITEM消息的响应函数。
对话框的OnMeasureItem()函数里面加上类似下面的语句,用于指定菜单项的高度和宽度:
lpMeasureItemStruct->itemHeight = GetSystemMetrics(SM_CYICON) + 5; lpMeasureItemStruct->itemWidth = 80;对话框的OnDrawItem()函数里面加上自画的代码就行了。下面的代码供你参考:
void CDrawMenuDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
HDC hdc;
HICON hIcon;
HBRUSH hBrush;
RECT rect;
TCHAR szText[MAX_PATH]; hdc = lpDrawItemStruct->hDC;
rect = lpDrawItemStruct->rcItem;
switch (lpDrawItemStruct->itemID)
{
case IDM_FILE_NEW:
hIcon = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_FILE_NEW));
wsprintf(szText,TEXT("新建"));
break;
case IDM_FILE_EXIT:
hIcon = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_FILE_EXIT));
wsprintf(szText,TEXT("退出"));
break;
} switch (lpDrawItemStruct->itemAction)
{
case ODA_DRAWENTIRE:
hBrush = CreateSolidBrush(GetSysColor(COLOR_MENU)); break;
case ODA_FOCUS :
case ODA_SELECT :
if (lpDrawItemStruct->itemState & ODS_SELECTED )
{
SetTextColor(hdc,RGB(255,255,255));
hBrush = CreateSolidBrush(GetSysColor(COLOR_ACTIVECAPTION));
}
else
hBrush = CreateSolidBrush(GetSysColor(COLOR_MENU));
break;
}
SelectObject(hdc,hBrush);
SelectObject(hdc,GetStockObject(NULL_PEN));
SetBkMode(hdc,TRANSPARENT); Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
DeleteObject(SelectObject(hdc,GetStockObject(GRAY_BRUSH))); DrawIcon(hdc,rect.left + 2,rect.top + 2,hIcon);
rect.left += GetSystemMetrics(SM_CXICON) + 8;
DrawText(hdc,szText,-1,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}