MFC入门--对话框实例
建立一个简单地画直线的MFC单文档对话框并实现在对话框里面画直线

建立一个简单地画直线的MFC单文档对话框并实现在对话框里面画直线在MFC单文档应用程序中创建一个对话框窗口并实现在对话框内画直线的过程如下:1.创建MFC单文档应用程序- 在 Visual Studio 中创建一个新的 MFC 单文档应用程序项目。
选择"对话框"作为应用程序类型。
-设置应用程序名称和位置,然后单击"完成"创建项目。
2.设置对话框窗口- 在对话框中添加一个自定义控件。
选择"工具箱"中的"Picture Control"控件,拖动到对话框上。
- 选中图片控件,右键单击并选择"属性"。
更改 ID 为IDC_DRAW_AREA,并将 Border 属性设置为 None。
-拖动控件大小以适应窗口布局,并保存对话框。
3.修改对话框类- 打开对话框类的头文件(例如 CMyDialog.h),添加一个标志变量来跟踪鼠标左键按下的状态:```cppBOOL m_bDrawing;```- 在 CMyDialog.cpp 文件中添加以下消息映射函数:```cppBEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)ON_WM_LBUTTONDOWNON_WM_LBUTTONUPON_WM_MOUSEMOVEEND_MESSAGE_MAP```-在头文件中声明回调函数```cppafx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnMouseMove(UINT nFlags, CPoint point);```4.实现画线功能- 在 CMyDialog.cpp 文件中实现 OnLButtonDown 函数,该函数用于开始画线:```cppvoid CMyDialog::OnLButtonDown(UINT nFlags, CPoint point)m_bDrawing = TRUE;CClientDC dc(this);dc.MoveTo(point);}```- 实现 OnLButtonUp 函数,该函数用于结束画线:```cppvoid CMyDialog::OnLButtonUp(UINT nFlags, CPoint point) m_bDrawing = FALSE;}```- 实现 OnMouseMove 函数,该函数用于动态绘制线段:```cppvoid CMyDialog::OnMouseMove(UINT nFlags, CPoint point) if (m_bDrawing)CClientDC dc(this);dc.LineTo(point);}}5.更新对话框消息映射```cppafx_msg void OnPaint(;afx_msg BOOL OnEraseBkgnd(CDC* pDC);```6重写重绘和擦除背景函数- 在 CMyDialog.cpp 文件中添加以下代码来重绘对话框:```cppvoid CMyDialog::OnPaintCPaintDC dc(this); // 用于在对话框上绘制//TODO:在此处添加您的消息处理程序代码}```-添加以下代码来防止对话框背景擦除:```cppBOOL CMyDialog::OnEraseBkgnd(CDC* pDC)return TRUE;}7.运行程序-单击“开始调试”(F5)以运行应用程序。
mfc创建对话框的基本步骤

mfc创建对话框的基本步骤创建MFC对话框的步骤如下:1. 新建MFC项目。
在创建项目时,选择visual c++选项卡,然后选择MFC。
在右侧选择MFC应用程序,并在下方填写项目名称。
2. 选择应用程序类型。
在创建项目的过程中,你需要选择应用程序类型。
你可以选择单文档或基于对话框的应用程序类型。
以基于对话框的应用程序为例。
3. 添加对话框。
右键点击“Resource Files”,然后选择“Add Resource”。
在弹出的对话框中,选择“Dialog”,然后点击“New”。
这将在资源视图中创建一个新的对话框。
4. 给新的对话框重写ID。
右键点击新创建的对话框,选择“属性”,在属性页中修改IDD为所需的ID,例如IDD_EXEC。
5. 为模态对话框添加类。
右键点击选中的对话框,然后选择“添加类”。
在弹出的对话框中,输入类的名称,然后点击“确定”。
这将为对话框创建一个新的类。
6. 添加控件。
在对话框编辑器中,你可以直接从工具箱里拖动控件到对话框上。
例如,你可以拖动按钮控件到对话框上。
7. 添加事件处理程序。
对于每个添加的控件,你都可以为其添加事件处理程序。
你可以通过右键点击控件,然后选择“添加事件处理程序”来添加事件处理程序。
在弹出的对话框中,选择相应的事件(例如单击事件),然后在右侧的代码编辑器中编写事件处理程序。
8. 运行对话框。
在完成对话框的编辑后,你可以运行对话框来测试其功能。
你可以通过点击工具栏上的“启动”按钮或按F5键来启动应用程序。
这些步骤可以帮助你创建一个基本的MFC对话框。
当然,具体的实现方式还需要根据你的需求进行调整和修改。
mfc入门单文档MFC应用程序实例-图文

mfc入门单文档MFC应用程序实例-图文14单文档MFC应用程序实例
对话框应用程序使用简洁高教,所以被广泛地使用。
对话框在默认情
况下缺少状态栏、f具栏等界面元素,不能算作是。
完整”的Wwbn应用
程序。
RIUt/Clllr面,可以看作是“标准”的Windown应用程序再面。
1.41技术要点
’MFC的单文档应用程序结构的一大特点是教据和界面分N,在单文
档应用程序中,程序中数据的保存、加藏和处理等功糖由CDocumtI完戚,而数据的显示由cV.州来完成a这种结构又被称为“文彬视田”结构,
在这种结构下.很容器做刊数据和界面的一对多关联。
‘MFC中提供T众多派生于CView的弦生类,每个类都翻IT同的功能,在新建项目时,可以根据蜜际需謇选样不同的根生类。
142实例步骤奉实棚将以CFonnView为例,演示在ViualC++60中新建单文档项目
的鼻体方法。
实例步骤如下所示。
(I)打开ViualC++6.0.单击。
File”/“N州‘菜单。
在弹出对话摧
中选择项目类撼为“MFCAppWiurd(e某e)1.在项目名称文本框中输
A“NffcSdi”,单击“OK-MHE入向导界面。
(2)在向导的Skpl中,选择“Sinlledoeummt“,其余琏项用默认值(参麒1:919)。
单击“Ne某t”按钮进人下一步。
(”向导的Step2.用于设置是否在程序中自动加A对散据库的支持,此步鼻对默认设置不做改动(参照图iIO),直接单击“Ne某r按钮进
AT一步。
MFC对话框与对话框之间的参数传递实例

MFC对话框与对话框之间的参数传递实例在MFC中,对话框(dialog)是一种用户界面的组件,用于与用户进行交互。
对话框通常包含各种控件,如按钮、文本框、列表框等,用户可以通过这些控件输入信息或执行操作。
有时候我们需要在不同的对话框之间传递参数,以实现数据共享或在对话框之间传递信息。
下面通过一个实例来说明如何在MFC中实现对话框之间的参数传递。
以一个学生信息管理系统为例,假设我们有两个对话框,一个用于输入学生基本信息(对话框A),一个用于显示学生信息(对话框B)。
我们希望在对话框A中输入学生信息后,能够在对话框B中显示该学生的信息。
在对话框A的头文件中,定义一个结构体用于保存学生信息:```struct StudentInfoCString name;int age;CString gender;};```然后在对话框A的代码中,添加一个成员变量用于保存学生信息:```StudentInfo m_studentInfo;``````m_ = "";m_studentInfo.age = 0;m_studentInfo.gender = "";GetDlgItem(IDC_EDIT_NAME)->SetWindowText(m_);GetDlgItem(IDC_EDIT_AGE)->SetWindowText(m_studentInfo.age);GetDlgItem(IDC_EDIT_GENDER)->SetWindowText(m_studentInfo.gender);```在对话框A的代码中,添加一个按钮的响应函数OnOK(,在此函数中将学生信息传递给对话框B:```void CDialogA::OnOKGetDlgItem(IDC_EDIT_NAME)->GetWindowText(m_);GetDlgItem(IDC_EDIT_AGE)->GetWindowText(m_studentInfo.age);GetDlgItem(IDC_EDIT_GENDER)->GetWindowText(m_studentInfo.gender);CDialogB dlgB;dlgB.SetStudentInfo(m_studentInfo); // 将学生信息传递给对话框BdlgB.DoModal(; // 打开对话框BCDialog::OnOK(;```在对话框B的头文件中,添加一个成员变量用于保存学生信息:```StudentInfo m_studentInfo;```在对话框B的头文件中,添加一个函数用于接收学生信息```void CDialogA::SetStudentInfo(const StudentInfo& studentInfo) m_studentInfo = studentInfo;GetDlgItem(IDC_STATIC_NAME)->SetWindowText(m_);GetDlgItem(IDC_STATIC_AGE)->SetWindowText(m_studentInfo.age);GetDlgItem(IDC_STATIC_GENDER)->SetWindowText(m_studentInfo.gender);```通过以上代码,我们实现了在对话框A中输入学生信息后,在对话框B中显示该学生的信息。
mfc对话框基础要点

第五章对话框对话框是一种用户界面,它的主要功能是输出信息和接收用户的输入。
对话框与控件是密不可分的,在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互。
一个典型的对话框例子是选择了File-Open命令后弹出的文件对话框。
5.1对话框和控件的基本概念5.1.1对话框的基本概念对话框(Dialog)实际上是一个窗口。
在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类。
对话框分为模态对话框和非模态对话框两种。
大部分读者都会有这样的经历,当你通过File-Open命令打开一个文件对话框后,再用鼠标去选择菜单将只会发出嘟嘟声,这是因为文件对话框是一个模态对话框。
模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象收不到输入信息。
我们平时所遇到的大部分对话框都是模态对话框。
非模态对话框的典型例子是Windows95提供的写字板程序中的搜索对话框,搜索对话框不垄断用户的输入,打开搜索对话框后,仍可与其它用户界面对象进行交互,用户可以一边搜索,一边修改文章,这样就大大方便了使用。
本节主要介绍模态对话框,在第四节将介绍非模态对话框。
从MFC编程的角度来看,一个对话框由两部分组成:1.对话框模板资源。
对话框模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框。
2.对话框类。
对话框类用来实现对话框的功能,由于对话框行使的功能各不相同,因此一般需要从CDialog类派生一个新类,以完成特定的功能。
5.1.2控件的基本概念图5.1对话框中的控件控件(Control)是独立的小部件,在对话框与用户的交互过程中,控件担任着主要角色。
控件的种类较多,图5.1显示了对话框中的一些基本的控件。
MFC的控件类封装了控件的功能,表5.1介绍了一些常用的控件及其对应的控件类。
表5.1控件实际上都是窗口,所有的控件类都是CWnd类的派生类。
打开文件的MFC对话框应用程序

打开文件操作步骤:1.新建MFC AppWizard [exe] 基本对话框,项目名mfc2.删除对话框模板中原有的“确定”按钮和内容为“TODO: 在这里设置对话控制。
”的StaticText控件。
添加一个按钮(BUTTON),鼠标右键单击该控件,在弹出的下拉菜单中选“属性”,打开属性对话框,将控件ID改为“IDOK”;添加一个静态文本(STATIC),将控件ID改为“IDC_MSG”;3.添加一个编辑框控件,调整适当大小,鼠标右键单击该控件边框,在弹出的下拉菜单中打开属性对话框。
将编辑框控件ID改为“IDC_FILE”。
4. 添加成员变量单击View(查看)>ClassWizard(建立类向导)菜单进入ClassWizard,打开Member Variables选项卡,选中编辑框控件IDC_FILE,单击“Add Variable”按钮,设置对应的变量m_file;选中静态文本控件IDC_MSG,单击“Add Variable”按钮,设置对应的变量m_msg;5. 添加消息映射在ClassWizard对话框中打开Messages Maps选项卡,在Object Ids中选择IDOK,在Messages中单击BN_CLIKED,然后单击按钮“Add Function”,在弹出对话框中单击OK按钮:在Member functions中出现消息映射成员函数OnOK。
6. 添加代码在ClassWizard对话框中的Messages Maps选项卡的Member functions选中OnOK,然后单击Edit Code按钮在OnOK函数体中添加代码:char *fname;ifstream infile;UpdateData(TRUE);fname=(LPSTR)(LPCTSTR)m_file;infile.open(fname,ios::in);float x,s=0;int i=0;if(!infile)m_msg="文件不存在!";else{while(!infile.eof()){infile>>x; //读取数据,每行一个数s+=x;i++;}m_msg.Format("%f",s/i); //输出平均值}UpdateData(FALSE);7. 在项目文件夹里用记事本建立一个文本文件,如a.txt,在文件里输入若干数据(实数),每行一个数,保存后关闭该文件。
MFC简单的登录对话框

登录对话框我们利用MFC编写一个简单的登录对话框。
主窗体是单文档界面。
程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。
1、开打VC++6.0。
点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。
2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。
3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。
如果没有问题,我们继续。
点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。
4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。
输入用户名:。
然后回车同样在下面的第二个静态文本框的属性标题改为:输入密码:。
然后回车。
6、在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。
同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD7、在对话框上的任何空白的地方右键单击,点击建立类向导。
然后弹出选择建立Create a new class,点击OK。
这是为这个对话框创建一个新的类。
在Name中,为该对话框类取个名字:CDlg_login。
下面的Base class以及Dialog ID不要随便改动。
然后点击OK。
这样新的类CDlg_login就与本对话框建立起了联系。
8、点击OK后,我们并没有退出建立类向导。
点击member variables。
9、左键双击IDC_EDIT_NAME(或者单击后,点击右边的add variables),为IDC_EDIT_NAME增加一个对应在类中的名字:m_login_name。
其他地方不要改动。
MFC对话框与对话框之间的参数传递实例

MFC对话框与对话框之间的参数传递实例在MFC中,对话框是一种常用的窗口类型,用于显示和接收用户输入。
对话框之间的参数传递是实现不同对话框之间数据交互的一种重要方法。
本文将通过一个实例来演示如何在MFC对话框之间进行参数传递。
首先,我们需要在对话框A的头文件中添加一个成员变量来保存需要传递的文本。
在对话框A的类声明中添加如下代码:```cppCString m_strText;``````cppUpdateData( FALSE ); // 将对话框中的控件值与成员变量关联``````cppCDialogB dlgB; // 创建对话框B的实例dlgB.m_strText = m_strText; // 将对话框A的成员变量值传递给对话框B的成员变量dlgB.DoModal(; // 显示对话框B```注意,我们在创建对话框B的实例之后,直接将对话框A的成员变量值赋给对话框B的成员变量。
这样,当对话框B显示时,对话框B的成员变量就会包含对话框A传递过来的值。
现在,我们来处理对话框B。
同样地,在对话框B的头文件中添加一个成员变量来保存从对话框A传递过来的文本。
在对话框B的类声明中添加如下代码:```cppCString m_strText;```然后,在对话框B的OnInitDialog(函数中,将文本框与成员变量关联起来,并设置文本框的值为成员变量的值。
在OnInitDialog(函数中添加如下代码:```cppUpdateData( FALSE ); // 将对话框中的控件值与成员变量关联```最后,在对话框B的.cpp文件中,我们可以使用m_strText的值进行一些处理。
比如,在OnOK(函数中,我们可以将m_strText的值输出到调试窗口。
在OnOK(函数中添加如下代码:```cppUpdateData( TRUE ); // 将文本框中的文本值与成员变量关联//将文本值输出到调试窗口TRACE( _T( "传递的文本值为:%s\n" ), m_strText );```现在,当我们在对话框A中输入一些文本,然后点击按钮,对话框B 将被创建并显示出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC入门--对话框实例
实例1
目的:设计一个基于对话框的程序,界面上有一个“延迟6秒”的按钮,点击后,程序主窗口在6秒内无法拖动。
关键点:MFC程序入门、线程与进程、消息机制
操作过程:
1-新建项目,选择MFC AppWizard (exe),命名项目为“SingleThread”。
如图:
(注:关于各项目类型的说明,请参见文件“VC功能简介.ppt”的第8页)
2-选择“Dialog based”,点击Finish,仔细观察项目信息。
3-在资源视图内对主对话框添加静态文本:“我的第一个MFC程序”和“演示耗时的单线程”,继而添加一个按钮,按钮现实文字“延迟6秒”,如图:
4-在资源视图内,双击“延时6秒”按钮,为其添加BN_CLICKED消息(按下按钮时发出的消息)的响应函数OnButton1()。
在其中添加代码:
Sleep(6000);
请根据老师对程序的讲解,思考如下问题:
1.类的继承:三个的类(CAboutDlg、CSingleThreadApp、CStringThreadDlg)
的继承轨迹是怎样的?
2.程序的入口在哪里?有没有类似Win32 Application中对于WM_CREATE的
处理?
3.三个类的对象的关系。
4.消息如何映射?
设计一个基于对话框的程序,开始运行后,每两秒弹出一个消息框。
关键点:MFC程序入门;定时器的建立、使用与删除;消息映射
操作过程:
1-新建项目,选择MFC AppWizard (exe),命名项目为“Test”。
2-选择“Dialog based”。
3-在BOOL CTestDlg::OnInitDialog()函数中添加
SetTimer(1,2000,NULL); // 启动定时器
4-通过ClassWizard给对话框添加WM_DESTROY的响应函数。
如图:
在其中添加代码:
KillTimer(1);
5-通过ClassWizard给对话框添加WM_TIMER的响应函数。
在其中添加代码: if(nIDEvent==1)
{
::MessageBox(0,"嘿嘿","你点啊!!",MB_OK);
}
请根据老师对程序的讲解,思考如下问题:
1.MFC下与Win32 Application下定时器的使用有什么不同,又有什么相同之
处?
设计一个基于对话框的程序,通过点击Button,将数据反映到编辑控件上。
关键点:如何将后台数据反映到界面上。
操作过程:
1-新建项目,选择MFC AppWizard (exe),命名项目为“Test”。
2-选择“Dialog based”。
3-在对话框上添加编辑框和按钮。
4-选择菜单中View ClassWizard,查看Member Variables。
为编辑框添加控件变量。
5-双击“Button”按钮,添加消息相应代码如下:
m_Edit1.SetWindowText("你干嘛戳我啊!!");
请根据老师对程序的讲解,思考如下问题:
1.对象m_Edit1的类是什么?其又从何处继承而来?
2.SetWindowText是怎样的一个函数,如何发现其为公有还是私有?
设计一个具有编辑框和“Next”按钮的对话框程序,用户可在编辑框中输入任何文本。
点击“Next”按钮后,弹出一个新的对话框,新对话框上可显示用户在编辑框中输入的文本。
关键点:如何在项目中添加新的类;
如何利用UpdateData()函数来沟通界面与后台数据。
操作过程:
1.创建基于对话框的工程文件和新对话框资源
用Application Wizard创建一个对话框工程文件MyDlg,然后添加对话框资源。
新对话框命名为CNext类。
2.在主对话框上添加编辑框和“Next”按钮。
通过ClassWizard给编辑框添加变量,变量类型是CString,变量名为m_text。
在CNext对话框上添加一编辑框。
通过ClassWizard给该编辑框添加变量,变量类型是CString,变量名为m_text2。
3.在主对话框cpp程序中添加CNext类的头文件。
4.通过ClassWizard给“Next”按钮添加单击消息的响应函数。
在其中添加代码:UpdateData(TRUE);// MFC将数据从控件传递到关联的成员变量
CNext dlg;
dlg.m_text2=m_text;
dlg.DoModal();//DoModal()建立对话框窗口并显示对话框
UpdateData(FALSE);// MFC将数据从成员变量传递到关联的控件
请根据老师对程序的讲解,思考如下问题:
1.课程中,讨论过几种MFC下实现“逻辑/界面”联系的方式?(可以以编辑
框为例)
2.你是否学过VB、Java或者C#,在这些语言下,又是如何实现建立“逻辑/
界面”之间的联系的?。