⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menudemoview.cpp

📁 超级经典书籍《VC++6开发指南》的源码(绝对全)
💻 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 + -