MFC单文档应用程序的基础

这篇具有很好参考价值的文章主要介绍了MFC单文档应用程序的基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、口令对话框

例题1:编写一个单文档应用程序,在视图中显示自己的姓名;单击鼠标左键,在消息框中显示

鼠标左键被按下的次数;单击鼠标右键,在消息框中显示鼠标右键被按下的次数。
操作步骤:
1、创建一个SDI应用程序(具体步骤略)。
2、在视图类中找到C***View,在其中找到 OnDraw 函数,并添加如下代码:
pDC->TextOut(200,200,"你的名字");//进行文本输出

此刻,自己的名字就被添加到程序的视图中去了。

3、为视图类CMyMessageView添加两个private属性、int类型的成员变量m_nLeft和m_nRight。在项目工作区的ClassView类视图中右击CMyMessageView,在弹出式菜单 中选择添加变量命令项出现添加成员变量对话框,在对话框中输入变量类型和变量名、选择属性。也可以采用手工方法直接在头文件中添加一般的成员变量。

MFC单文档应用程序的基础

4、在视图类CMyMessageView的构造函数(构造函数一般在最前面)中添加初始化成员变量的代码:

C***View::C***View()
{
// TODO: add construction code here
m_nLeft=0; // 初始化成员变量
m_nRight=0; 
}

 5、分别添加鼠标左击或右击的消息处理函数。按Ctrl+W键弹出MFC ClassWizard对话框,选择 消息页面。在Class nameObject IDs框选择C****View, 在消息框分别选WM_LBUTTONDOWN和WM_RBUTTONDOWN消息,单击Add Function按钮。最后单击OK按钮退出MFC ClassWizard对话框。

MFC单文档应用程序的基础

6、在消息处理函数OnLButtonDown()OnRButtonDown()中指定位置添加如下代码,以累加左击或右击鼠标的次数,并弹出一个信息框。

void CMyMessageView::OnLButtonDown (UINT nFlags,CPoint point)
{
// TODO: Add your message handler code here
m_nLeft++; // 左击鼠标次数加一
CString strOutput; // 产生用于输出的格式化字符串
strOutput.Format("鼠标左键按下的次数: %d",m_nLeft);
MessageBox(strOutput); // 弹出提示信息框
CView::OnLButtonDown(nFlags, point); 
}

此题完成。

例题2:编写一个单文档应用程序,单击键盘 X,在消息框中显示学号。

操作步骤:

1、创建一个SDI应用程序。

2、在视图类中生成一个消息:VM_CHAR(),添加VM_CHAR()处理函数,代码如下:

if (nChar == 'X') {
		MessageBox("您的学号为:**********");
	}
	CView::OnChar(nChar, nRepCnt, nFlags);

此题完成。

二、在SDI应用程序中对视图进行一定的绘制(这类题目大多是直接在OnDraw函数中添加代码)

例题1:编写一个单文档应用程序,在客户区使用不同的画笔绘制自己的姓名。  

操作步骤:

1、创建一个SDI应用程序。

2、运用自定义画笔的知识,直接在OnDraw函数中添加代码即可,代码如下:

void C实验31View::OnDraw(CDC* pDC)
{
	C实验31Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO:  在此处为本机数据添加绘制代码
	CPen *penOld, P1, P2, P3;//创建画笔指针
	P1.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));//创建画笔
	penOld = pDC->SelectObject(&P1);//选用画笔
	pDC->MoveTo(200, 200);
	pDC->LineTo(200, 300);
	pDC->SelectObject(penOld);//还原画笔
	P1.DeleteObject();//释放画笔

	P2.CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
	penOld = pDC->SelectObject(&P2);
	pDC->MoveTo(200, 250);
	pDC->LineTo(300, 250);
	pDC->SelectObject(penOld);
	P2.DeleteObject();

	P3.CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
	penOld = pDC->SelectObject(&P3);
	pDC->MoveTo(300, 200);
	pDC->LineTo(300, 300);
	pDC->SelectObject(penOld);
	P3.DeleteObject();
}

此题完成。

例题2:编写一个单文档应用程序,通过使用不同的画刷来模拟交通红绿灯。

操作步骤:

1、创建一个SDI应用程序。

2、运用自定义画刷的知识,直接在OnDraw函数中添加代码即可,代码如下:

void C实验32View::OnDraw(CDC* pDC)
{
	C实验32Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO:  在此处为本机数据添加绘制代码
	CBrush *BrushOld, BrushNew;//创建画刷
	COLORREF BrushClr[] = { RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255) };//给画刷上色
	for (int i = 0; i < 3; i++)
	{
		BrushNew.CreateSolidBrush(BrushClr[i]);//创建画刷
		BrushOld = pDC->SelectObject(&BrushNew);//选用画刷
		pDC->Ellipse(0 + 25 * i, 0 + 25* i, 500+ 25 * i, 500 + 25 * i);
		pDC->SelectObject(BrushOld);//还原画刷
		BrushNew.DeleteObject();//释放画刷
	}
}

此题完成。

三、菜单栏、状态栏、工具栏的创建和消息映射常用方法

例题1:为应用程序添加主菜单“显示”,“显示”菜单中包含“文本”和“图形”两个子菜单。 点击“文本”,在视图中显示“菜单设计程序”;点击“图形”,在视图中显示一个红色的实心矩形。

操作步骤:

1、创建一个SDI应用程序。

2、打开资源视图中的Menu文件夹,双击IDR_MAINFRAME打开菜单编辑器,在菜单栏中输入自己想要的名称,,接着可以给主菜单添加菜单项,对子菜单项进行ID的修改,文本的ID修改为ID_TEXT,图形的ID修改为ID_PICTURE.,在文本和图形之间还可以右击用一个分隔符分开。

MFC单文档应用程序的基础

3、为上述两个子菜单建立消息映射,打开类向导,为C***View类添加一个类型为int的私有数据成员m,并在构造函数中将其初始化为0,代码如下:

C实验411View::~C实验411View()
{
	m = 0;
}

 4、为“文本”和“图形”两个子菜单项添加消息处理函数。在Class Wizard对话框的Class Name栏下拉列表中选择C***View,在Object IDs中选择ID_TEXT,在Messages框中选择COMMAND,单击Add Function按钮,随后为消息处理函数添加如下代码:

void C实验411View::OnText()
{
	// TODO:  在此添加命令处理程序代码
	m = 1;
	Invalidate();
}

用同样的方法为“图形”添加消息处理函数,代码如下:

void C实验411View::OnPicture()
{
	// TODO:  在此添加命令处理程序代码
	m = 2;
	Invalidate();
}

5、在视图类C****View的OnDraw函数中添加代码,代码如下:

void C实验411View::OnDraw(CDC* pDC)
{
	C实验411Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO:  在此处为本机数据添加绘制代码
	
	if (m == 1)
	{
		CClientDC dc(this);
		dc.TextOutA(100, 100, "菜单设计程序");//直接输出文本
	}
	else if (m == 2)
	{
		CBrush *BrushOld, BrushNew;
		BrushNew.CreateSolidBrush(RGB(255, 0, 0));
		BrushOld = pDC->SelectObject(&BrushNew);
		pDC->Rectangle(10, 10, 200, 100);
		pDC->SelectObject(BrushOld);
		BrushNew.DeleteObject();
	}
}

此题完成。

例题2:为应用程序添加两个工具栏按钮,单击第一个按钮,在视图中弹出“打开”对话框;单

击第二个按钮,在消息框中显示“工具栏设计程序”。
操作步骤:
1、创建一个SDI应用程序。
2、打开资源视图中的Toolbar,双击IDR_MAINFRAME工具栏资源,对工具栏进行编辑,并将ID改为ID_OPEN和ID_SHOW。
MFC单文档应用程序的基础

3、为两个新加的按钮添加消息处理函数 。在Class Wizard对话框的Class Name栏下拉列表中选择C***View,在Object IDs中选择ID_OPEN,在Messages框中选择COMMAND,单击Add Function按钮,随后为消息处理函数添加如下代码:

void C实验422222View::OnOpen()
{
	// TODO:  在此添加命令处理程序代码
	MessageBox("打开");
}

同理,显示按钮的代码如下:

void C实验422222View::OnShow()
{
	// TODO:  在此添加命令处理程序代码
	MessageBox("工具栏设计程序");
}

此题完成。

四、掌握模态和非模态对话框的设计方法

例题1:编写一个 SDI 应用程序,执行某一菜单命令时打开一个模态对话框,在对话框中输入一

对坐标值,单击 OK 按钮后在视图中该坐标位置显示自己的姓名。
操作步骤:
1、创建一个SDI应用程序。
2、打开资源视图中的Dialog,插入一个新的dialog资源,在对话框中添加静态文本控件和编辑框控件,并修改编辑框控件的ID为ID_EDI1。
MFC单文档应用程序的基础

3、点击编辑框控件,此时会弹出一个添加类向导的对话框,随后在类名中输入名称(CCoor),基类选择CDialog,在Dialog ID下拉列表框中选择对话框资源IDD_DIALOG1。 

MFC单文档应用程序的基础

4、创建对话框成员变量。打开类向导的成员变量选项,添加与编辑框控件关联的成员变量,在Class name下拉列表中选择CCoor, 双击Control IDs列表中的编辑框IDC_EDIT1。随后添加成员变量,填写变量名为m_coor,选择Value类型,数据类型选择int型。

MFC单文档应用程序的基础

5、对话框的初始化。在CCoor类的构造函数中对控件成员变量m_coor进行初始化, 代码如下:

CCoor::~CCoor()
{
	m_coor = 0;
}

6、在C***View视图类中添加一个数据类型为int的成员变量m_vcoor,并在C***View的构造函数中将其初始化,代码如下:

C实验511View::~C实验511View()
{
	m_vcoor = 0;
}

7、使用菜单编辑器在主菜单增加一个“对话框”主菜单,并在其中添加“模态对话框”菜单项,将其ID设置为ID_MODEDLG。

8、利用Class Wizard在视图类中在C***View中为ID_MODEDLG菜单项添加COMMAND消息处理函数,代码如下:

void C实验511View::OnModedlg()
{
	// TODO:  在此添加命令处理程序代码
	CCoor dlg;
	if (dlg.DoModal() == IDOK)
	{
	m_vcoor = dlg.m_coor;
	Invalidate();
}
}

9、在C****View中的OnDraw函数中添加名字的绘制代码,代码如下:

void C实验511View::OnDraw(CDC* pDC)
{
	C实验511Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO:  在此处为本机数据添加绘制代码
	pDC->TextOut(m_vcoor, m_vcoor, "黄彬");
}

10、在视图类的****View.cpp的所有include语句之后,加入包含对话框类头文件的语句。

#include “Coor."

例题2:编写一个 SDI 应用程序,执行某一菜单命令时打开一个非模态对话框,在对话框中输入

一对坐标值,单击 OK 按钮后在视图中该坐标位置显示自己的学号。
操作步骤:
1、创建一个SDI应用程序。
2、用与模态对话框一样的方法创建对话框资源和对话框类,并在类中添加与控件相关联的成员变量。
3、在C***View视图类中添加一个类型为int的成员变量m_vcoor,用来在视图中接受并存储对话框类的成员变量m_coor的值,初始化为0。
4、定义对话框指针。在C****View视图中增加CCoor指针类型的公有成员变量m_pDlg,并初始化为NULL。
MFC单文档应用程序的基础
5、在****iew.h文件的头部预编译命令之前增加类的前向声明语句,代码如下:
class CCoor;
class C****Doc;
类的前向声明语句的作用为:由于在 C***View 类中有一个 CCoor 类的指针和一个返回值C***Doc 指针的 GetDocument() 函数,因此必须保证CCoor 类和 C***Doc 类的声明出现在 C***View 之前,否则会产生编译错误。
6、增加对话框类成员变量接收视图指针。在 CCoor 类中增加 C***View 指针类型的公有成员变量m_pParent,并在CCoor类的构造函数中添加该变量初始化语句,代码和操作如下:
MFC单文档应用程序的基础
m_pParent=(C***View*)m_pParent;
这样就可以在 CCoor 类的其他函数中利用该指针向主窗口发送消息。
7、 Coor.h 文件的头部预编译命令之前增加类的前向声明语句,代码如下:
class C***View;

8、在***View.cpp文件的头部所有的include语句之后添加对话框类的头文件,代码如下:

#include “Coor.h”

9、增加菜单项。使用菜单编辑器在主菜单中增加一个【对话框】菜单项,并在其中添加【非模态对话框】菜单项,其IDID_NOMODEDLG。利用ClassWizard在视图类中为ID_NOMODEDLG菜单项添加COMMAND消息的处理函数,在函数中添加如下代码:

void C***View::OnNomodedlg()
{
// TODO: Add your command handler code here
if(m_pDlg)
m_pDlg->SetActiveWindow();//激活非模态对话框
else
{
//创建非模态对话框
m_pDlg=new CCoor(this);//创建对话框对象
m_pDlg->m_pParent=this;//获取主窗口视图指针
m_pDlg->Create(IDD_DIALOG1,this);//创建对话框
m_pDlg->ShowWindow(SW_SHOW);//显示对话框
} }

10、在Coor.cpp文件的头部所有的include语句之后添加视图类的头文件,代码如下:

#include “***View.h”

11、利用ClassWizard在CCoor类中为对话框中的确定和取消按钮添加处理函数,代码和操作如下:

MFC单文档应用程序的基础

void CCoor::OnOK()
 {
UpdateData(true); //获取用户数据
CClientDC dc(m_pParent);//创建指向主窗口视图的CClientDC对象
dc.TextOut(m_coor,m_coor,"*********");//输入学号 
}
void CCoor::OnCancel()
 {
if(m_pParent!=NULL) {
m_pParent->m_pDlg=NULL;//表明对话框对象已不存在了
DestroyWindow();//删除对话框窗口 } 
}

12、利用ClassWizard在对话框类CCoor中添加PostNcDestroy消息,并添加如下代码:

void CCoor::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
CDialog::PostNcDestroy();
delete this;//删除对话框对象
}

此题完成。

以上内容是关于MFC单文档应用程序的一些基础知识,仅供参考!!!文章来源地址https://www.toymoban.com/news/detail-433141.html

到了这里,关于MFC单文档应用程序的基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MFC 单文档弹出对话框 标题图标

    创建MFC时 1、应用程序类型:以单个文档-项目样式选择MFC标准 菜单关联对话框  2、菜单关联-资源视图中的Menu-IDR_MAINFRAME(此处看想关联谁,如果是想关联一个对话框,那就先创建一个对话框再进行关联,如果是想关联一个类,可以看函数在哪个类下面从而进行关联) a.关联

    2024年02月06日
    浏览(30)
  • 开发多点触控MFC应用程序

    当下计算机变得越来越智能化,越来越无所不能,触摸屏的普及只是时间问题了。 虽然鼠标和键盘不会很快就离开人们的视野,毕竟人们使用鼠标跟键盘已经成为一种习惯,但是处理信息或者说操作计算机的其他方法也层出不穷——比如触控技术。从硬件技术的角度来讲,触

    2024年02月10日
    浏览(29)
  • mfc140u.dll文丢失导致应用程序无法正常,有哪些解决办法

    mfc140u.dll是Microsoft Foundation Classes(MFC)的一个重要组件,它提供了许多用于开发Windows应用程序的功能和工具。然而,当系统或应用程序升级、恶意软件感染或文件损坏以及用户错误操作等情况发生时,mfc140u.dll文件可能会丢失。这个问题可能会导致应用程序无法正常运行,甚

    2024年02月22日
    浏览(35)
  • 使用LabVIEW打开默认应用程序中的文档(PDF,Word,Excel,Html)

    问题详情 我想让我的LabVIEW VI使用默认应用程序打开硬盘上的文档。如何实现? 解决方案 有一个名为 \\\"Open a Document on Disk.vi\\\" 的 VI,它可以在操作系统注册的默认应用程序中打开任何文档(Word、Excel、HTML 等)。该 VI 不在面板上,而是位于 LabVIEWvi.libPlatformbrowser.llbOpen a Doc

    2024年03月12日
    浏览(42)
  • 解锁高质量文档转换:通过Java应用程序免费将PDF转换为XPS

    在当今数字时代,文档转换已经成为我们日常生活中不可或缺的一部分。然而,不是所有的文件格式都是平等无差的,在与他人共享文档时可能会遇到兼容性问题。这就是我们需要进行文件格式转换的原因,而将PDF转换为XPS是一种受欢迎的转换选择。如果你正在寻找一种使用

    2024年02月11日
    浏览(39)
  • C#程序设计之windows应用程序设计基础

    题目描述 设计一个“简单通讯录”程序,在窗体上建立一个下拉式列表框、两个文本框和两个标签,实现以下功能:当用户在下拉式列表框中选择一个学生姓名后,在“学生姓名”、“地址”两个文本框中分别显示出对应的学生和地址。 代码 窗体代码 运行结果 题目描述 设

    2024年02月06日
    浏览(35)
  • Windows应用程序基础(详细,简单易懂)

    大家好!这是我的 第一篇博客 ,首先来个自我介绍吧!我是来自一所双非院校的大一新生,所学的专业是 计算机科学与技术 ,纯纯小白一枚。 那我为什么要写博客呢 ?为什么?说实话,我一开始一直都没有写博客的想法,我都是看别人的博客,直到有一天,我的好同学

    2024年02月04日
    浏览(33)
  • 3、基础入门——抓包&封包&协议&APP&小程序&PC应用&web应用

    知识点 APP小程序PC抓包HTTP/S数据—— Charles、Fiddler、Burpsuit ; 程序进程网络接口其他协议抓包—— Wireshark、科来网络分析系统、TCPDump(linux) ; 通讯类应用封包分析发送接收—— WPE四件套封包、科来网络分析系统 。 模拟器: 逍遥模拟器、雷电模拟器 。 注意:雷电模拟器4.

    2024年02月01日
    浏览(38)
  • 【小迪安全】Day03基础入门-抓包&封包&协议&APP&小程序&PC应用&WEB应用

    有些应用是看不到的 手机app、微信小程序、PC应用 Windows、Linux 2.1.1抓包封包工具 Fiddler: 是一个 http 协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断点,查看所有的“进出”Fiddler 的数据(指 cookie,html,js,css 等文件)。 Fiddler 要比其他的

    2024年02月03日
    浏览(36)
  • 在开源的基础上构建 AI 需要一种全新的应用程序安全方法

    关注公众号: 网络研究观 获取更多信息 人工智能已经从科幻小说中涌现出来,进入了我们的日常生活。 在开源软件(OSS)模型的支持下,人工智能革命正在加速。这些模型是专为开发 AI 而制作的复杂开源代码包,使组织能够高效、大规模地部署 AI 模型。 虽然大多数组织

    2024年04月27日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包