看了很多介绍关于菜单如何绘图的文章,都是在单文档/多文档中实现的,利用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

解决方案 »

  1.   

    在对话框的OnInitDialog()函数里面加上类似如下面的语句,改变菜单项的属性为自画:
             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);
    }