求助:我想重绘主菜单,在初始化的时候用ModifyMenu()函数把菜单设成了MF_OWNERDRAW属性,并且在CMainFrame里面添加了WM_MEASUREITEM和WM_DRAWITEM的消息响应来重绘菜单,我设置了断点,但是每次都没执行这两消息响应函数,这是怎么回事?

解决方案 »

  1.   

    新建CMyMenu类,在View.cpp添加变量m_menu。OnInitialUpdate()中添加
    m_menu.LoadMenu(IDR_MAINFRAME);
    m_menu.ChangeMenuItem();    //设置所有选项为MF_OWNERDRAW重载WM_MEASUREITEM,WM_DRAWITEM函数中添加
    m_menu..DrawItem(lpDrawItemStruct);
    m_menu..MeasureItem(lpMeasureItemStruct);
      

  2.   

    http://wenku.baidu.com/view/7d02ddd784254b35eefd3417.html
      

  3.   

    MDI?在哪里添加的ModifyMenu? 是不是菜单变成了文档的菜单?
      

  4.   

    MDI和SDI我都试过,刚开始我放在一个按钮的响应函数里面的,不行,后来我就放在LoadFrame、OnCreate函数里面,还是不行。我用这个函数来设置属性的:
    void CNewMenu::ChangeMenuItem(CMenu* pMenu)
    {
    int itemCount=pMenu->GetMenuItemCount();
    for(int i=0;i<itemCount;i++)
    {
    CString *pText=new CString;
    UINT itemID=pMenu->GetMenuItemID(i);//获取菜单项ID号
    pMenu->GetMenuString(i,*pText,MF_BYPOSITION);//获取菜单文本 //ModifyMenu函数最后一个参数对应DRAWITEMSTRUCT结构里的itemData变量
    pMenu->ModifyMenu(i,MF_OWNERDRAW|MF_BYPOSITION|MF_STRING,itemID,(LPCTSTR)pText);
    if(itemID==-1)//如果是一个弹出式菜单
    {
    ChangeMenuItem(pMenu->GetSubMenu(i));
    }
    }  
    }