龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

Visual C++中自绘菜单的实现(11)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
//////////////////////////////////////////////////////////////////通知菜单确定尺寸; void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) { // TODO: Add your mes
//////////////////////////////////////////////////////////////////通知菜单确定尺寸;
void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT
lpMeasureItemStruct)
{
 // TODO: Add your message handler code here and/or call default
 if(!nIDCtl) m_menu.MeasureItem(lpMeasureItemStruct);
  CFrameWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
/////////////////////////////////////////////////////////////////初始化上下文菜单;
CChildView::CChildView()
{
 m_menu.CreatePopupMenu();
 m_menu.AppendMenu(0,ID_EDIT_UNDO,"撤消");
 m_menu.AppendMenu(MF_SEPARATOR,0);
 m_menu.AppendMenu(0,ID_EDIT_COPY,"复制");
 m_menu.AppendMenu(0,ID_EDIT_CUT,"剪切");
 m_menu.AppendMenu(0,ID_EDIT_PASTE,_T("粘贴"));
}
///////////////////////////////////////////////////////////////////////////////
CChildView::~CChildView() //销毁上下文菜单;
{
 m_menu.DestroyMenu();
}
///////////////////////////////////////////////////////////////////修改菜单实现自画;
void CChildView::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
 CWnd ::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
 // TODO: Add your message handler code here
 if(!bSysMenu)
  m_menu.InitPopupMenu(pPopupMenu,IDR_MAINFRAME,m_pToolBar);
}
/////////////////////////////////////////////////////////////显示上下文菜单;
void CChildView::OnContextMenu(CWnd* pWnd, CPoint point)
{
 // TODO: Add your message handler code here
 m_menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
}

  四、小结

  到此为止,本例详细介绍了菜单自绘类CMenuEx的实现以及它在应用程序的具体使用方法,相信读者能够从中学习到菜单的自绘制机理。本例中的CMenuEx类稍加改动,就可以实现各种不同类型的菜单效果,如WindowsXP风格的菜单等。

精彩图集

赞助商链接