VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 751|回复: 4

多文档菜单的自绘问题??????,十分着急。请高手看看

[复制链接]

2

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-4 21:50:01 | 显示全部楼层 |阅读模式
连续问了几次了,一直也没有一个可行的答案。
我想自绘程序的菜单。在自绘的之前,首先要得到当前窗口的菜单的句柄。
然后根据这个句柄,进行自绘属性设置。然后重载OnDrawItem()和OnMeasureItem()两个函数,进行自绘的具体设置。
但是我使用下面两句获得菜单句柄的时候,总是出错。(在CMainFrame类中可以)
但在视图中的OnInitUpdate()函数中使用出错:
CMenu *pMenu=GetMenu();            //能够得到指针
HMENU hMenu=pMenu->GetSafeHmenu();//得到句柄的时候出错???

我的本意是当打开一个新的文档的时候,得到当前菜单然后重载上述两个函数,利用得到的句柄设置自绘属性,但是行不通。
问题:
(1)为什么得到菜单的指针却得不到菜单得句柄。
(2)当打开一个文档后,(点击新建)。不管当前加载的时候什么文档。都能得到当前的菜单,并设置自绘属性。怎么实现???谢谢





回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-5 11:15:01 | 显示全部楼层
void CMainFrame::OnInitMenu(CMenu* pMenu)
{
        CFrameWnd::OnInitMenu(pMenu);
       
        CMenu *pSubMenu;
        UINT nCount,nSubCount,nID;
        nCount=pMenu->GetMenuItemCount();//子菜单的列数
        for(UINT i=0;i<nCount;i++)            
        {
                pSubMenu =pMenu->GetSubMenu(i);
                nSubCount=pSubMenu->GetMenuItemCount();//此列菜单菜单项的个数
                for(UINT j=0;j<nSubCount;j++)
                {
                        nID=pSubMenu->GetMenuItemID(j);                       
                        //将框架菜单所有菜单都添加MF_OWNERDRAW标志
                        pSubMenu->ModifyMenu(j,MF_BYPOSITION|MF_OWNERDRAW,nID);
                }       
        }
}
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-5 11:21:02 | 显示全部楼层
GetSubMenu函数
回复

使用道具 举报

2

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-5 15:42:02 | 显示全部楼层
如果按照上述步骤设置的话,第一次(不打开子窗口的情况下)自绘的是主框架菜单。而打开子窗口后,菜单变化了,此时程序并没有执行DrawItem函数重新自绘一次(显示主菜单的时候已经自绘过一次了)。除非是鼠标在上面移动才能显示出来
回复

使用道具 举报

0

主题

18

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-8-3 09:45:01 | 显示全部楼层
学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表