MSDN上的例子不完整啊,弄不出来啊
多谢各位啦!!!!!

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=537
    http://www.vckbase.com/document/viewdoc/?id=1583
      

  2.   

    http://www.vckbase.com/document/viewdoc/?id=1339
      

  3.   

    楼上的,.cn或者[email protected]
      

  4.   

    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
      

  5.   

    to iswjh(仁者无敌) 
       我按照你的程序,模仿着写了一个,去掉了菜单项左边的位图操作,可是怎么运行出来会没什么反映呢,还是原来的样子。自画个菜单怎么就这么费尽呢,msdn里面自画的部分我都看了无数遍啦,哎哟,烦啊
       我想麻烦你再跟我说一说自画菜单的具体步骤,我看msdn上说的基本上就是填写MENUITEMINFO 结构,SetMenuItemInfo。然后处理两个消息WM_MEASUREITEM,WM_DRAWITEM,一个设长宽,一个开始画
       难啊!!!!!!!!!!
      

  6.   

    现在问题解决了,就是因为在填写MENUITEMINFO的时候少了一句
    mii.cbSize = sizeof(MENUITEMINFO);
    我看msdn上也没写嘛,所以就没写,看来不写还是不行啊
    多谢各位回帖的同仁了!!!!!!!!