我主要是设置菜单中某个菜单项的文本颜色! 但是弄啦大半天 还是出错 不懂!!!
运行程序后右键的时候 会报错! 就是出现有“终止 重试 忽略”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));
}
运行程序后右键的时候 会报错! 就是出现有“终止 重试 忽略”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));
}
定义成成员变量或者全局,不要局部变量在试试看
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
}
如果我把这句注释掉 就不报错啦 但是同样没效果!
pSubMenu->ModifyMenu(1,MF_BYPOSITION | MF_OWNERDRAW ,pID);
但为什么用 CMenu menu,*pSubMenu ;类呀,应该是你自己的类吧。
将MF_OWNERDRAW 去掉,程序能正常运行。