3653|4

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE 扩展CMenu遇到的问题,求解 [复制链接]

最近需要用DirectShow设计一个Camera应用程序,为了美化界面想扩展些组件出来,在扩展CMenu时麻烦不断,首先发现在WinCE下GetMenuItemID有Bug,对MF_POPUP类型子菜单其返回值并非文档中介绍的-1,而是菜单句柄。于是自好绕路通过GetSubMenu先判断是否为Pop菜单然后在判断是否为分隔栏或普通菜单。
现在想重载LoadMenu,在加载资源过程中就将其Style设定为MF_OWNERDRAW,然后在重载DrawItem,但是现在发现只要将Style设定为MF_OWNERDRAW,调用TrackPopupMenuEx函数时显示时就出错,而该为MF_STRING就正常,请问问题出在哪儿?下面是我的LoadMenu函数中调用用来修改风格的函数,我是通过AppendMenu一项一项加载菜单项的:
void CSXMenu::ChangeMenuStyle(CMenu *pMenu,HMENU hMenu)
{       

        if(pMenu == NULL)
                return;

        UINT nItemID = 0;
        CMenu *pTempMenu = NULL;
        int nCount = (int)pMenu->GetMenuItemCount();
        for(int i = 0; i < nCount; i++)
        {
                MENUITEMINFO menuInfo;
                menuInfo.cbSize = sizeof(MENUITEMINFO);       

                //Because the bug of GetMenuItemID,have to use GetSubMenu
                pTempMenu = pMenu->GetSubMenu(i);                       
                if(pTempMenu == NULL)
                {
                        //No Pop Menu,So It's a Normal Menu or Separator
                        nItemID = pMenu->GetMenuItemID(i);
                        if(nItemID == 0)
                        {
                                //Separator Item
                                CMenuItem *pMenuItem = new CMenuItem;
                                ::AppendMenu(hMenu,MF_SEPARATOR,0,(LPCTSTR)pMenuItem);
                               
                                //::ModifyMenu(hMenu,i,MF_BYPOSITION | MF_OWNERDRAW,-1,(LPCTSTR)pMenuItem);

#if 0
                                menuInfo.fMask = MIIM_TYPE;
                                pMenu->GetMenuItemInfo(i,&menuInfo,TRUE);                               
                                menuInfo.fType = MFT_OWNERDRAW;
                                menuInfo.dwItemData = *test;
                                pMenu->SetMenuItemInfo(i,&menuInfo,TRUE);
#endif
                        }
                        else
                        {
                                //Normal Menu Item
                                CString strMenuText;
                                CMenuItem *pMenuItem = new CMenuItem;
                                pMenu->GetMenuString(i,strMenuText,MF_BYPOSITION);
                                //pMenuItem->SetString((LPCTSTR)strMenuText);
                                UINT nState = pMenu->GetMenuState(i,MF_BYPOSITION);
                                //::AppendMenu(hMenu,MF_STRING,nItemID,strMenuText);
                                 
                                //ModifyMenuEx(i,MF_BYPOSITION,nItemID);
#if 0
                                menuInfo.fMask = MIIM_TYPE;
                                pMenu->GetMenuItemInfo(i,&menuInfo,TRUE);
                                menuInfo.fType = MFT_OWNERDRAW;
                                menuInfo.fType &= ~MF_STRING;
                                menuInfo.dwItemData = *test;
                                pMenu->SetMenuItemInfo(i,&menuInfo,TRUE);
#endif
                        }

                }
                else
                {
                        //Pop Menu
                        //Create Popup Menu
                        HMENU hSubMenu = ::CreatePopupMenu();
                        CString strMenuText;
                        CMenuItem *pMenuItem = new CMenuItem;
                        pMenu->GetMenuString(i,strMenuText,MF_BYPOSITION);
                        //::InsertMenu(hMenu,i,MF_BYPOSITION | MF_POPUP | MF_STRING,(UINT)hSubMenu,strMenuText);
                        //::ModifyMenu(hMenu,i,MF_BYPOSITION | MF_OWNERDRAW| MF_POPUP ,(UINT)hSubMenu,(LPCTSTR)pMenuItem);
                        UINT nState = pMenu->GetMenuState(i,MF_BYPOSITION);
                        //::AppendMenu(hMenu,MF_POPUP | MF_STRING,(UINT)hSubMenu,strMenuText);
                        menuInfo.fMask = MIIM_TYPE;
                        menuInfo.fType = MFT_OWNERDRAW|MFT_STRING|MF_POPUP;
                        InsertMenuItem(hMenu,i,TRUE,&menuInfo);

#if 0
                        menuInfo.fMask = MIIM_TYPE;
                        pMenu->GetMenuItemInfo(i,&menuInfo,TRUE);
                        menuInfo.fType = MFT_OWNERDRAW;
                        //menuInfo.dwItemData = *test;
                        pMenu->SetMenuItemInfo(i,&menuInfo,TRUE);
#endif
                        ChangeMenuStyle(pTempMenu,hSubMenu);
                }                       
        }
}
此帖出自WindowsCE论坛

最新回复

菜单可以自绘,但是很痛苦,比Windows下功能弱多了   详情 回复 发表于 2008-9-24 11:54
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
一元一套大型商业源码(java pb .net delphi vb vc)

  全部精品源码共200多套,解压后20G多
   源码名称        源码数量(套)      大小(RAR)        解压后大小
   pb-精品源码        42               1.5 G             6.5 G
   delphi-精品源码    87               1.4 G             4.1 G
   vb-精品源码        26               1.2 G             3.3 G
   vc-精品源码        32               1.2G              3.2 G
   .net-精品源码      20               620Mb             1.8 G
   java-精品源码      14               253 Mb            600 Mb
   
   源码截图:http://www.hur.cn/okcode.html
   购买价格:购买一个分类精品源码价格100元(比如申请全部pb-精品源码100元),全部购买200元,您也可以先购买其中一个分类,以后再购买其他的源码补足差价就可以了。购买精品源码需要邮寄光盘,加收30元光盘成本及特快专递费用
   
联系方式:qq 564868093(请注明“源码”)

常见问题解答

      1.如果申请光盘,多久可以收到光盘?
            答:本人邮寄光盘一律通过特快专递,一般3~4天可收到光盘。

      
      2.精品源码全部能编译运行吗?有试用版本吗?
            答:这些商业源码一般都是从别人公司流传出来的,他们公司有不少客户在使用,一般不会有太大问题,即使有也是小问题,大家都是做开发的,自己做一下二次开发调试一下就可以了,这么多套商业源码,价格这么低,的确比较实惠,即使是购买用来学习和参考,也很划算的。这些源码从别处收集来什么样就是什么样,本人没有必要去删减或修改其中的内容。由于源码数量多,全部精品源码共200多套精品源码,解压后20G多,本人没有精力一个一个调试,也没法逐个提供试用版本,但全部精品源码均包含源代码和数据库,大部分有相关开发文档。


      3.精品源码是否存在版权问题?
            答:所有精品源码均来自网络,本人提供的仅供个人学习和研究使用,源码请不要用于商业用途,源码版权归创作单位和创作个人所有,如果需要商业用途,请联系版权公司购买正版软件,用户购买精品源码后如有违犯应对自己的行为承担全部法律责任。
                  

      4.我不懂编程,你们源码可直接下载就使用吗?
            答:如果你完全不懂编程,建议你不要申请精品源码,本人提供的都是源代码,不是软件程序和软件安装包。

      5.有些源码为什么我用高版本打开不能通过编译?
            答:比较大的源码系统如几十兆、几百兆的源代码,建议不要使用高版本打开低版本,大系统由于代码较大、模块较多,往往在升级源码过程中会出现问题。



此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
evc下到底能不能对菜单进行自绘阿,我也卡在这个问题上了。
网上都没找到相关信息,谁帮帮忙阿!!
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 lucas2 的回复:
evc下到底能不能对菜单进行自绘阿,我也卡在这个问题上了。
网上都没找到相关信息,谁帮帮忙阿!!


当然可以,你可以去我的BLOG看看(BLOG中没有自绘的方法,呵呵...)
CE的开始菜单都可以自绘,更不要说其它菜单了。
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

5
 
菜单可以自绘,但是很痛苦,比Windows下功能弱多了
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表