【MFC入门】之六 MFC中创建应用程序资源之菜单资源plus快捷菜单 and 快捷键

资源的类型很多,比如说快捷键,位图,光标,对话框,菜单等等

菜单与快捷菜单

点菜就要使用菜单,比如说我想在交互式程序中找到我的菜,就是要从相应的菜单中进行寻找

快捷菜单比如说我们在电脑桌面上右击弹出一个小对话框就可以认为是一个快捷菜单

此外来自百度百科的定义:显示与特定项目相关的一列命令的菜单,即鼠标右击时常出现的那个菜单,所以也叫右键菜单。

需实现程序功能:

1,创建一个窗口,可以通过菜单控制窗口中字的显示,消失以及控制颜色变化

2,右键能够弹出快捷菜单,并且可以进行相应的控制过程

基础知识

C++的部分基础知识:

1,一般来说  头文件:定义变量   源文件:初始化(赋值)

2,构造函数:包含在源文件当中,与析构函数进行配合

资源的部分基础知识:

通过单文档进行创建菜单


菜单部分程序

先在界面中输入相应的程序内容,并且定义好ID号

头文件:

定义相关变量:字符串,选中状态,颜色值

class CReviwView : public CView
{
protected: // 仅从序列化创建
	CReviwView();
	DECLARE_DYNCREATE(CReviwView)

// 特性
public:
	CReviwDoc* GetDocument() const;
	BOOL m_nSelect;//选中判断
	CString m_strShow;//采用CString对字符串进行储存
	COLORREF m_nColors[3];//颜色数组就是COLORREF进行储存
	DWORD m_nColorIndex;//与颜色配合
源文件
首先初始化变量

CReviwView::CReviwView()
{
	// TODO: 在此处添加构造代码
	/*
	BOOL m_nSelect;//选中判断
	CString m_strShow;//采用CString对字符串进行储存
	COLORREF m_nColors[3];//颜色数组就是COLORREF进行储存
	DWORD m_nColorIndex;//与颜色配合
	*/
	m_strShow = "My Simple Life Style";
	m_nColors[0] = RGB(255, 0, 0);
	m_nColors[1] = RGB(0, 255, 0);
	m_nColors[2] = RGB(0, 0, 255);
	m_nColorIndex = 0;
	m_nSelect = TRUE;
}
然后要将字符串显示通过右键弹出消息处理函数进行编辑,定义字的颜色以及位置

该部分完成了字符的显示与隐藏

void CReviwView::OnDraw(CDC*pDC /*pDC*/)
{
	CReviwDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;
	if (m_nSelect)
	{
		pDC->SetTextColor(m_nColors[m_nColorIndex]);
		pDC->TextOutW(100, 100, m_strShow);
	}
	// TODO: 在此处为本机数据添加绘制代码
}
UPDATE_COMMAND_UI锦上添花,指示选中

void CReviwView::OnUpdateShow(CCmdUI *pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	pCmdUI->SetCheck(m_nSelect);
}

接下来对连续ID的响应,在头文件当中可以看到它们的ID号是相同的
但是该部分不能直接通过消息响应程序进行处理只能手动添加

实现原理
1,目的:需要实现改变颜色,联系之前定义变量

	m_nColors[0] = RGB(255, 0, 0);
	m_nColors[1] = RGB(0, 255, 0);
	m_nColors[2] = RGB(0, 0, 255);
	m_nColorIndex = 0;
是通过改变Index进行颜色的更改

而前面定义了不同的ID号,其中nID表示调用该函数所处理菜单项的ID

2,使用:

ON_COMMAND_RANGE和定义有参为nID的函数


添加方式

1,头文件中声明函数

2,源文件的消息映射中使用ON_COMMAND_RANGE

3,实现函数

声明全局函数(.h中)

	afx_msg void OnOperColorChange(UINT nID);

在消息映射中添加

BEGIN_MESSAGE_MAP(CReviwView, CView)
	ON_COMMAND(ID_SHOW, &CReviwView::OnShow)
	ON_UPDATE_COMMAND_UI(ID_SHOW, &CReviwView::OnUpdateShow)
	ON_COMMAND_RANGE(ID_RED,ID_BLUE, OnOperColorChange)
END_MESSAGE_MAP()

定义响应函数

void CReviwView::OnOperColorChange(UINT nID)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	m_nColorIndex = nID - ID_RED;
	Invalidate();
}
同理添加UI

void CReviwView::OnUpdateOperColorChange(CCmdUI *pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	pCmdUI->SetRadio(m_nColorIndex==(pCmdUI->m_nID-ID_RED));
}

【MFC入门】之六 MFC中创建应用程序资源之菜单资源plus快捷菜单 and 快捷键_第1张图片


对于快捷菜单首先需要定义

	CMenu m_PopMenu;//Pop-up快捷菜单
	CMenu* m_pPop;//快捷子菜单
然后将快捷菜单资源绑定

	m_PopMenu.LoadMenuW(IDR_MENU1);

析构

	m_PopMenu.DestroyMenu();

添加消息响应WM_RBUTTONDOWN

void CReviwView::OnRButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	m_pPop = m_PopMenu.GetSubMenu(0);
	UINT nCheck = m_nSelect ? MF_CHECKED : MF_UNCHECKED;

	m_pPop->CheckMenuItem(ID_SHOW, MF_BYCOMMAND | nCheck);

	m_pPop->CheckMenuRadioItem(ID_RED, ID_BLUE, ID_RED+m_nColorIndex, MF_BYCOMMAND);

	ClientToScreen(&point);
	m_pPop->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
	CView::OnRButtonDown(nFlags, point);
}

【MFC入门】之六 MFC中创建应用程序资源之菜单资源plus快捷菜单 and 快捷键_第2张图片

加速键也就是快捷键,比如说我们平时Ctrl+C,Ctrl+V等等操作,在MFC中默认提供对加速键的支持

因此很容易就能设置加速键

首先点击Accelerator

然后出现右侧对话框,依次选择所要进行操作的ID号码,修饰符(也就是Ctrl blabla)键等类型,即可以完成操作【MFC入门】之六 MFC中创建应用程序资源之菜单资源plus快捷菜单 and 快捷键_第3张图片

你可能感兴趣的:(我的C/C++入门,MFC入门)