MFC原理与方法(二)

一、前言

时间过得好快啊,又是一个星期过去了!我又回来啦!每个星期保持写博客的习惯,及时消化上课的知识,不仅仅对我有帮助和意义,如果可以帮助到其他人那就更好了,意义就更加大了!好了,话不多说,接下来我继续给大家带来MFC原理与方法!Let’s go!
在这里插入图片描述


二、类向导的使用

类向导是一个很好的工具,我们可以通过类向导来快速添加生成消息处理函数。但是,你可能会在第一次使用类向导的时候会报错。错误如下。
在这里插入图片描述
这是因为文件的缺失导致的,只需要把C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin目录下的RcDll.Dll文件复制到C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin目录下就行了。
使用类向导的操作如下:
在这里插入图片描述


三、MFC消息管理

MFC消息管理主要包括消息发送和消息处理两个过程。对于消息发送,MFC提供了类似于API函数功能的消息发生函数。MFC消息处理的内部机制相对复杂,但用户可以不用向基于API编程那样去关心函数WndProc()。接下来,我们看看MFC是如何处理消息的。


(1).MFC消息映射机制

对于消息处理,MFC采用了消息映射机制。每个类都有一个消息映射,与该类有关的消息都出现在该类的消息映射中。类的消息映射把一组消息映射宏组成一个消息映射表,每项消息映射宏都将一个函数和一个特定的消息关联起来,在出现给定的消息时,将调用对应的函数。

在这里消息映射宏起到了一个桥梁的作用,它将特定的函数和特定的消息关联起来。我们先来看看一个消息映射表。

BEGIN_MESSAGE_MAP(CMFCView, CView)
	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CMFCView::OnFilePrintPreview)
	ON_WM_CONTEXTMENU()
	ON_MESSAGE(UserMessage,UserFun())
END_MESSAGE_MAP()

宏BEGIN_MESSAGE_MAP()表示消息映射开始宏END_MESSAGE_MAP()表示消息映射结束。有很多种消息映射宏,不同的消息映射宏由于不同的消息。我们以常见的**ON_MESSAGE(UserMessage,UserFun())**为例,ON_MESSAGE()指示哪个函数将处理用户定义的消息,UserMessage代表的是消息ID,UserFun()是消息映射到的消息处理程序函数的名称。有关于其他的消息映射宏的解释,我就不多说了,大家可以点击右边链接进行查看。消息映射宏.

还有,消息处理函数必须在类的定义中声明,类向导会在函数前加上afx_msg标识。并且,消息映射必须在类的定义最后用宏DECLARE_MESSAGE_MAP()来表明该包含作为消息处理程序的成员函数

class CMFCView : public CView
{
	......		//中间省略部分代码
protected:
// 生成的消息映射函数	afx_msg void OnFilePrintPreview();
	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
	public:
	afx_msg void UserFun();
protected:
	DECLARE_MESSAGE_MAP()
};

(2).消息处理

我们定义一个函数之后就是编写代码来处理信息,这部分的话,我们就通过实践来讲吧,我们做一个窗口动态旋转显示。
首先利用MFC应用程序向导建立一个单文档应用程序,然后点击菜单“项目”->“类向导”选项,打开“类向导”对话框,为类····(你设置的项目名称)View添加两个消息处理函数:OnTimer()和OnLButtonDown()
添加OnLButtonDown()
在这里插入图片描述
添加OnTimer():
在这里插入图片描述
然后,我们需要在OnLButtonDown()函数里添加一个定时器SetTimer(),这个计时器的作用就是每个一段时间执行一件事,因为是动态旋转并且显示文字,所以需要一个定时器来设计(时间间隔,反复出现)。

void CMFCView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	SetTimer(1,100,NULL);		//第一个参数是计时器的ID,你可以随意设置;第二个参数是时间间隔,单位为毫秒;第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数。
	CView::OnLButtonDown(nFlags, point);
}

定时器定义好后,我们在定时器函数里写入窗口动态旋转显示的代码。

void CMFCView::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CClientDC dc(this);		//用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,this指针一般指向本窗口或当前活动视图dc。
	m_dEscapement=(m_dEscapement+100)%3600;		//定义旋转角度,这里把360度分为3600度,按照比例,这里定义的是10度。
	CFont fontRotate;		//封装一个 Windows 图形设备接口 (GDI) 字体并提供用于操作字体的成员函数
	fontRotate.CreateFont(30,0,m_dEscapement,0,0,0,0,0,0,0,0,0,0,0);
	CFont *pOldFont=dc.SelectObject(&fontRotate);	//把一个对象(位图、画笔、画刷等)即fontRotate选入指定的设备描写叙述表
	CRect rClient;		//定义一个矩形区域,原本是有四个参数(x1,y1,x2,y2),这里默认为整个窗口区域。
	GetClientRect(rClient);		//用于取得指定窗口的客户区域大小,扩展一下:用于显示内容的区域叫客户区,非客户区用于显示命令按钮及窗口标题
	dc.FillSolidRect(rClient,RGB(255,255,255));//rClient为填充颜色的区域
	dc.TextOutW(rClient.right/2,rClient.bottom/2,L"欢迎大家学习MFC程序设计");
	dc.SelectObject(pOldFont);
	CView::OnTimer(nIDEvent);
}

FillSolidRect()函数中的RGB()函数接收三个 0-255 数值,一个代表红色,一个代表绿色,一个代表蓝色。例如RGB(0,255,0),红色和蓝色值都为 0,所以在该颜色中没有红色和蓝色。绿色为最大值 255。所以该颜色为绿色。(0,0,0) 为黑色(255,255,255) 为白色

关于函数CreateFont()说明(如果感觉参数太多,那就都设为0(默认)):
在这里插入图片描述
注意旋转角度m_dEscapement是需要在View类里提前定义的,不然会提示未知标识符而报错!
先在View.h文件里的View类里定义int m_dEscapement;
在这里插入图片描述
然后,在View.cpp文件里的View构造函数赋初值。
在这里插入图片描述
我们来看看效果如何:
在这里插入图片描述
大家还可以通过自己删除或者修改一些代码运行来理解每个代码所具有的含义,可以多试试,多实践实践。


四、结语

这次写博客的速度稍微慢了些,时间有点紧,主要是需要查找的资料有点多,整理起来有点费时间,但还是坚持下来了。累点没关系,这样还能锻炼锻炼自己的意志力,所以啊,做事不能半途而废,说不定咬咬牙再坚持一下就成功了呢?你说是吧。哎,说多了无用!还是得付出实践,继续努力提升自己吧,如果能够实现,哪怕再苦再累也是值得的一起加油吧!我相信我们还会再见面的!谢谢!


(声明一下:本人是大一新生,难免会出现错误,如果大家发现错误,请及时告诉我,我会及时更正,谢谢大家!)

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
### 回答1: 《Visual C++权威剖析--MFC原理机制与开发实例》是一本介绍MFC(Microsoft Foundation Classes)的原理机制以及开发实例的权威性书籍。MFC是微软公司用于开发Windows应用程序的一套类库,是在C++基础上实现的,为开发者提供了一些常用的类和函数,简化了Windows应用程序的开发过程。 这本书首先对MFC的基本原理进行了详细的介绍。它解释了MFC的框架结构,包括应用程序对象、窗口类和消息映射等重要组成部分。同时,它还深入讲解了MFC的事件处理机制、资源管理和界面设计等方面的内容,帮助读者全面理解MFC的内部机制。 除了原理的介绍,这本书还给出了一些实际的开发实例。通过这些实例,读者可以学习如何使用MFC来创建一个完整的Windows应用程序。这些实例包括了常见的功能,例如窗口创建、菜单设计、对话框布局以及文件操作等。通过实际的案例,读者可以加深对MFC的理解,并且在实践中提高自己的开发能力。 总体来说,《Visual C++权威剖析--MFC原理机制与开发实例》是一本权威且实用的书籍,适合有一定C++基础并且对Windows应用程序开发感兴趣的读者。通过学习这本书,读者可以更好地掌握MFC原理和使用技巧,提高自己的软件开发能力。 ### 回答2: 《Visual C++权威剖析--MFC原理机制与开发实例》是一本介绍MFC(Microsoft Foundation Classes)的书籍。MFC 是微软公司推出的一个非常重要的C++框架,用于在Windows操作系统上开发图形用户界面应用程序。 这本书首先解释了MFC的基本原理机制MFC建立在Windows API之上,它提供了一套面向对象的类库,用于简化Windows GUI应用程序的开发。MFC封装了很多常用的控件和功能,并且提供了很多易于使用的类和函数来处理用户输入、显示输出、消息处理、资源管理等。 书中还介绍了如何使用MFC开发实例。通过这些实例,读者可以学习如何创建一个基本的MFC应用程序,并了解如何利用界面设计器来设计用户界面。书中还提供了一些示例代码,展示了如何处理按钮点击事件、菜单点击事件、对话框等。通过这些实例,读者可以学习到MFC的具体用法和开发技巧。 此外,书中还深入探讨了MFC的高级特性和扩展机制。例如,它介绍了如何使用ActiveX 控件、数据库编程、多线程编程等。这些内容可以帮助读者更加深入地了解MFC并提高开发能力。 总的来说,《Visual C++权威剖析--MFC原理机制与开发实例》是一本详细介绍MFC的权威书籍。它适合有一定C++基础,想要学习MFC开发的读者。通过阅读这本书,读者可以系统地学习MFC原理机制和开发实例,从而提高Windows GUI应用程序的开发能力。 ### 回答3: 《Visual C++权威剖析--MFC原理机制与开发实例》是一本面向Visual C++开发者的权威指南,全面介绍MFC(Microsoft Foundation Class)的原理机制和开发实例。MFC是微软提供的一组C++类库,用于开发Windows应用程序。 该书首先介绍了MFC的发展历史以及其与Windows操作系统的关系。接着详细解析了MFC的体系结构和设计原理,包括C++面向对象编程、事件和消息处理、窗口和控件等基本概念。通过深入理解MFC原理机制,读者可以更加高效地利用MFC进行应用程序开发。 本书还提供了大量的开发实例,涵盖了MFC的各个方面,包括界面设计、数据处理、线程管理等。每个实例都提供了详细的代码和演示步骤,读者可以根据实例来学习并实践MFC的开发技术。通过实例的学习,读者可以了解MFC在实际开发中的应用场景和解决问题的方法。 此外,该书还介绍了一些高级的MFC主题,如自定义控件、打印和预览、国际化等。这些主题涉及到一些常见但较为复杂的开发问题,通过学习这些内容可以进一步提升开发者的技术水平。 总之,《Visual C++权威剖析--MFC原理机制与开发实例》是一本全面系统的MFC教程,适合有一定C++编程基础的开发者阅读。通过学习这本书,读者可以深入了解并熟练掌握MFC原理机制和开发技术,提高自己在Windows应用程序开发中的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yan.阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值