人民币上下文菜单 [英] RMB Context Menu

查看:99
本文介绍了人民币上下文菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

喂,

我在做一个简单的人民币上下文菜单时遇到了魔鬼-我确信我对一些基本的东西误解了.尽管菜单显示在人民币上-最低菜单项的文本不显示-我只能看到竖线.但是,将第二级菜单悬停在关联的父菜单的垂直栏上时,显示会很好.附上有关情况的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆