`
guowee
  • 浏览: 177324 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Windows mobile 菜单(Menu Bar) 更改解决方案

阅读更多

 

Windows Mobile 菜单(Menu Bar,CommandBar)使用更改解决方案

 

本文参考并引用了如下两篇博客内容:

 

http://hi.baidu.com/angelmeng86/blog/item/8af9570820d7e388d1581bd2.html

http://blog.163.com/aiding_001/blog/static/229081920100652445753/

 

搞了很长时间windows mobile的开发了,一直都在使用windows mobile的Menubar,但是一直没有很好的总结一下,今天写篇文章来详细的说一下这方面的东西。

 

如果是在MFC中使用,我通常用

CCommandBar m_dlgCommandBar;

在OnInitDialog函数中初始化一下。IDR_MENU_MY_POSITION就是Resource中创建的MENU了。

 

if (!m_dlgCommandBar.Create(this) ||
        !m_dlgCommandBar.InsertMenuBar(IDR_MENU_MY_POSITION))
    {
        TRACE0("Failed to create CommandBar\n");
        return FALSE;      // fail to create
    }


 

 

当然了,如果不用CCommandBar,也可以是用如下的方式来创建:

 

SHMENUBARINFO* smb=new SHMENUBARINFO();
smb->cbSize = sizeof(SHMENUBARINFO);
smb->hInstRes = ::AfxGetInstanceHandle();
smb->hwndParent = m_hWnd;
smb->nToolBarId =IDR_DAYPLANSTART;
smb->nBmpId = 0;
smb->cBmpImages = 0;
smb->dwFlags = SHCMBF_HMENU|SHCMBF_HIDESIPBUTTON;
SHCreateMenuBar(smb);

 

如果使用此种方式来创建,就可以用如下的方式直接获取MenuBar的句柄。

 

HWND hwndMB=smb->hwndMB;
TBBUTTONINFO tbbi={0};
tbbi.cbSize=sizeof(tbbi);
tbbi.dwMask=TBIF_LPARAM|TBIF_BYINDEX;
::SendMessage(hwndMB,TB_GETBUTTONINFO,0,(LPARAM)&tbbi);
HMENU m_hMenuBar=(HMENU)tbbi.lParam;
 

如果命令栏是使用 MFC 方式创建的,这里的 hwndMB 可以使用 CCommandBar 类型成员变量 m_dlgCommandBar.m_hWnd 代替。

 

这样,我们就可以得到一个 HMENU 。 接下来就可以对HMENU进行操作了。

 

注:

hMenu 必须使用第三点的方法得到,在 MFC 方式生成的对话框类中的 m_dlgCommandBar.GetMenu() 得到的 HMENU 跟第三点里得到的结果是不一致的,我试过操纵 m_dlgCommandBar.GetMenu() 方式得到的 HMENU ,结果是菜单确实是更改了,但是显示没有效果而用第三点的方法得到的 hMenu 是有效果的。

 

对菜单修改:

2 、隐藏菜单

 

HWND hwnd = ::SHFindMenuBar(m_hWnd);

if(hwnd != NULL)

::ShowWindow(hwnd, SW_HIDE);

 

3 、隐藏某个子菜单

 

HMENU hMenu = NULL;

TBBUTTONINFO tbbi = {0};

tbbi.cbSize = sizeof(TBBUTTONINFO);

tbbi.dwMask = TBIF_LPARAM | TBIF_BYINDEX;

::SendMessageW(mbi.hwndMB, TB_GETBUTTONINFO, 1, (LPARAM)&tbbi); // 0为SoftKey1,1为SoftKey2

hMenu = (HMENU)tbbi.lParam;

EnableMenuItem(hMenu, IDM_TEST, MF_GRAYED); // 隐藏子菜单

EnableMenuItem(hMenu, IDM_TEST, MF_ENABLED); // 显示子菜单
 

4 、使某个SoftKey 不 可用

::SHEnableSoftkey(mbi.hwndMB, 0, TRUE, FALSE);

 

5 、动态修改菜单

 

ModifyMenu(hMenu, IDM_TEST, MF_DISABLED | MF_STRING, IDM_TEST, L"修改后的文字");

InsertMenu(hMenu, beforeItem, MF_BYCOMMAND, afterItem, L”新增加的菜单”); // 加入含有欲改写文本的菜单项
DeleteMenu(hMenu, beforeItem, MF_BYCOMMAND); // 删除被改写的菜单
DrawMenuBar(); // 刷新菜单

 

使用菜单句柄对里面的菜单项进行修改。同时也可使用如下方法:

 

TCHAR szDrawText[100];
wcscpy(&szDrawText[0],sChangeText);sChangeText是CString类型,注意长度不要超过 szDrawText定义的长度。
MENUITEMINFO mii;
memset((char *)&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
mii.dwTypeData = &szDrawText[0];
mii.cch = 100;
mii.fType =MFT_STRING;
GetMenuItemInfo(m_hMenuBar, ID_TAKEPHOTO, FALSE, &mii);//获取菜单项信息
SetMenuItemInfo(m_hMenuBar, ID_TAKEPHOTO, FALSE, &mii);//设置菜单项信息

ID_TAKEPHOTO是菜单项的ID

 

6.设置MenuBar的选中状态

 

CheckMenuItem(m_hMenuBar,ID_MENU_MY_POSITION_DISPLAY_MY_POSITION,MF_UNCHECKED);

 

分享到:
评论

相关推荐

    Dynamenu.rar_visual c_windows mobile_windows mobile menu

    本项目"DynamicMenu.rar"显然是一个使用Visual C++创建的Windows Mobile应用,专注于实现动态菜单功能。让我们深入探讨这个主题。 1. **Windows Mobile开发环境**: Windows Mobile是微软为移动设备设计的操作系统...

    Windows Mobile手机全屏解决方案.

    ### Windows Mobile手机全屏解决方案:C#实现 在Windows Mobile平台中,实现应用程序的全屏显示对于提升用户体验、最大化屏幕利用率具有重要意义。本文将详细解析一个C#代码示例,该示例展示了如何通过调用Windows ...

    windows mobile 6.0模拟器使用

    1. 打开 Windows Mobile 6.0 模拟器,并进入设置菜单中。 2. 选择“邮件”选项,并点击“设置”按钮。 3. 在“邮件设置”页面中,选择“ Exchange 服务器”选项。 4. 输入 Exchange 服务器的地址和用户名密码。 5. ...

    Windows Mobile 6.5 for iPAQ 114

    通过以上组件,我们可以看出Windows Mobile 6.5为iPAQ 114提供的不仅是操作系统,而是一套完整的升级解决方案,旨在提升设备性能,增强用户体验,并保持与现代技术的同步。尽管现在Windows Mobile已被新的操作系统如...

    windows mobile开发环境搭建

    ### Windows Mobile 开发环境搭建及应用开发入门 #### 一、开发环境搭建 **1. 开发准备** 在开始Windows Mobile应用开发之前,首先需要准备一套完整的开发环境。以下是搭建Windows Mobile开发环境所需的主要步骤...

    Windows Mobile设备中心(64位)

    Windows Mobile设备中心(64位)是一款专为Windows 7 64位操作系统设计的管理工具,它使得Windows Mobile系列智能手机能够通过USB数据线无缝地与个人电脑进行交互。这款软件提供了多种功能,包括文件同步、共享网络...

    Windows mobile 6.5常用软件

    在Windows Mobile 6.5操作系统中,用户可以找到一系列实用的软件来提升设备的使用体验。这个压缩包包含了几个常见的应用程序,旨在帮助用户更高效地管理和利用他们的Windows Mobile设备。 首先,"任务管理1.exe"和...

    Windows Mobile开发实验

    ### Windows Mobile开发实验知识点 #### 实验一:使用ActiveSync连接Smartphone与PC机 **实验目的** 通过本次实验,学习如何使用ActiveSync在Smartphone与PC之间建立连接。 **预备知识** - 了解Windows Mobile...

    微软Windows Mobile 解决方案(构设计 部署实施)

    ### 微软Windows Mobile 解决方案(构设计 部署实施) #### 一、引言 在数字化转型的大背景下,企业对移动解决方案的需求日益增长。为了满足这一需求,微软推出了Windows Mobile平台,旨在为企业提供一个高效、...

    Windows Mobile 经典源码

    《深入探索Windows Mobile经典源码》 Windows Mobile是一款由微软公司开发的移动操作系统,它曾经在智能手机领域占据重要地位,为开发者提供了丰富的平台来构建移动应用程序。本资料集中的"WindowsMobile5 金典源码...

    windows mobile6.1主题

    Windows Mobile 6.1的主题系统是其个性化设置的关键部分,允许用户自定义设备的外观和感觉,包括背景、图标、菜单样式等。 标题“windows mobile6.1主题”指的是为这个操作系统设计的定制界面方案,可能是由制作者...

    Windows Mobile windows7设备中心下载

    众所周知,在windows7操作系统中已经不需要安装active sync ...清您下载windows mobile center for windows7(vista也是如此)软件,然后将手机与电脑连接即可.亲自操作,该方法适合于任何版本的windows mobile 手机系统.

    仿电脑开始菜单 手机版windows mobile系统 STM5700

    STM5700是一款专为手机版Windows Mobile系统设计的仿电脑开始菜单的应用程序。这款软件致力于在移动设备上提供与传统个人计算机相似的操作体验,使用户能够在手机上更直观、便捷地访问各种功能和应用程序。 在...

    windows mobile 软件my mobile

    《Windows Mobile平台上的My Mobile软件详解》 在移动操作系统的历史中,Windows Mobile曾是一个重要的角色,为许多智能手机提供了操作系统支持。在这个系统上,有一款名为"My Mobile"的应用软件,它为用户提供了...

    Windows mobile5.0仿真器

    Windows Mobile 5.0 仿真器是一款用于开发者和测试人员的工具,它允许用户在桌面计算机上模拟运行 Windows Mobile 5.0 操作系统的设备。这个仿真器对于开发、调试和测试移动应用至关重要,因为它提供了在真实设备上...

    windows mobile 软件开发

    Windows Mobile软件开发主要涉及的是在Microsoft的移动操作系统平台上创建应用程序。Windows Mobile系统类似于小型计算机,具有较高的硬件配置,如CPU速度从180MHz到600MHz,程序内存64MB至128MB,以及ROM内存128MB...

    Windows Mobile编程起步

    ### Windows Mobile编程起步详解 #### 引言 随着科技的发展,移动设备的普及与功能日益增强,Windows Mobile作为微软在移动操作系统领域的代表作,曾一度成为业界关注的焦点。对于开发者而言,掌握Windows Mobile...

    windows mobile滑屏解锁

    滑屏解锁便是其中一种解决方案。 S2U2(Slide to Unlock 2)是一款针对Windows Mobile系统的第三方解锁软件,文件名中的“S2U2_1.18”很可能是指该软件的版本号,即1.18版。S2U2的出现,极大地提升了Windows Mobile...

Global site tag (gtag.js) - Google Analytics