我主要是设置菜单中某个菜单项的文本颜色! 但是弄啦大半天 还是出错 不懂!!!  
运行程序后右键的时候 会报错! 就是出现有“终止 重试 忽略”3中按钮的那种类型错误对话框!
基于MFC对话框的程序 右键弹出菜单代码如下
       
  CMenu menu,*pSubMenu ;
menu.LoadMenu(IDR_MENU2);
pSubMenu = menu.GetSubMenu(0);
CPoint mouse;
GetCursorPos(&mouse);
UINT pID=pSubMenu->GetMenuItemID(1);
pSubMenu->ModifyMenu(1,MF_BYPOSITION | MF_OWNERDRAW  ,pID); 
::TrackPopupMenu(pSubMenu->m_hMenu, 0, mouse.x, mouse.y, 0,
m_hWnd, NULL);
在OnDrawItem函数中代码如下
   if(nIDCtl==0 )
{
    CDC*   pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
    pDC->SetBkMode(TRANSPARENT); 
    pDC->SetTextColor(RGB(255,0,0));
}  

解决方案 »

  1.   

    CMenu menu,*pSubMenu ;
    定义成成员变量或者全局,不要局部变量在试试看
      

  2.   

    我点重试 再点取消 自动跳转到下面
    void AFXAPI AfxAssertValidObject(const CObject* pOb,
    LPCSTR lpszFileName, int nLine)
    {
    if (pOb == NULL)
    {
    TRACE0("ASSERT_VALID fails with NULL pointer.\n");
    if (AfxAssertFailedLine(lpszFileName, nLine))
    指向这里 AfxDebugBreak();
    return;     // quick escape
    }
      

  3.   

    这个是出错后报错的代码,并不是你的代码中实际出错的那个位置,报错的那个对话框应该有说是在哪个文件的哪一行?比如wincore.cpp line:***
      

  4.   

    LoadMenu,GetSubMenu返回值最好检查一下 。
      

  5.   

    不会哦! 
    如果我把这句注释掉 就不报错啦 但是同样没效果!
    pSubMenu->ModifyMenu(1,MF_BYPOSITION | MF_OWNERDRAW  ,pID); 
      

  6.   

    你是自绘的Menu,
    但为什么用  CMenu menu,*pSubMenu ;类呀,应该是你自己的类吧。
    将MF_OWNERDRAW  去掉,程序能正常运行。