人民币上下文菜单 [英] RMB Context Menu
问题描述
喂,
我在做一个简单的人民币上下文菜单时遇到了魔鬼-我确信我对一些基本的东西误解了.尽管菜单显示在人民币上-最低菜单项的文本不显示-我只能看到竖线.但是,将第二级菜单悬停在关联的父菜单的垂直栏上时,显示会很好.附上有关情况的jpg,以防万一我不清楚自己的意思.
以防万一-我正在使用Windows Vista Home Premium(32位).
使用Visual C ++ 2008 Express编译
在此先感谢您为解决此问题提供的帮助.
阿罗哈
显示人民币上下文菜单问题的链接 [
Aloha,
I''m having a devil of a time trying to do a simple RMB context menu - and I''m sure I''m misunderstanding something basic. Although the menu displays on RMB - the lowest menu item''s text doesn''t display - I just get vertical bars. But the 2nd level menu displays fine when hovering over the associated parent menu''s vertical bar. A jpg of the situation is attached in case I''m not explaining myself clearly.
In case it makes a difference - I''m using Windows Vista Home premium (32 bit).
Compiled using Visual C++ 2008 Express
Thanks in advance for any help in solving this problem.
Aloha
Link showing RMB Context Menu problem[^]
#include <windows.h>
#include <commctrl.h>
LRESULT CALLBACK mainWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
void ConstructMenu();
const char szAppName[] = "NodeDiagram";
HINSTANCE hInstance;
HWND mainWindow;
HMENU hMenu;
HMENU hsmFile, hsmEdit, hsmMessage, hsmConnection, hsmMain;
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd) {
WNDCLASSEX wc;
MSG msg;
wc.cbSize = sizeof(wc);
wc.style = 0;
wc.lpfnWndProc = mainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor (NULL, IDC_SIZEWE);
wc.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);;
wc.lpszMenuName = 0;
wc.lpszClassName = szAppName;
wc.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
RegisterClassEx(&wc);
hInstance = hInst;
ConstructMenu();
mainWindow = CreateWindowEx(
0, // extended style (not needed)
szAppName, // window class name
szAppName, // window caption
WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // a menu handle here will put the menu on the window
hInst, // program instance handle
NULL); // creation parameters
ShowWindow(mainWindow, nShowCmd);
while(GetMessage(&msg, NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK mainWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
POINT point;
switch(msg) {
case WM_CREATE:
return 0;
case WM_CLOSE:
DestroyWindow(hwnd);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_RBUTTONDOWN:
point.x = LOWORD (lParam) ;
point.y = HIWORD (lParam) ;
ClientToScreen (hwnd, &point) ;
TrackPopupMenu (hMenu, TPM_RIGHTBUTTON|TPM_LEFTALIGN|TPM_NONOTIFY|TPM_RETURNCMD, point.x, point.y, 0, hwnd, NULL) ;
return 0;
default:
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
void ConstructMenu() {
MENUITEMINFO mii;
int rc;
hMenu = CreateMenu();
hsmMain = CreatePopupMenu();
hsmFile = CreatePopupMenu();
hsmEdit = CreatePopupMenu();
hsmMessage = CreatePopupMenu();
hsmConnection = CreatePopupMenu();
memset(&mii, 0, sizeof(MENUITEMINFO));
mii.cbSize = (UINT) sizeof(MENUITEMINFO);
mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_SUBMENU;
mii.fType = MFT_STRING;
mii.hSubMenu= NULL;
//*** File ****************************************************************
mii.dwTypeData = TEXT("New");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 101;
rc=InsertMenuItem(hsmFile, 0, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Open");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 102;
rc=InsertMenuItem(hsmFile, 1, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Save");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 103;
rc=InsertMenuItem(hsmFile, 2, TRUE, (LPCMENUITEMINFO) &mii);
//*** Edit *****************************************************************
mii.dwTypeData = TEXT("Copy");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 201;
rc=InsertMenuItem(hsmEdit, 0, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Cut");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 202;
rc=InsertMenuItem(hsmEdit, 1, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Paste");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 203;
rc=InsertMenuItem(hsmEdit, 2, TRUE, (LPCMENUITEMINFO) &mii);
//*** Message **************************************************************
mii.dwTypeData = TEXT("New...");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 301;
rc=InsertMenuItem(hsmMessage, 0, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Refresh");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 302;
rc=InsertMenuItem(hsmMessage, 1, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Copy to clipboard");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 303;
rc=InsertMenuItem(hsmMessage, 2, TRUE, (LPCMENUITEMINFO) &mii);
//*** Connection ***********************************************************
mii.dwTypeData = TEXT("Connect");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 401;
rc=InsertMenuItem(hsmConnection, 0, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Disconnect");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 402;
rc=InsertMenuItem(hsmConnection, 1, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = "Settings";
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 403;
rc=InsertMenuItem(hsmConnection, 2, TRUE, (LPCMENUITEMINFO) &mii);
//*** Main Menu *************************************************************
mii.dwTypeData = TEXT("File");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 900; //100;
mii.hSubMenu= hsmFile;
rc=InsertMenuItem(hMenu, 0, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Edit");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 901; //200;
mii.hSubMenu= hsmEdit;
rc=InsertMenuItem(hMenu, 1, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Message");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 902; //300;
mii.hSubMenu= hsmMessage;
rc=InsertMenuItem(hMenu, 2, TRUE, (LPCMENUITEMINFO) &mii);
mii.dwTypeData = TEXT("Connection");
mii.cch = (UINT) strlen(mii.dwTypeData)+1;
mii.wID = (UINT) 903; //400;
mii.hSubMenu= hsmConnection;
rc=InsertMenuItem(hMenu, 3, TRUE, (LPCMENUITEMINFO) &mii);
}
推荐答案
尝试:
hMenu = CreatePopupMenu();
代替:
Instead of:
hMenu = CreateMenu();
CreateMenu用于创建菜单,您可以在标题栏下面看到.右键单击菜单是一个弹出菜单,因此应这样创建.
CreateMenu is used to create the menu you can see below the title bar. A right click menu is a popup menu, so it should be created as such.
这篇关于人民币上下文菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!