代码:#include <afxwin.h>
#include "resource.h"
class MyFrameWindow:public CFrameWnd
{
public:
CBitmap* MenuBitmap;//创建指向位图类的指针对象
virtual BOOL PreCreateWindow(CREATESTRUCT&cs);//在此函数中修改建立窗口的参数
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);//相应系统的WM_CREATE消息响应函数
afx_msg void OnRButtonUp(UINT nFlags,CPoint point);//鼠标右键松开系统响应函数
afx_msg void CmFileOpen(void){MessageBox("Open a file!","Your Command");}//菜单键FILE|OPEN响应函数
DECLARE_MESSAGE_MAP(); //生命消息映射表
};
//消息映射表
BEGIN_MESSAGE_MAP(MyFrameWindow,CFrameWnd)
ON_WM_CREATE()
ON_WM_RBUTTONUP()
ON_COMMAND(ID_FILE_OPEN,CmFileOpen)
END_MESSAGE_MAP()
BOOL MyFrameWindow::PreCreateWindow(CREATESTRUCT&cs)
{
cs.hMenu=LoadMenu(NULL,MAKEINTRESOURCE (IDR_MENU1));//载入MENU资源并指定它为窗口的主菜单
return CFrameWnd::PreCreateWindow(cs);//设置主窗口
}
int MyFrameWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CMenu *MainMenu,*SystemMenu,*SubMenu;//建立主菜单指针,系统菜单,和子菜单指针
if(CFrameWnd::OnCreate(lpCreateStruct))
return -1;
SystemMenu=GetSystemMenu(FALSE);//用GetSystemMenu函数取得系统菜单的指针
SystemMenu->AppendMenu(MF_SEPARATOR);//添加分隔线
SystemMenu->AppendMenu(MF_STRING,0,"This item is inserted by the programmer");//添加字符串
MenuBitmap=new CBitmap;//创建位图对象
MenuBitmap->LoadBitmap(IDB_BITMAP2);//载入位图资源
LoadAccelTable(MAKEINTRESOURCE(IDR_ACCELERATOR1));//载入快捷键表
MainMenu=GetMenu();//取得主菜单指针
SubMenu=MainMenu->GetSubMenu(0);//取得子菜单指针
SubMenu->AppendMenu(MF_BITMAP,IDB_BITMAP2,MenuBitmap);//添加位图参数为(标志,位图ID,位图指针)
return 0;
}
void MyFrameWindow::OnRButtonUp(UINT nFlags,CPoint point)
{
CMenu Popup,SubMenu;//创建弹出菜单和子菜单对象
CFrameWnd::OnRButtonUp(nFlags,point);
ClientToScreen(&point);//将客户区坐标转换为主屏幕坐标
Popup.CreatePopupMenu();//建立弹出菜单
SubMenu.LoadMenu(IDR_POPUP);//载入弹出子菜单
Popup.AppendMenu(MF_STRING,IDR_MENU2,"File");
Popup.AppendMenu(MF_POPUP,(UINT)SubMenu.m_hMenu,"Edit");
Popup.AppendMenu(MF_STRING,IDR_MENU2+1,"search");
Popup.AppendMenu(MF_SEPARATOR);
Popup.AppendMenu(MF_STRING,IDR_MENU2+2,"E&xit");
Popup.TrackPopupMenu(TPM_CENTERALIGN,point.x,point.y,this);//显示弹出菜单
}
//应用程序类
class MyApp:public CWinApp
{
public:
BOOL InitInstance()
{
CFrameWnd *MyFrame=new MyFrameWindow;//产生主窗口对象
m_pMainWnd=MyFrame;
MyFrame->Create(NULL,"");//建立主窗口
MyFrame->ShowWindow(SW_SHOW);//显示主窗口
return TRUE;
}
}MenuShow;