请问我的菜单为什么不能弹出子菜单(Windows Mobile|C++)
答案:4 悬赏:10 手机版
解决时间 2021-02-16 21:39
- 提问者网友:溺爱和你
- 2021-02-16 11:31
请问我的菜单为什么不能弹出子菜单(Windows Mobile|C++)
最佳答案
- 五星知识达人网友:詩光轨車
- 2021-02-16 12:17
没用过 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 可以不要保存。
全部回答
- 1楼网友:愁杀梦里人
- 2021-02-16 14:23
huai le
- 2楼网友:低血压的长颈鹿
- 2021-02-16 13:51
我刚才刚看到这个问题了
问题是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);
}
- 3楼网友:你哪知我潦倒为你
- 2021-02-16 12:51
中毒了吧
重做系统试试
重做系统试试
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯