请问我的菜单为什么不能弹出子菜单(Windows Mobile|C++)
如题,WindowsMobile程序,C++开发,标准SDK方式创建窗口与菜单。主要代码如下:======================================...
如题,Windows Mobile程序,C++开发,标准SDK方式创建窗口与菜单。
主要代码如下:
=============================================================
/*初始化对话框菜单*/
SHMENUBARINFO mb = {0};
mb.cbSize = sizeof(SHMENUBARINFO);
mb.hwndParent = hwndDlg;
mb.nToolBarId = IDM_DVC_MENU;
mb.hInstRes = g_hInst;
SHCreateMenuBar(&mb)
/*菜单RC资源*/
IDM_DVC_MENU MENU
BEGIN
POPUP "菜单"
BEGIN
MENUITEM "确定", IDOK
MENUITEM "取消", IDCANCEL
END
END
/*菜单rc2资源*/
IDM_DVC_MENU SHMENUBAR DISCARDABLE
BEGIN
IDM_DVC_MENU, 2,
I_IMAGENONE, ID_IV_REFRESH, TBSTATE_ENABLED, TBSTYLE_BUTTON|TBSTYLE_AUTOSIZE, IDS_REFRESH, 0, NOMENU,
I_IMAGENONE, IDC_DVC_VALUE, TBSTATE_ENABLED, TBSTYLE_DROPDOWN|TBSTYLE_AUTOSIZE, IDS_MENU, 0, 0,
END
=====================================================
以上代码可以正确创建菜单:“刷新”,“菜单”二项菜单。
“刷新”没有子菜单,“菜单”有子菜单。
可以代码运行后,单击“菜单”项弹不出子菜单,不知道为什么?
各种方法我都试过了,都不行!!
=====================================================
最后能否麻烦大家给我介绍一下Windows Mobile下的菜单rc资源的编辑格式呀?如,每个参数代表什么意思。如果能找到权威的介绍链接就更好了(英文的也可以)。
最的一我说明一点,Windows Mobile上的rc2资源格式和PC机上的还是有一点区别的。
=====================================================
最重要的是解决第一个问题,郁闷了我很久了,我着急完成程序,我在此先先谢过了。
二楼的哥哥,你发的是什么东东啊。。我急着解决问题呢,麻烦,发点和问题相关的好嘛,谢谢。 展开
主要代码如下:
=============================================================
/*初始化对话框菜单*/
SHMENUBARINFO mb = {0};
mb.cbSize = sizeof(SHMENUBARINFO);
mb.hwndParent = hwndDlg;
mb.nToolBarId = IDM_DVC_MENU;
mb.hInstRes = g_hInst;
SHCreateMenuBar(&mb)
/*菜单RC资源*/
IDM_DVC_MENU MENU
BEGIN
POPUP "菜单"
BEGIN
MENUITEM "确定", IDOK
MENUITEM "取消", IDCANCEL
END
END
/*菜单rc2资源*/
IDM_DVC_MENU SHMENUBAR DISCARDABLE
BEGIN
IDM_DVC_MENU, 2,
I_IMAGENONE, ID_IV_REFRESH, TBSTATE_ENABLED, TBSTYLE_BUTTON|TBSTYLE_AUTOSIZE, IDS_REFRESH, 0, NOMENU,
I_IMAGENONE, IDC_DVC_VALUE, TBSTATE_ENABLED, TBSTYLE_DROPDOWN|TBSTYLE_AUTOSIZE, IDS_MENU, 0, 0,
END
=====================================================
以上代码可以正确创建菜单:“刷新”,“菜单”二项菜单。
“刷新”没有子菜单,“菜单”有子菜单。
可以代码运行后,单击“菜单”项弹不出子菜单,不知道为什么?
各种方法我都试过了,都不行!!
=====================================================
最后能否麻烦大家给我介绍一下Windows Mobile下的菜单rc资源的编辑格式呀?如,每个参数代表什么意思。如果能找到权威的介绍链接就更好了(英文的也可以)。
最的一我说明一点,Windows Mobile上的rc2资源格式和PC机上的还是有一点区别的。
=====================================================
最重要的是解决第一个问题,郁闷了我很久了,我着急完成程序,我在此先先谢过了。
二楼的哥哥,你发的是什么东东啊。。我急着解决问题呢,麻烦,发点和问题相关的好嘛,谢谢。 展开
4个回答
展开全部
我刚才刚看到这个问题了
问题是Windows Mobile上和PC上文件有什么区别我不大清楚
你的图上的“刷新 菜单” 条是什么,是标准菜单,还是...
是不是要求单击“菜单”项时弹出,一个菜单
如果“刷新 菜单” 条是不是准菜单
单击“菜单”项时弹出的菜单,应该用TrackPopupMenu实现的
下边是SDK中的rc 文件
弹出菜单项是 "Program Pop","Office Pop"
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ALPHATOOLBAR ICON DISCARDABLE "AlphaToolBar.ICO"
IDI_SMALL ICON DISCARDABLE "SMALL.ICO"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_OFFICEGRPUP BITMAP DISCARDABLE ".\\bmp98\\OFFICE16Up.bmp"
IDB_OFFICEGRPDOWN1 BITMAP DISCARDABLE ".\\bmp98\\OfficeDn1.bmp"
IDB_OFFICEGRPDOWN2 BITMAP DISCARDABLE ".\\bmp98\\OfficeDn2.bmp"
IDB_PROGRAMGRPUP BITMAP DISCARDABLE ".\\bmp98\\VB16Up.bmp"
IDB_PROGRAMGRPDOWN1 BITMAP DISCARDABLE ".\\bmp98\\VBDn1.bmp"
IDB_PROGRAMGRPDOWN2 BITMAP DISCARDABLE ".\\bmp98\\VBDn2.bmp"
IDB_NETCAPTOR BITMAP DISCARDABLE ".\\bmp98\\NetCaptor_754.bmp"
IDB_PROTECT BITMAP DISCARDABLE ".\\bmp98\\Protect16Up.bmp"
IDB_NOTE BITMAP DISCARDABLE ".\\bmp98\\note16Up.bmp"
IDB_PAINT BITMAP DISCARDABLE ".\\bmp98\\Paint16up.bmp"
IDB_PHOTO BITMAP DISCARDABLE ".\\bmp98\\Photo16up.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDC_ALPHATOOLBAR MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "E&xit", IDM_EXIT
END
POPUP "&Help"
BEGIN
MENUITEM "&About ...", IDM_ABOUT
END
END
IDC_MENUPOP MENU DISCARDABLE
BEGIN
POPUP "Program Pop"
BEGIN
MENUITEM "&Microsoft Visual Basic 6.0", IDC_VB
MENUITEM "Microsoft Visual &C++ 6.0", IDC_VC
MENUITEM "&Borland C++ Builder 6.0", IDC_CBUILDER
MENUITEM "B&orland C++ Builder 5.0", IDC_CBUILDER5
MENUITEM "&Dev-C++", IDC_DEVC
MENUITEM "MinGW Developer &Studio", IDC_MINGW
MENUITEM "&Win-TC 1.91", IDC_WINTC
MENUITEM "E&xit", IDC_EXIT
END
POPUP "Office Pop"
BEGIN
MENUITEM "Microsoft &Word", IDC_WORD
MENUITEM "Microsoft &Excel", IDC_EXCEL
MENUITEM "Microsoft &Access", IDC_ACCESS
MENUITEM "Microsoft &FrontPage", IDC_FRONTPAGE
END
POPUP "Protect Pop"
BEGIN
MENUITEM "@3721专杀工具", IDC_3721
MENUITEM "金山清理专家(&K)", IDC_KINGCLEAR
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDC_ALPHATOOLBAR ACCELERATORS MOVEABLE PURE
BEGIN
"?", IDM_ABOUT, ASCII, ALT
"/", IDM_ABOUT, ASCII, ALT
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG DISCARDABLE 22, 17, 230, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "About"
FONT 8, "System"
BEGIN
ICON IDI_ALPHATOOLBAR,IDC_MYICON,14,9,16,16
LTEXT "AlphaToolBar Version 1.0",IDC_STATIC,49,10,119,8,
SS_NOPREFIX
LTEXT "Copyright (C) 2009",IDC_STATIC,49,20,119,8
DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
END
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""windows.h""\r\n"
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""resource.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_TITLE "AlphaToolBar"
IDS_HELLO "Hello World!"
IDC_ALPHATOOLBAR "ALPHATOOLBAR"
END
#endif // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
这是实现菜单弹出的部分
inline void __fastcall TopopMenu(HWND hWnd, int X, int Y)
{
HMENU hmenu;
if (hProgramGrp == hWnd)
hmenu = GetSubMenu(LoadMenu(g_hInst, (LPCSTR)MAKEINTRESOURCE(IDC_MENUPOP)), 0);
else if (hOfficeGrp == hWnd)
hmenu = GetSubMenu(LoadMenu(g_hInst, (LPCSTR)MAKEINTRESOURCE(IDC_MENUPOP)), 1);
RECT rect;
GetWindowRect(hWnd, &rect);
POINT point;
point.x = rect.left;
point.y = rect.top + rect.bottom - 2;
//ClientToScreen(hWnd, &point);
TrackPopupMenu(hmenu, TPM_LEFTALIGN, point.x, point.y, 0, hWnd, NULL);
DestroyMenu(hmenu);
}
问题是Windows Mobile上和PC上文件有什么区别我不大清楚
你的图上的“刷新 菜单” 条是什么,是标准菜单,还是...
是不是要求单击“菜单”项时弹出,一个菜单
如果“刷新 菜单” 条是不是准菜单
单击“菜单”项时弹出的菜单,应该用TrackPopupMenu实现的
下边是SDK中的rc 文件
弹出菜单项是 "Program Pop","Office Pop"
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ALPHATOOLBAR ICON DISCARDABLE "AlphaToolBar.ICO"
IDI_SMALL ICON DISCARDABLE "SMALL.ICO"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_OFFICEGRPUP BITMAP DISCARDABLE ".\\bmp98\\OFFICE16Up.bmp"
IDB_OFFICEGRPDOWN1 BITMAP DISCARDABLE ".\\bmp98\\OfficeDn1.bmp"
IDB_OFFICEGRPDOWN2 BITMAP DISCARDABLE ".\\bmp98\\OfficeDn2.bmp"
IDB_PROGRAMGRPUP BITMAP DISCARDABLE ".\\bmp98\\VB16Up.bmp"
IDB_PROGRAMGRPDOWN1 BITMAP DISCARDABLE ".\\bmp98\\VBDn1.bmp"
IDB_PROGRAMGRPDOWN2 BITMAP DISCARDABLE ".\\bmp98\\VBDn2.bmp"
IDB_NETCAPTOR BITMAP DISCARDABLE ".\\bmp98\\NetCaptor_754.bmp"
IDB_PROTECT BITMAP DISCARDABLE ".\\bmp98\\Protect16Up.bmp"
IDB_NOTE BITMAP DISCARDABLE ".\\bmp98\\note16Up.bmp"
IDB_PAINT BITMAP DISCARDABLE ".\\bmp98\\Paint16up.bmp"
IDB_PHOTO BITMAP DISCARDABLE ".\\bmp98\\Photo16up.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDC_ALPHATOOLBAR MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "E&xit", IDM_EXIT
END
POPUP "&Help"
BEGIN
MENUITEM "&About ...", IDM_ABOUT
END
END
IDC_MENUPOP MENU DISCARDABLE
BEGIN
POPUP "Program Pop"
BEGIN
MENUITEM "&Microsoft Visual Basic 6.0", IDC_VB
MENUITEM "Microsoft Visual &C++ 6.0", IDC_VC
MENUITEM "&Borland C++ Builder 6.0", IDC_CBUILDER
MENUITEM "B&orland C++ Builder 5.0", IDC_CBUILDER5
MENUITEM "&Dev-C++", IDC_DEVC
MENUITEM "MinGW Developer &Studio", IDC_MINGW
MENUITEM "&Win-TC 1.91", IDC_WINTC
MENUITEM "E&xit", IDC_EXIT
END
POPUP "Office Pop"
BEGIN
MENUITEM "Microsoft &Word", IDC_WORD
MENUITEM "Microsoft &Excel", IDC_EXCEL
MENUITEM "Microsoft &Access", IDC_ACCESS
MENUITEM "Microsoft &FrontPage", IDC_FRONTPAGE
END
POPUP "Protect Pop"
BEGIN
MENUITEM "@3721专杀工具", IDC_3721
MENUITEM "金山清理专家(&K)", IDC_KINGCLEAR
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDC_ALPHATOOLBAR ACCELERATORS MOVEABLE PURE
BEGIN
"?", IDM_ABOUT, ASCII, ALT
"/", IDM_ABOUT, ASCII, ALT
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG DISCARDABLE 22, 17, 230, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "About"
FONT 8, "System"
BEGIN
ICON IDI_ALPHATOOLBAR,IDC_MYICON,14,9,16,16
LTEXT "AlphaToolBar Version 1.0",IDC_STATIC,49,10,119,8,
SS_NOPREFIX
LTEXT "Copyright (C) 2009",IDC_STATIC,49,20,119,8
DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
END
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""windows.h""\r\n"
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""resource.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_TITLE "AlphaToolBar"
IDS_HELLO "Hello World!"
IDC_ALPHATOOLBAR "ALPHATOOLBAR"
END
#endif // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
这是实现菜单弹出的部分
inline void __fastcall TopopMenu(HWND hWnd, int X, int Y)
{
HMENU hmenu;
if (hProgramGrp == hWnd)
hmenu = GetSubMenu(LoadMenu(g_hInst, (LPCSTR)MAKEINTRESOURCE(IDC_MENUPOP)), 0);
else if (hOfficeGrp == hWnd)
hmenu = GetSubMenu(LoadMenu(g_hInst, (LPCSTR)MAKEINTRESOURCE(IDC_MENUPOP)), 1);
RECT rect;
GetWindowRect(hWnd, &rect);
POINT point;
point.x = rect.left;
point.y = rect.top + rect.bottom - 2;
//ClientToScreen(hWnd, &point);
TrackPopupMenu(hmenu, TPM_LEFTALIGN, point.x, point.y, 0, hWnd, NULL);
DestroyMenu(hmenu);
}
展开全部
没用过 SHCreateMenuBar ,这个应该是 shell32.lib里面的函数。
CE系统上有 LoadMenu 函数,你用这个不是很好么
HMENU LoadMenu(
HINSTANCE hInstance,
LPCTSTR lpMenuName ) ,使用 MAKEINTRESOURCE 宏转换MENUID;
我不知道wm系统下菜单资源的格式,我想应该和xp下差不多吧。这个格式是LoadMenu装入识别的,跟操作系统关系不大。你新建一个VC的工程,然后以编辑方式打开.rc资源文件,能看到资源文本内容。(点中xxx.rc文件,右键“打开方式...”——选“源代码文本编辑器”,再“打开”即可看到资源文本,找找就能看到菜单部分的资源定义格式了)。
不过这样都太麻烦,如果你菜单比较简单且不变动,完全可以写入在程序中,如下方式:
HMENU CreateMenu(),如果是弹出式菜单使用 CreatePopupMenu 来创建一个菜单句柄。然后使用
AppendMenu(hMenu,uFlags,uIDNewItem,lpNewItem)来添加一个菜单项目。
比如你的情况:
HMENU hMainMenu= CreateMenu();
// 弹出式子菜单部分。
HMENU hPopupMenu = CreatePopueMenu();
BOOL bRet = AppendMenu(hPopupMenu, MF_STRING, 1000, "子菜单项1");
bRet = AppendMenu(hPopupMenu, MF_STRING,1001,"子菜单项2");
bRet = AppendMenu(hPopupMenu, MF_STRING,1002,"子菜单项3");
// 给主菜单添加项目。
bRet = AppendMenu( hMainMenu, MF_STRING, 1008,"刷新");
bRet = AppendMenu( hMainMenu, MF_POPUP|MF_STRING,UINT_PTR(hPopupMenu),"菜单");
然后就可以将hMainMenu附加给窗口显示了。 hPopupMenu 可以不要保存。
CE系统上有 LoadMenu 函数,你用这个不是很好么
HMENU LoadMenu(
HINSTANCE hInstance,
LPCTSTR lpMenuName ) ,使用 MAKEINTRESOURCE 宏转换MENUID;
我不知道wm系统下菜单资源的格式,我想应该和xp下差不多吧。这个格式是LoadMenu装入识别的,跟操作系统关系不大。你新建一个VC的工程,然后以编辑方式打开.rc资源文件,能看到资源文本内容。(点中xxx.rc文件,右键“打开方式...”——选“源代码文本编辑器”,再“打开”即可看到资源文本,找找就能看到菜单部分的资源定义格式了)。
不过这样都太麻烦,如果你菜单比较简单且不变动,完全可以写入在程序中,如下方式:
HMENU CreateMenu(),如果是弹出式菜单使用 CreatePopupMenu 来创建一个菜单句柄。然后使用
AppendMenu(hMenu,uFlags,uIDNewItem,lpNewItem)来添加一个菜单项目。
比如你的情况:
HMENU hMainMenu= CreateMenu();
// 弹出式子菜单部分。
HMENU hPopupMenu = CreatePopueMenu();
BOOL bRet = AppendMenu(hPopupMenu, MF_STRING, 1000, "子菜单项1");
bRet = AppendMenu(hPopupMenu, MF_STRING,1001,"子菜单项2");
bRet = AppendMenu(hPopupMenu, MF_STRING,1002,"子菜单项3");
// 给主菜单添加项目。
bRet = AppendMenu( hMainMenu, MF_STRING, 1008,"刷新");
bRet = AppendMenu( hMainMenu, MF_POPUP|MF_STRING,UINT_PTR(hPopupMenu),"菜单");
然后就可以将hMainMenu附加给窗口显示了。 hPopupMenu 可以不要保存。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
中毒了吧
重做系统试试
重做系统试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询