请教:关于创建窗口菜单的两个问题

VitaminB4 2009-04-05 01:12:51
小弟初学Mobile开发,问的问题在各位老大看来可能非常低级,见笑见笑。

我用MFC,想在窗口添加菜单。有两个困惑:

1. 看流行的Mobile软件,一种菜单是用CCommandBar类创建的,我的代码是这样:

if (!m_wndCommandBar.Create(this) ||
!m_wndCommandBar.InsertMenuBar(IDR_MENU_OPERATE) ||
!m_wndCommandBar.AddAdornments(dwAdornmentFlags) ||
!m_wndCommandBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("未能创建 CommandBar\n");
return -1; // 未能创建
}

IDR_MENU_OPERATE被定义成这样:

//.rc里
IDR_MENU_OPERATE MENU
BEGIN
POPUP "操作"
BEGIN
MENUITEM "撤消", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "剪切", ID_EDIT_CUT
MENUITEM "复制", ID_EDIT_COPY
MENUITEM "粘贴", ID_EDIT_PASTE
END
POPUP "工具" //也就是根菜单就有两个,这是第二个
BEGIN
MENUITEM "关于...", ID_APP_ABOUT
END
END

//在.rc2里
IDR_MENU_OPERATE SHMENUBAR MOVEABLE PURE
BEGIN
IDR_MENU_OPERATE,
2,

I_IMAGENONE, IDM_MENUBAR, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
IDS_MENU_OPERATE, 0, 0,

I_IMAGENONE, IDM_MENUBAR, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
IDS_MENU_TOOLS, 0, 0,
END

问题:这样并不能创建IDR_MENU_OPERATE上的两个根菜单,我想在CommandBar创建两个或多个菜单(都不是按钮,是可以弹出的菜单),该怎么操作?


2. 另一种是直接用系统提供的左右软键工具条,左右软键各可以弹出一个菜单(很多软件把这个叫做“WM5.0风格的菜单”),这个我完全不知道是如何把自己的菜单创建上去的,还请指点一二。


麻烦大伙了,100分送上。
...全文
92 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
VitaminB4 2009-04-08
  • 打赏
  • 举报
回复
谢谢各位,特别是MS_Frank、jinlingzwp两位大侠的指点!

试了,成功。之前也试过SHCreateMenuBar,但在VS2005的虚拟PPC里,它跟CommandBar的效果是一样的,汗。。。现在用真机测。

SHCMBF_HMENU这个参数很重要,直接加菜单而不是SHMENUBAR,就靠它了。

这就结贴。
jinlingzwp 2009-04-07
  • 打赏
  • 举报
回复
左右软键各弹出一个菜单:
SHMENUBARINFO mbi;
ZeroMemory(&mbi, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = m_hWnd;
mbi.nToolBarId = IDR_MENU1; //菜单资源ID
mbi.hInstRes = AfxGetApp()->m_hInstance;//AfxGetInstanceHandle();
mbi.nBmpId = 0;
mbi.cBmpImages =0;
mbi.dwFlags |= SHCMBF_HMENU|MF_BYPOSITION;
SHCreateMenuBar(&mbi);
chenzhp 2009-04-06
  • 打赏
  • 举报
回复
真厉害!
全速前行 2009-04-06
  • 打赏
  • 举报
回复
是不是可以用cli(c++)开发啊,
就容易多了。。。
儿大不由爷 2009-04-06
  • 打赏
  • 举报
回复
基本上都用SHCreateMenuBar
wade_li 2009-04-06
  • 打赏
  • 举报
回复
收益非浅!up!
世外涛缘 2009-04-05
  • 打赏
  • 举报
回复
在Windows Mobile 6 SDK中,有个例子名称叫Basic Shell 。
楼主可以参考下。
MS_Frank 2009-04-05
  • 打赏
  • 举报
回复
直接用API创建好了,效率最高。
一般开发Mobile程序的很少有用MFC的。一般都用SDK方式。因为SP不支持MFC

rc文件不变
rc2文件可以不要,直接删除即可

看代码:

/*初始化对话框菜单*/
SHMENUBARINFO mb;
ZeroMemory(&mb, sizeof(SHMENUBARINFO));
mb.cbSize = sizeof(SHMENUBARINFO);
mb.dwFlags = SHCMBF_HMENU;
mb.hwndParent = hwnd; //对话框句柄
mb.nToolBarId = IDR_MENU_OPERATE;
mb.hInstRes = g_hInst; //应用程序实例
if(!SHCreateMenuBar(&mb))goto End;
mb.hwndMB; //是菜条的句柄

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧