很奇怪的一个问题,实现自绘菜单的过程中,绘制图标使用的是 pImageList->Draw(m_dc,IconIndex,CPoint(m_rect.left+2,m_rect.top+2),
ILD_TRANSPARENT);的方式绘制的,pImageList 是 菜单的一个指针变量,void CCustomMenu::SetMenuImageList(CImageList *pImageList)
{
this->pImageList = pImageList;
}是 CMainFrame 中传递给它值,问题来了,绘制是绘制出来了,但是问题是我有两个菜单需要绘制,一个是标准的主框架的菜单,还有一个是弹出式的菜单,右键单击弹出,但是怎么会图标变成一样的了呢,也就是主框架上的图标和弹出式菜单的图标是一一对应相同的,搞什么鬼,我明明是 m_CustomMenu.SetMenuImageList(&m_MainMenuImage);
m_PopMenu.SetMenuImageList(&m_PopMenuImage);赋了不同的值啊,但是为什么会这样,是不是有一个覆盖掉其中一个了在 CMainFrame::OnDrawItem 中m_PopMenu.DrawItem(lpDrawItemStruct);
m_CustomMenu.DrawItem(lpDrawItemStruct);如果把上面两句话位置改一下,结果正好相反,也就是本来是是标准菜单把弹出菜单覆盖了,换一下上面的语句之后,就变成弹出菜单把标准菜单的图标覆盖了,你说怪不怪,不知道是什么原因,我在怀疑是 CImageList 是不是用了同一个,虽然设置了两个,可能指针的原因只用一个,会不会呢???
ILD_TRANSPARENT);的方式绘制的,pImageList 是 菜单的一个指针变量,void CCustomMenu::SetMenuImageList(CImageList *pImageList)
{
this->pImageList = pImageList;
}是 CMainFrame 中传递给它值,问题来了,绘制是绘制出来了,但是问题是我有两个菜单需要绘制,一个是标准的主框架的菜单,还有一个是弹出式的菜单,右键单击弹出,但是怎么会图标变成一样的了呢,也就是主框架上的图标和弹出式菜单的图标是一一对应相同的,搞什么鬼,我明明是 m_CustomMenu.SetMenuImageList(&m_MainMenuImage);
m_PopMenu.SetMenuImageList(&m_PopMenuImage);赋了不同的值啊,但是为什么会这样,是不是有一个覆盖掉其中一个了在 CMainFrame::OnDrawItem 中m_PopMenu.DrawItem(lpDrawItemStruct);
m_CustomMenu.DrawItem(lpDrawItemStruct);如果把上面两句话位置改一下,结果正好相反,也就是本来是是标准菜单把弹出菜单覆盖了,换一下上面的语句之后,就变成弹出菜单把标准菜单的图标覆盖了,你说怪不怪,不知道是什么原因,我在怀疑是 CImageList 是不是用了同一个,虽然设置了两个,可能指针的原因只用一个,会不会呢???
解决方案 »
- 如何读取ini中的多行数据
- 安装vc6时,出现这个提示,我还能够继续吗?提示我版本冲突,我直接装会有什么后果?
- 关于char指针的问题,多谢
- hook问题,使用过WH_GETMESSAGE的请进
- 请教返回指针的函数问题
- 为什么CListView设了LVS_EDITLABELS,其item仍然不可编辑?
- 各位大虾! 自定义函数问题(菜鸟级)
- 救救我的Windows2000
- 新手小问题 得分容易 谢谢各位
- C++ MFC 用2010以上的版本写TabCrtl控件嵌入的对话框都会飞出来,CRect变量下断看了是错误的数值,对话框显示在窗口左上角
- MFC Class 继承再继承问题?
- 下了一个WinCE上的电子书程序,有一些不明白,请问以下代码是什么意思?
但是 CCustomMenu 有两个变量啊,指向的相应的指针应该不一样才对啊!
设置什么 ID ,两个菜单用不同的图标ID?
m_CustomMenu.DrawItem(lpDrawItemStruct); 这两句对调,效果会相反?
if ( m_PopMenu.GetSafeHMenu() == (HMENU)lpDrawItemStruct.hwndItem )
m_PopMenu.DrawItem(lpDrawItemStruct);
else
m_CustomMenu.DrawItem(lpDrawItemStruct);
其实由于所有控件的自绘消息都在OnDrawItem中处理,应该还要更复杂的判断,因此最好控件自己处理WM_DRAWITEM消息或者重写DrawItem虚函数。