在窗口回调函数中使用case WM_CONTEXTMENU: POINT pt; pt.x = LOWORD (lParam) ; pt.y = HIWORD (lParam) ;BOOL TrackPopupMenu( HMENU hMenu, // handle to shortcut menu UINT uFlags, // screen-position and mouse-button flags int x, // horizontal position, in screen coordinates int y, // vertical position, in screen coordinates int nReserved, // reserved, must be zero HWND hWnd, // handle to owner window CONST RECT *prcRect // ignored ); 在使用这个TrackPopupMenu函数就行啦 hMenu之前使用 HMENU LoadMenu( HINSTANCE hInstance, // handle to application instance LPCTSTR lpMenuName // menu name string or menu-resource // identifier ); 获取
再通过相应的菜单项, BOOL ShowWindow( HWND hWnd, // handle to window int nCmdShow // show state of window );UpdateWidnow()函数来显示窗口
然后你添加菜单命令。
menu.LoadMenu(IDC_POPMENU); //装入刚建立的菜单IDC_POPMENU menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,pWnd);
/*GetSubMenu(0)得到IDC_POPMENU的第一层子菜单,TrackPopupMenu将菜单弹出到(x,y)处。由于设置为TPM_LEFTALIGN,所以菜单以(x,y)为左上角。*/ 给IDC_POPMENU创建一个响应函数,在函数中DoModal()就可以了
POINT pt;
pt.x = LOWORD (lParam) ;
pt.y = HIWORD (lParam) ;BOOL TrackPopupMenu(
HMENU hMenu, // handle to shortcut menu
UINT uFlags, // screen-position and mouse-button flags
int x, // horizontal position, in screen coordinates
int y, // vertical position, in screen coordinates
int nReserved, // reserved, must be zero
HWND hWnd, // handle to owner window
CONST RECT *prcRect // ignored
);
在使用这个TrackPopupMenu函数就行啦
hMenu之前使用
HMENU LoadMenu(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpMenuName // menu name string or menu-resource
// identifier
);
获取
BOOL ShowWindow(
HWND hWnd, // handle to window
int nCmdShow // show state of window
);UpdateWidnow()函数来显示窗口
#define CM_DOCUMENT 1001
switch(msg)
{
case WM_RBUTTONUP:
POINT t;
GetCursorPos(&t);
ScreenToClient(hwnd,&t);
HMENU hMenu,hPopupMenu;
hMenu=CreatePopupMenu();
hPopupMenu=CreatePopupMenu();
Append(hMenu,MF_STRING,CW_ABOUT,"关于(&A)");
Append(hPopupMenu,MF_STRING,CW_DOCUMENT,"文档(&D)");
InserMenu(hMenu,1,MF_BYPOSITION|MF_STRING|MF_POPUP,hPopupMenu,"新建");
TrackPopupMenu(hMenu,TPM_TOPALTIGN,t.x,t.y,0,hwnd,0);
break;
}
如果有错忽视之。
然后就是
WM_COMMAND:
switch(LOWORD(wParam))
{
case CW_ABOUT:
MessageBox(hwnd,"关于信息","关于",MB_ICONINFORMATION);
break;
case CW_DOCUMENT:
//DO
break;
default:
break;
}
break;