📄 menudemoview.cpp
字号:
// MenuDemoView.cpp : implementation of the CMenuDemoView class
//
#include "stdafx.h"
#include "MenuDemo.h"
#include "MenuDemoDoc.h"
#include "MenuDemoView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMenuDemoView
IMPLEMENT_DYNCREATE(CMenuDemoView, CView)
BEGIN_MESSAGE_MAP(CMenuDemoView, CView)
//{{AFX_MSG_MAP(CMenuDemoView)
ON_COMMAND(ID_MENURUN, OnMenurun)
ON_UPDATE_COMMAND_UI(ID_MENURUN, OnUpdateMenurun)
ON_COMMAND(ID_MENUPOUSE, OnMenupouse)
ON_UPDATE_COMMAND_UI(ID_MENUPOUSE, OnUpdateMenupouse)
ON_COMMAND(IDS_ID_MENUSTOP, OnMenustop)//"停止程序"菜单项消息映射宏
ON_WM_RBUTTONDOWN()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMenuDemoView construction/destruction
CMenuDemoView::CMenuDemoView()
{
// TODO: add construction code here
IsRun=false;
IsPause=false;
Isinit=true;
Newstart=true;
m_CheckBitmap.LoadBitmap(IDB_STAR);
}
CMenuDemoView::~CMenuDemoView()
{
}
BOOL CMenuDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMenuDemoView drawing
void CMenuDemoView::OnDraw(CDC* pDC)
{
CMenuDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
// Associate bitmaps with the "Test" menu item.
CWnd *pWnd=AfxGetApp( )->GetMainWnd( ); //获得窗口指针
CMenu * pMenu=pWnd->GetMenu( ); //获得menu指针
CMenu* submenu = pMenu->GetSubMenu(5);
ASSERT(submenu->SetMenuItemBitmaps(ID_MENURUN, MF_BYCOMMAND,
&m_CheckBitmap, &m_CheckBitmap));
}
/////////////////////////////////////////////////////////////////////////////
// CMenuDemoView printing
BOOL CMenuDemoView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMenuDemoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMenuDemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMenuDemoView diagnostics
#ifdef _DEBUG
void CMenuDemoView::AssertValid() const
{
CView::AssertValid();
}
void CMenuDemoView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMenuDemoDoc* CMenuDemoView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMenuDemoDoc)));
return (CMenuDemoDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMenuDemoView message handlers
void CMenuDemoView::OnMenurun()
{
// TODO: Add your command handler code here
IsPause=false;
IsRun=true;
CClientDC dc(this); //获得DC
dc.TextOut(30,40,"运行菜单项响应,程序正在运行中!");//输出文本
if(Newstart)
{
CWnd *pWnd=AfxGetApp( )->GetMainWnd( ); //获得窗口指针
CMenu * pMenu=pWnd->GetMenu( ); //获得menu指针
pMenu=pMenu->GetSubMenu(5); //获得菜单项("操作"项)
pMenu->AppendMenu(MF_SEPARATOR); //增加分隔符
//增加菜单项"停止程序(&S)"
pMenu->AppendMenu(MF_STRING,IDS_ID_MENUSTOP,"停止程序(&S)");
Newstart=false; //改变条件变量
}
}
void CMenuDemoView::OnUpdateMenurun(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(IsRun)
{
pCmdUI->SetText("运行中");//更改菜单项标题
pCmdUI->Enable(false);//菜单项无效
pCmdUI->SetCheck(false);//菜单项标记取消
}
else
{
pCmdUI->SetText("运行");//恢复菜单项标题
pCmdUI->Enable(true);//菜单项生效
pCmdUI->SetCheck(true);//菜单项标记恢复
}
}
void CMenuDemoView::OnMenupouse()
{
// TODO: Add your command handler code here
IsPause=true;
IsRun=false;
CClientDC dc(this); //获得DC
dc.TextOut(30,40,"暂停菜单项响应,程序正在暂停中!");//输出文本
}
void CMenuDemoView::OnUpdateMenupouse(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(Isinit)//程序第一次启动
{
pCmdUI->Enable(false);//暂停菜单项无效
Isinit=false;
}
else
{
if(IsPause)//暂停菜单项执行
{
pCmdUI->SetText("暂停中");//更改菜单项标题
pCmdUI->Enable(false);//菜单项无效
pCmdUI->SetCheck(false);//菜单项标记取消
}
else
{
pCmdUI->SetText("暂停");//恢复菜单项标题
pCmdUI->Enable(true);//菜单项生效
pCmdUI->SetCheck(true);//菜单项标记恢复
}
}
}
void CMenuDemoView::OnMenustop() //"停止程序"菜单项消息映射函数
{
// TODO: Add your command handler code here
IsPause=true;
IsRun=false;
CClientDC dc(this); //获得DC
dc.TextOut(30,40,"停止菜单项响应,程序已经被停止!");//输出文本
CWnd *pWnd=AfxGetApp( )->GetMainWnd( ); //获得窗口指针
CMenu * pMenu=pWnd->GetMenu( ); //获得menu指针
CMenu* submenu = pMenu->GetSubMenu(5);//获取“命令”菜单项
submenu->RemoveMenu(3, MF_BYPOSITION);//将“停止程序”菜单项删除
submenu->RemoveMenu(2, MF_BYPOSITION);//将分隔符删除
Newstart=true; //改变条件变量
}
void CMenuDemoView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd *pWnd=AfxGetApp( )->GetMainWnd( ); //获得窗口指针
CMenu * pMenu=pWnd->GetMenu( ); //获得menu指针
CMenu* submenu = pMenu->GetSubMenu(5);//获取“命令”菜单项
CPoint pt;
GetCursorPos(&pt);//获得鼠标位置
submenu->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this); //弹出浮动菜单
CView::OnRButtonDown(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -