【转】windows mobile 5.0 下创建/隐藏菜单

本文介绍了如何在开发过程中创建、显示、隐藏菜单栏及其子菜单项的方法。通过使用SHMENUBARINFO结构体和Windows API函数,可以轻松地实现菜单栏及子菜单的动态管理。此外,还提供了使软键不可用以及为子菜单项打勾的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在开发时经常要创建菜单,并且动态显示和隐藏菜单或者是某个子菜单。以下就是实现的方法:

1.创建并显示菜单
  SHMENUBARINFO mbi;
  ZeroMemory(&mbi, sizeof(SHMENUBARINFO));
  mbi.cbSize=sizeof(SHMENUBARINFO);
  mbi.hwndParent=m_hWnd;
  mbi.hInstRes=::AfxGetInstanceHandle();
  mbi.dwFlags=SHCMBF_HMENU|SHCMBF_HIDESIPBUTTON;//隐藏SIP
  mbi.nToolBarId=IDR_MYMENU;
  SHCreateMenuBar(&mbi);

2.隐藏菜单
  HWND hwnd=::SHFindMenuBar(m_hWnd);
  if(hwnd!=NULL)
  ::ShowWindow(hwnd,SW_HIDE);

3.隐藏某个子菜单项
   TBBUTTONINFO tbbi = {0};
   tbbi.cbSize = sizeof(TBBUTTONINFO);
   tbbi.dwMask = TBIF_LPARAM | TBIF_BYINDEX;               
   ::SendMessageW(mbi.hwndMB, TB_GETBUTTONINFO,0, (LPARAM)&tbbi); //0为SK1,1为SK2(即左右软键)
   g_hMenu = (HMENU)tbbi.lParam;//g_hMenu为全局变量,这样就可以在任何地方隐藏子菜单了

  EnableMenuItem(g_Menu,ID_TEST,MF_GRAYED);//隐藏子菜单
  //显示子菜单
  EnableMenuItem(g_Menu,ID_TEST,MF_ENABLED);

  在使用语言Module时,要注意库中的ID与应用程序中定义的ID是否一致。

4.使某个SK(Soft Key)不可用
::SHEnableSoftkey(mbi.hwndMB,0,TRUE,FALSE); 

5.子菜单打勾
    HMENU hMenu;
    HWND hwndMenuBar = ::SHFindMenuBar(m_hWnd); //m_hWnd是窗口句柄
    TBBUTTONINFO tbbi = {0};
    tbbi.cbSize = sizeof(tbbi);
    tbbi.dwMask = TBIF_LPARAM|TBIF_BYINDEX;
    //第三个参数1表示右菜单,为0表示左菜单
    ::SendMessage(hwndMenuBar, TB_GETBUTTONINFO, 1, (LPARAM)&tbbi);
    hMenu = (HMENU)tbbi.lParam; //hMenu这个句柄就是菜单操作常用的句柄了,获得这个句柄非常有用。
    DWORD ack =    CheckMenuItem(hMenu,ID_STARTUP,MF_BYCOMMAND|MF_CHECKED);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值