Windows Mobile上的菜单

更多wince/wm相关请参考一下论坛 http://www.surfingcenter.cn/forumdisplay.php?fid=9, 也欢迎各位到该论坛提问答疑. 1 菜单栏的创建 (1) Win32 和 MFC 都适用的创建方式 /* 加载菜单到窗口, 并返回菜单窗口句柄 uiMenuID 菜单资源ID pWnd 需要加载菜单的窗口 返回值 菜单栏窗口句柄 */ HWND Menu_LoadMenuToWnd( UINT uiMenuID, CWnd* pWnd ) { SHMENUBARINFO mbi; ZeroMemory(&mbi, sizeof(SHMENUBARINFO)); mbi.cbSize = sizeof(SHMENUBARINFO); mbi.hwndParent = pWnd->m_hWnd; mbi.hInstRes = ::AfxGetInstanceHandle(); mbi.dwFlags = SHCMBF_HMENU|SHCMBF_HIDESIPBUTTON; //隐藏SIP mbi.nToolBarId = uiMenuID; if( !SHCreateMenuBar(&mbi) ) { WRITE_LOG1( "::LoadMenuToWnd error, error code is %d./r/n", GetLastError() ); return NULL; } return mbi.hwndMB; } (2) 在MFC上, 也可以这样创建菜单 if (!m_dlgCommandBar.Create(this) || !m_dlgCommandBar.InsertMenuBar(IDR_MENU_MAIN)) //IDR_MENU_MAIN 菜单资源ID { TRACE0("未能创建 CommandBar/n"); return FALSE; // 未能创建 } 不过这样创建的菜单好像在动态改变菜单项的时候比较麻烦 MFC下的对话框工程, 主窗口有个默认的菜单IDR_MAINFRAME, 我试着在其上面直接添加菜单项, 彷佛永远都不起作用, 不知道怎么回事. 2 获取菜单栏的左右菜单句柄 在上一步创建的菜单与win32 pc上创建的菜单实际上是不同的, 在WM上要想操作子菜单项, 还必须要先获取子菜单项的句柄 /* 由菜单窗口句柄获取右软件菜单句柄 hWnd, 菜单栏窗口句柄 返回值 左(右)软键菜单句柄 */ HMENU Menu_GetSK1FromMenuHwnd( HWND hWnd) { TBBUTTONINFO tbbi = {0}; tbbi.cbSize = sizeof(TBBUTTONINFO); tbbi.dwMask = TBIF_LPARAM | TBIF_BYINDEX; ::SendMessageW(hWnd, TB_GETBUTTONINFO, 1, (LPARAM)&tbbi); //0为左软键,1为右软键, return (HMENU)tbbi.lParam; } 3 菜单项的编辑 SendMessageW发送TB_SETBUTTONINFO可以修改左右软键的属性, 选中状态, 以及是否disable等, 实际上这是按钮, 而不是菜单. 用EnableMenuItem, CHeckMenuItem等这些api也可以编辑菜单项. 在MFC工程中, 也可以CMenu::FromHandle后用 CMenu类来操作. 4 在wm5上, 好像一定要重写OnInitMenuPopup这个函数后才能正确的编辑菜单项
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值