文档库 最新最全的文档下载
当前位置:文档库 › MFC简单的登录对话框

MFC简单的登录对话框

MFC简单的登录对话框
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_PWD

7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出

选择建立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。其他地方不要改动。

点击OK。同样也对IDC_EDIT_PWD也取一个名字:m_login_pwd。

10、点击确定。这样我们就建立好了登录对话框以及其对应的类CDlg_login。我们在ClassView里面可以看到我们新加入类CDlg_login。

11、我们注意到右边的对话框的标题栏上依然还是Dialog,我们可以在对话框空白的地方单击右键,点击属性,在标题中输入:请登录。其他地方不要改动。

12、这个时候如果编译运行的话,该对话框并不会自动弹出来。我们要让程序开始运行的时候自动弹出登录对话框。点击右边的FileView,点击source files,双击MainFrm.cpp。这样在右边就打开了该文件。找到CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct),这是窗体框架创建函数。在该函数的后面(在return 0 ;的前面)加入语句(注意大小写):CDlg_login dlg;//生成一个登录对话框对象

dlg.DoModal();//让对话框对象以有模式形式显示出来

这个时候编译肯定会出错,我们要在MainFrm.cpp文件的前面添加:#include "dlg_login.h"。编译后错误消失。运行结果如下。

13、在运行过程中,点击OK后,主窗体会显示出来,我们并没有在用户名以及密码框中输入。下面我们要求输入正确的用户名和密码,主窗体才能显示出来。

14、点击左边的ResourceView,双击Dialog中的IDD_DIALOG1,然后双击右边的OK按钮,

要求增加一个成员函数,点击OK即可。我们将在下面的截图所在的void CDlg_login::OnOK()函数中进行编程。

15、在void CDlg_login::OnOK()函加入如下代码:

void CDlg_login::OnOK()

{

// TODO: Add extra validation here

this->UpdateData(true);

if(this->m_login_name=="math" && this->m_login_pwd=="1234")

CDialog::OnOK();

else

MessageBox("登录有误");

}

编译运行即可实现我们的要求了。

16、等等,我们发现输入密码的时候是明码,不是星号显示的。我们还要在登录对话框的密码文本编辑框的属性中更改。在登录对话框,右键点击密码文本框,点击属性,点击style,

选中password回车即可。

17、本程序还有很多弊端,比如,关闭登录对话框也可以进行主窗体,点击cancel也可以进入,用户名和密码不能更改,这要求和数据库联系起来。大家可以思考一下,怎么该进。

全文完毕。

MFC知识点(自己整理的,只供参考)

知识点:不是很全面,只供参考 第一章 Windows应用程序使用的界面是由各种图形元素组成的图形界面(GUI)。 Windows提供了大量预定义的用C语言编写的函数,这些函数就叫做API(Application Programming Interface)函数。 在Windows应用程序中,存在着许多与DOS应用程序不同的复杂对象,例如窗口、按钮、滚动条等等。Windows把为这种复杂对象所定义的标识叫做句柄。 常用的句柄类型:HWND 窗口句柄,HDC 图形设备环境句柄,HINSTANCE 当前程序应用实例句柄,HBITMAP 位图句柄,HICON 图标句柄,HCURSOR 光标句柄,HBRUSH 画刷句柄,HPEN 画笔句柄,HFONT 字体句柄,HMENU 菜单句柄,HFILE 文件句柄 事件的描述是一个消息 消息的结构: typedef struct tagMSG { HWND hwnd; //产生消息的窗口句柄 UINT message;//消息的标识码 WPARAM wParam;//消息的附加信息1 LPARAM lParam;//消息的附加信息2 DWORD time; //消息进入消息队列的时刻 POINT pt; //表示发送该消息时鼠标的位置 }MSG; 消息循环: while(GetMessage(&msg,NULL,NULL,NULL))//系统处理了消息后返回 { TranslateMessage(&msg);//把键盘消息翻译成字符消息 DispatchMessage(&msg);//把消息派发给Windows系统 创建窗口的三个步骤: 注册窗口类: RegisterClass(&wc); 创建窗口: hwnd=CreateWindow( lpszClassName, "Windows", WS_OVERLAPPEDWINDOW, 120,50,800,600, NULL, NULL, hInstance, NULL); 显示窗口: ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); 大题:用函数封装Windows程序(P16) 第二章

VC 中自己创建对话框方法

VC中自己创建对话框的方法 这里讲在VC中不需要打开MFC工程,通过代码直接创建一个对话框,我看这个对话框比MFC的漂亮多了,而且要写会代码不需要研究MFC就直接开发新的工程. 先打开VC++ 6.0 版本, 第一步:创建一个工程名为:Main Dialog 的Win32 Application。创建过程如下: 打开File菜单中New,选自Win32 Application,工程名为:Main Dialog,点击OK,再选自A simple Win32 application。点击Finish,再点击OK.(见图1) 第二步:创建资源脚本。再打开File菜单中New,选自File选项的Resource Script(就是资源脚本),文件名为Dialog,点击OK。

(见图2) 第三步:插入对话框。刚才建立的脚本Dialog显示为Dialog.rc,就在Dialog.rc上面点击鼠标右键Insert(插入)Resource中选自插入Dialog(对话框),点击New(新建),这样对话框插入完毕。(见图3)

第四步:添加resource.h。我们把第四步插入的对话框ID改为IDD_MAIN ,在FileView中有个Header Files的文件,上面点击右键,选择Add Files to Folder...(添加文件到目录),弹出一个工程目录窗口,中间找到resource.h,然后OK了(添加)。(见图4)

第五步:复制代码。双击Main Dialog.cpp,我们写代码的位置出现了(见图5),那里有几行代码,把它们全部删掉,下面已经准备好的代码全部复制到那里,编译,执行,您的是否成功了? #include "stdafx.h" #include "resource.h" #include BOOL WINAPI Main_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); BOOL Main_OnInitDialog(HWND hwnd,HWND hwndFocus,LPARAM lParam); void Main_OnCommand(HWND hwnd,int id,HWND hwndCtl,

MFC对话框向主窗体传递消息机制

对话框向主窗体传递消息,在视图中显示 现举例说明对话框向主窗体传递消息,以及主窗体响应消息的过程。我们拿单文档来说明,我们要实现下列功能:通过对话框,在文本框中输入字符串,在视图中显示刚才输入的字符串。 1、在应用程序向导中选择单个文档,然后完成。我这里的项目名称为mybook 2、在资源视图中,插入一对话框,对话框名称为dlg_wzm。 3、在刚才生成的对话框中插入一文本框,设置好相应的类和变量。为确认按钮生成响应函数。同时在mybook.cpp的BOOL CMyBookApp::InitInstance()函数中让该对话框启动,也就是加入CDlg_wzm dlg; dlg.DoModal();两行程序,当然在前面的要加入#include "dlg_wzm.h"。(详细过程略) 4、下面重点在于点击该对话框的确认按钮向主窗体发送消息。要现定义一个消息名称。

在stdafx.h文件中加入一行: #define WM_MYMESSAGE WM_USER+100 5、在CMainFrame的pulic申明中加入一变量CString wzmstr。目的是为了保存对话框中的字符串的值。在对话框的Onok()函数中: void CDlg_wzm::OnOK() { // TODO: Add extra validation here this->UpdateData(true); CMainFrame* pWnd=(CMainFrame*)AfxGetMainWnd(); //得到父窗体的指针 pWnd->wzmstr=this->m_input_edit; ASSERT(pWnd!=NULL); ::SendMessage(pWnd->GetSafeHwnd(), WM_MYMESSAGE,0,0); //发送消息 //注意WM_MYMESSAGE就是我们前面定义的消息。 //CDialog::OnOK(); } 6、下面我们看看主窗体怎么接受消息。我们要在主窗体中设置消息映射。 在mainfrm.h的protected声明中: afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); 在mainfrm.cpp文件中, BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code ! ON_WM_CREATE() ON_MESSAGE(WM_MYMESSAGE,OnMyMessage) //这里是我们加入的。 //}}AFX_MSG_MAP END_MESSAGE_MAP() 然后在mainfrm.cpp的文件最下面加入一个函数: void CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) { CView *pView=this->GetActiveView(); //得到视图指针 if(pView)

用VC++MFC做文本编辑器(单文档模式)

用VC++MFC做文本编辑器(单文档模式)(2007-7-6 17:06:00) 原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下: 1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。 2,在系统自动生成的CTextview_1Doc类里面增加一个控件,用于文本文档的暂时存放: class CTextview_1Doc : public CDocument { ...... public: CStringArray m_strContent; } 然后在CTextview_1Doc类的Serialize函数里面增加打开、保存文本文件的程序: void CTextview_1Doc::Serialize(CArchive& ar) { CString str; if (ar.IsStoring()) { // TODO: add storing code here int nLines = (int)m_strContent.GetSize(); for ( int i=0; i

MFC入门--对话框实例

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下定时器的使用有什么不同,又有什么相同之 处?

MFC对话框程序中的各组件常用方法

MFC对话框程序中的各组件常用方法: Static Text: 将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改Caption属性: GetDlgItem(IDC_XX)->SetWindowText(L"dsgdhfgdffd"); 设置字体: CFont *pFont = new CFont; pFont->CreatePointFont(120,_T("华文行楷")); GetDlgItem(IDC_XX)->SetFont(pFont); Edit Control: 设置文本: SetDlgItemText(IDC_XX,L"iuewurebfdjf"); 获取所有输入: 建立类向导创建一个成员变量(假设是shuru1,shuru2……)类型选value,变量类型任选。 UpdateData(true); GetDlgItem(IDC_XX)->SetWindowText(shuru1); 第一句更新所有建立了变量的对话框组件,获取输入的值。第二句将前面的IDC_XX的静态文本内容改为shuru1输入的内容。 若类型选用control: 1.设置只读属性: shuru1.SetReadOnly(true); 2.判断edit中光标状态并得到选中内容(richedit同样适用) int nStart, nEnd; CString strTemp; shuru1.GetSel(nStart, nEnd); if(nStart == nEnd) { strTemp.Format(_T(" 光标在%d" ), nStart); AfxMessageBox(strTemp); } else { //得到edit选中的内容 shuru1.GetWindowText(strTemp); strTemp = strTemp.Mid(nStart,nEnd-nStart); AfxMessageBox(strTemp); } 其中nStart和nEnd分别表示光标的起始和终止位置,从0开始。strTemp.Format 方法用于格式化字符串。AfxMessageBox(strTemp)显示一个提示对话框,其内容是字符串strTemp。 strTemp = strTemp.Mid(nStart,nEnd-nStart)返回一个被截取的字符串,从nStart开始,长度为nEnd-nStart。如果nStart == nEnd说明没有选择文本。 注:SetSel(0,-1)表示全选;SetSel(-1,i)表示删除所选。

(适合初学者)MFC基础教程

Visual C++/MFC初学教程 目录 +-- 第一章VC入门 |------ 1.1 如何学好VC |------ 1.2 理解Windows消息机制 |------ 1.3 利用Visual C++/MFC开发Windows程序的优势|------ 1.4 利用MFC进行开发的通用方法介绍 |------ 1.5 MFC中常用类,宏,函数介绍 +-- 第二章图形输出 |------ 2.1 和GUI有关的各种对象 |------ 2.2 在窗口中输出文字 |------ 2.3 使用点,刷子,笔进行绘图 |------ 2.4 在窗口中绘制设备相关位图,图标,设备无关位图|------ 2.5 使用各种映射方式 |------ 2.6 多边形和剪贴区域 +-- 第三章文档视结构 |------ 3.1 文档视图框架窗口间的关系和消息传送规律 |------ 3.2 接收用户输入 |------ 3.3 使用菜单

|------ 3.4 文档,视,框架之间相互作用 |------ 3.5 利用序列化进行文件读写 |------ 3.6 MFC中所提供的各种视类介绍 +-- 第四章窗口控件 |------ 4.1 Button |------ 4.2 Static Box |------ 4.3 Edit Box |------ 4.4 Scroll Bar |------ 4.5 List Box/Check List Box |------ 4.6 Combo Box/Combo Box Ex |------ 4.7 Tree Ctrl |------ 4.8 List Ctrl |------ 4.9 Tab Ctrl |------ 4.A Tool Bar |------ 4.B Status Bar |------ 4.C Dialog Bar |------ 4.D 利用AppWizard创建并使用ToolBar StatusBar Dialog Bar |------ 4.E General Window |------ 4.F 关于WM_NOTIFY的使用方法 +-- 第五章对话框 |------ 5.1 使用资源编辑器编辑对话框 |------ 5.2 创建有模式对话框

Visual C++基于对话框的MFC应用程序---简单的时钟实例实验一

1.1 创建对话框的应用程序 1.使用AppWizard创建应用程序框架 首先,创建一个对话框应用程序,其工程文件名为:ch1.dsp。具体步骤如下: (1)启动Visual C++ 6.0,在File菜单中选择new菜单项;(2)在new对话框的Project页中选择 MFC AppWizard(exe)选项,在Project name框中输入:ch1,并在Location 框中指定希望的目录路径,编译系统生成的各种文件将会存放在该目录下,然后点击[OK]按钮 (3)MFC AppWizard-Step1 中选择Dialog based 选项,MFC AppWizard-Step2 到MFC AppWizard-Step4中取默认选项;(4)进入VC对话框设计界面后,选中 [TODO:在这里设置对话控制。]静态框并按del键删除该框,选中[取消]按钮并按del键删除该按钮; (5)将[确认]按钮拖曳到对话框的下方中间。生成的对话框设计窗口(如图1-1所示)。 图1-1

2.向类中添加系统消息响应函数 Windows应用程序的采用事件触发、消息驱动机制和大量的消息响应函数构成了应用程序的主体。本示例需要用到两个消息响应函数OnCtlColor()和OnTimer(),前者响应窗口消息:WM_CTLCOLOR,后者响应窗口消息:WM_TIMER。关于这两个函数的功能和用法暂且略过,留待后面小节再叙。这里先介绍响应函数加载的方法。 在CCh1Dlg类中添加OnCtlColor( )函数的操作方法如下:(1)打开类向导(MFC ClassWizard)窗口,选择Message Maps 页; (2)选择工程、类和对象标识。在Message Maps页的Project、Class name、Object Ids框中 分别选择:ch1、CCh1Dlg、CCh1Dlg; (3)添加响应函数。在Message Maps页的Messages框中选中并双击窗口消息:WM_CTLCOLOR,此时,消息WM_CTLCOLOR 的响应函数OnCtlColor( )被添加到类向导底部Member Functions框中。 注意,添加OnTimer( )函数的过程与上述过程相似,只是第(3)步选择WM_TIMER消息,而不是WM_CTLCOLOR。 添加完毕后,按[OK]按钮退出类向导。回到项目工作区,在项目工作区窗口展开CCh1Dlg类,可以看到类中添加了OnCtlColor( )和OnTimer( )两个消息响应函数。

VS2010和MFC编程入门之2(利用MFC向导生成单文档应用程序框架)

VS2010/MFC编程入门之二(利用MFC向导生成单文档 应用程序框架) 这里给大家一个简单的例子,演示如何生成单文档应用程序框架。 解决方案与工程 在VS2010的使用介绍中已经讲了解决方案与工程的概念,这里再重提一下。每个应用程序都作为一个工程来处理,它包含了头文件、源文件和资源文件等,这些文件通过工程集中管理。在VS2010中,工程都是在解决方案管理之下的。一个解决方案可以管理多个工程,可以把解决方案理解为多个有关系或者没有关系的工程的集合。VS2010提供了一个Solution Explorer解决方案浏览器视图,可以显示当前解决方案的内容,当新建一个工程时可以选择新建一个解决方案还是加入当前解决方案。 下图左侧面板中正在显示的视图就是Solution Explorer,视图中有一个解决方案-HelloWorld,此解决方案下有一个同名的工程-HelloWorld。 在应用程序向导生成应用程序后,VS2010会在用户设置的路径下,以解决方案名为名称建立一个目录,里面存放自动生成的文件。 使用VS2010应用程序向导生成单文档应用程序框架

这里简略演示下怎样生成单文档应用程序框架,让大家先有个直观的了解,有不理解的地方可以留着以后回来再看。下面按照操作步骤一步步讲解: 1.点菜单栏File->New->Project,弹出New Project对话框,我们可以选择工程类型。 如果安装完VS2010以后第一启动时已经设置为VC++,则Installed Templates->Visual C++项会默认展开,而如果没有设置VC++,则可以展开到Installed Templates->Other Languages->Visual C++项。因为我们要生成的是MFC程序,所以在“Visual C++”下选择“MFC”,对话框中间区域会出现三个选项:MFC ActiveX Control、MFC Application和MFC DLL。MFC ActiveX Control用来生成MFC ActiveX控件程序。MFC Application用来生成MFC应用程序。MFC DLL用来生成MFC动态链接库程序。当然我们要选择MFC Application。 在对话框下部有Name、Location和Solution name三个设置项。意义如下:Name--工程名,Location--解决方案路径,Solution name--解决方案名称。这里Name 我们设为“HelloWorld”,Location设置为“桌面”的路径,Solution name默认和Name一样,当然可以修改为其他名字,这里我们不作修改,也使用“HelloWorld”。点“OK”按钮。

在VC对话框中实现打印和打印预览

在VC对话框中实现打印和打印预览(附实现步骤) 时间:2008-01-27作者:佚名 在一般的软件开发中打印和打印预览是经常要用到的功能,对于VC6.0中的文档/视图(Doc/View)框架,可以很方便的使用缺省的打印和打印预览。但是,如果应用程序是基于对话框的就没有办法利用这种便利。而很多情况下,基于对话框的程序也需要打印和打印预览功能。那该怎么办呢?这正是本文将要解决的问题。 1实现打印 在对话框应用程序中不具备MFC的视和框架交互,要想实现打印和打印预览必须直接获取打印机的设备环境句柄,这时可以设置CPringDialog类中的构造函数的参数,获取打印机的设备环境句柄。利用这个句柄,转换为指针,则按打印流程实现打印任务。 (1)从CFrameWnd类派生出主窗口类CMyFrameWnd加入项目,这个类将作为控制类来实现程序的打印和打印预。 (2)在CMyFrameWnd中加入打印和打印预览相关的函数,为了方便起见,名字和CView视图类中缺省的打印和打印预览虚函数名相同。但这些函数是以成员函数的形式加入的,而不是重载。这里主要介绍Print和OnPrint函数。 Print函数是打印控制函数,由它来弹出打印对话框,取得用户设置信息,如打印机、纸张大小等。还有建立一个打印机DC和设置DOCINFO 结构,该结构包含输入输出文件名及其它一些信息,StartDoc函数要该结构作参数。还要设置打印区域,调用打印函数等 void CMyFrameWnd::Print() { CDC dc; CPrintDialog printDlg(FALSE); if (printDlg.DoModal() != IDOK) //弹出打印对话框,取得用户设置参数 return; dc.Attach(printDlg.GetPrinterDC());

VS2010MFC编程入门之十一(对话框:模态对话框及其弹出过程)

加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益。趁热打铁,鸡啄米这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。 一.模态对话框和非模态对话框 Windows对话框分为两类:模态对话框和非模态对话框。 模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。 非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。 大家对Windows系统很了解,相信这两种对话框应该都遇到过。之前的加法计算器对话框其实就是模态对话框。 二.模态对话框是怎样弹出的 毕竟加法计算器程序大部分都是MFC自动生成的,对话框怎么弹出来的大家可能还不是很清楚。鸡啄米下面简单说说它是在哪里弹出来的,再重新建一个新的对话框并弹出它,这样大家实践以后就能更灵活的使用模态对话框了。 大家打开Addition.cpp文件,可以看到CAdditionApp类有个InitInstance()函数,在M FC应用程序框架分析中提到过此函数,不过那是单文档应用程序App类中的,函数体不太相同,但都是进行App类实例的初始化工作。

InitInstance()函数的后半部分有一段代码就是定义对话框对象并弹出对话框的,鸡啄米下面给出这段代码并加以注释: 弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。CDialog::DoModa l()函数的原型为:

virtual INT_PTR DoModal(); 返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nR esult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABOR T。 调用了它对话框就会弹出,返回值是退出对话框时所点的按钮的ID,比如,我们点了“退出”按钮,那么DoModal返回值为IDCANCEL。 三.添加一个新对话框并弹出它 鸡啄米再为加法计算器程序添加一个对话框,以在计算之前询问用户是否确定要进行计算。大家可以完整的看下对话框的添加和弹出过程。 1.根据“创建对话框模板和修改对话框属性”中所讲的方法,在Resource View中的“Di alog”上点右键选择“Insert Dialog”,创建一个新的对话框模板,修改其ID为IDD_TIP_DIA LOG,Caption改为“提示”,然后参考“为对话框添加控件”中所讲,在对话框模板上添加一个静态文本框(static text),Caption改为“您确定要进行加法计算吗?”,接下来修改OK 按钮的Caption为“确定”,Cancel按钮的Caption为“取消”,最后调整各个控件的位置和对话框的大小。最终的对话框模板如下图: 2.根据“创建对话框类和添加控件变量”中创建对话框类的方法,在对话框模板上点右键选择“Add Class...”,弹出添加类的对话框,设置“Class name”为CTipDlg,点“OK”。在S olution Explorer中可以看到生成了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp。 3.我们要在点“计算”按钮之后弹出此提示对话框,那么就要在“计算”按钮的消息处理函数OnBnClickedAddButton()中访问提示对话框类,所以为了访问CTipDlg类,在Addition Dlg.cpp中包含CTipDlg的头文件:#include "TipDlg.h"。 4.修改OnBnClickedAddButton()的函数体,在所有代码前,构造CTipDlg类的对象tip Dlg,并通过语句tipDlg.DoModal();弹出对话框,最后判断DoModal()函数的返回值是IDO K还是IDCANCEL来确定是否继续进行计算。OnBnClickedAddButton()函数修改后如下: C++代码

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_PWD 7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出 选择建立Create a new class,点击OK。 这是为这个对话框创建一个新的类。在Name中,为该对话框类取个名字:CDlg_login。下面的Base class以及Dialog ID不要随便改动。然后点击OK。这样新的类CDlg_login就与本对话框建立起了联系。

MFC编程基础教程

第1章基于对话框的Windows应用程序 1.简介Windows编程的两种方法,即Windows API编程和MFC编程。 2.基于对话框的应用程序的创建过程: ?建立基于对话框的MFC 应用程序框架; ?放置控件; ?设置控件属性; ?为控件连接变量,即为控件命名; ?添加并且编写消息处理函数。 3.常用基本控件: ?静态文本框:主要用来显示文本信息,不能接受用户输入 ?命令按钮:是最常见的、应用最广泛的一种控件。在程序执行期间,当单击某个命令按钮后就会执行相应的消息处理函数。 ?编辑框:是一个文本编辑区域,用户可以在该区域输入、编辑和显示正文内容。 ?框架:将一组相关的控件框起来,达到标识一组控件的作用。 ?单选按钮:用户在一组单选按钮中最多只能选择一项。当某一项被选定后,其他选项自动变成未选状态。 ?复选框:列出了可供选择的项,用户可根据需要选择其中的一项或多项,各选项之间的状态互不相关。 ?列表框:通过显示多个选项,供用户选择,达到与用户对话的目的。 ?组合框:组合了编辑框和列表框的特性而形成的一种控件。在列表框中列出可供用户选择的项,当用户选定某项后,该项内容自动装入编辑框中。 ?滚动条:通常附在对话框上用来协助观察数据或确定位置,也可以用来作为数据输入的工具。 1.1 Windows编程基础 Windows 应用程序的主要特点是: ?具有标准的图形用户界面。 ?具有与硬件无关的特性。 ?采用“消息传递,事件驱动”的运行机制。 用Visual C++ 编写Windows 应用程序主要有两种方法:一是使用Windows 提供的应用程序接口(Application Programming Interface ,API )函数;二是使用Microsoft 提供的微软基础类(Microsoft Foundation Class ,MFC )。

MFC单文档打开文件

在向导创建的应用程序中,程序的默认菜单有“文件”、“编辑”、“视图”和“帮助”。当运行程序后,打开“文件”菜单中的“打开”命令时,应用程序会自动打开相应的“打开”文件通用对话框。之所以有这功能,是因为向导创建的应用程序框架中,自动将“打开”菜单命令与CWinApp的OnFileOpen 成员函数相关联。 当用户在通用“打开”文件对话框中指定一个文件后,应用程序将调用文档对象的 CDocument::OnOpenDocument虚成员函数。该函数将打开文件,并调用DeleteContents清除文档对象的内容,然后创建一个CArchive(归档类)对象用于数据的读取,接着又自动调用Serialize函数。之后便调用视图对象的CView::OnInitialUpdate虚成员函数。 上述的Serialize函数是一个很特别的函数,它既可以从中读取文档数据,也可以保存文档数据,称为“序列化”函数。它被添加用户的文档类中,用来根据CArchive内部的一个标志来决定文档数据的流向(读或写), 打开机制:可以看到消息映射ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen),如果你没有映射ID_FILE_OPEN消息,就会调用CWinApp::OnFileOpen,否则调用你的消息映射函数。在CWinApp::OnFileOpen中调用CDocManager::OnFileOpen(),这样函数完成以下任务:1。弹出对话框让用户选择待打开的文件,返回该文件的全路径名称, 供下面函数调用时使用2。调用应用程序的 OpenDocumentFile(LPCTSTR lpszFileName)。至此,这个对话框的出处就真相大白了。 文档数据的读操作 对于上述过程,我们所做的仅仅是在文档类的Serialize函数中添加文档数据读取(加载)和存储的代码。需要说明的是,Serialize函数的参数ar是一个CArchive类的引用对象。CArchive类提供了“<<”和“>>”运算符,分别可以向文档对象写入数据或从文档对象中读取数据。它们的含义与C++中的“<<”和“>>”运算符相同,只不过CArchive支持更多的数据类型,如:CObject、CString等。除此之外CArchive类还提供ReadString和WriteString成员函数来读写文档中的一行文本。 文档数据的显示方法和技巧 用户的视图类是负责显示文档数据的,目前常用的显示方法有二个:一是在视图的客户区中使用编辑控件,二是直接调用CDC类的文本输出函数绘制所有的文本内容。 1.使用编辑控件 “编辑控件”是一个可以让用户从键盘输入和编辑文本的控件,通过它可以输入各种文本、数字或者口令,也可使用它来编辑和修改简单的文本内容。MFC类CEdit封装了编辑控件的全部操作。 使用编辑控件实现文档数据的显示的思路是,先在视图中创建一个与视图客户区大小相同的编辑控件,然后把文档的文本内容转送到编辑控件中。 2. 直接控制文本的输出(详细) (1)重写OnOpenDocument函数,读取文本文件到字符串变量 BOOL CMFCDoc::OnOpenDocument(LPCTSTR lpszPathName) { if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; // TODO: 在此添加您专用的创建代码 if(lpszPathName!=NULL) { CFile pCFile; int hResult=pCFile.Open(lpszPathName, CFile::modeReadWrite); //以读写方式打开文件 if(hResult != 0) { // AfxMessageBox("打开文件成功"); }

基于MFC对话框的报表打印和预览功能(推荐文档)

基于MFC对话框的报表打印和预览功能 第一步:在工程中加入实现打印功能的四个文件PrintFrame.h, PringtView.h,PrintFrame.cpp, PrintView.cpp CPrintFrame和CPrintView类是两个个可重用的类,开发者只需要把这两个类对应的四个文件拷贝到工程文件所在目录中(PrintFrame.h, PringtView.h,PrintFrame.cpp, PrintView.cpp),并将这四个文件加入工程,并在需要执行打印功能的代码处加入 #include "PrintFrame.h" #include "PrintView.h" 第二步:添加三个消息响应函数来执行该功能 ON_MESSAGE(WM_BEGIN_PRINTING,OnBeginPrinting) ON_MESSAGE(WM_END_PRINTING,OnEndPrinting) ON_MESSAGE(WM_MY_PRINT,OnMyPrint) 这三个消息响应函数放在.cpp文件的BEGIN_MESSAGE_MAP(CReportDlg, CDialog)与END_MESSAGE_MAP()之间,如下:BEGIN_MESSAGE_MAP(CReportDlg, CDialog) //{{AFX_MSG_MAP(CReportDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_MESSAGE(WM_BEGIN_PRINTING,OnBeginPrinting) ON_MESSAGE(WM_END_PRINTING,OnEndPrinting) ON_MESSAGE(WM_MY_PRINT,OnMyPrint) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) //}}AFX_MSG_MAP END_MESSAGE_MAP() 其中OnMyPrint是跟具体要打印什么内容有关的开发人员要重点完成的代码,可以打印表格,图片,数据,只要GDI绘图可以进行的操作在这里都可以完成。由于打印预览的一部分工作在CView类里完成,因此在用户程序中只需要相应 WM_MY_PRINT消息就可以执行打印预览的功能,而不需要另外编写打印预览代码。 第三步: 建立一个CPrintFrame的对象,设该对象的指针为pFrame,并将对话框的指针传给该对象的m_pCallerDlg,即pFrame->m_pCallerDlg = this;

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_PWD 7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出 选择建立Create a new class,点击OK。 这是为这个对话框创建一个新的类。在Name中,为该对话框类取个名字:CDlg_login。下面的Base class以及Dialog ID不要随便改动。然后点击OK。这样新的类CDlg_login就与本对话框建立起了联系。

基于单文档的(MFC)窗口分割

基于单文档的窗口分割 简介部分是对于MFC应用程序的介绍,在博客上看到的,觉得受益匪浅,所以写到这里。不需要的朋友可以从第二部分程序设计开始看起。

目录 基于单文档的窗口分割 (1) 简介 (3) MFC应用程序类型简介 (3) 单文档与多视图 (5) 单文档多视图程序设计 (6) Step1:创建单文档的MFC程序 (6) Step2:声明相关的变量。 (6) Step3:重载OnCreateClient()函数,进行窗口的分割 (7) Step4:设置行列初始值 (9) 附:代码 (10)

简介 MFC应用程序类型简介 在Microsoft VC++ 6.0中,基于MFC的应用程序一般分为以下几种: 多文档界面(MDI) 单文档界面(SDI) 基于对话框的应用程序。 图1-1 应用程序类型 其中单文档又可分为单视图的和多视图的。

图1-2 单文档单视图 图1-3 单文档多视图 一般情况下,单文档仅需要单视图就够了,如Windows自带的记事本、画图程序等等,但

在一些情况下,单文档需要多视图支持,比如同时观察文档的不同部分,同时从不同的角度观察同一文档等。 在MFC的框架下,文档对象(CDocument)有一个保存其所有视图的列表,并提供了增加视图(AddView)与删除视图(RemoveView)函数,以及当文档内容改变时通知其所有视图的方法(UpdateAllViews)。 1-4 类视图 通过多文档框架的窗口复制机制和单文档框架的分割窗口机制是实现单文档多视图的主要方法。单文档与多视图 一般地,单文档与多视图有三种情况: 1)在多文档界面MDI中,每个视图位于MDI的一个独立子文档框架中,视图对象基于同一个视图类。用户可以通过“窗口|新窗口”菜单,为同一文档的视图再创建一个窗口,通过新创建的窗口,可以编辑和观察文档的另一部分,同一文档各个视图之间自动实现同步,用户修改一个视图的内容,在另外的视图中也自动更新。 MFC框架通过复制原来的子框架窗口和其中的视图来实现上面的功能,并且是完全自动的。 2)视图对象基于同一视图类,所有视图位于同一文档框架中。 分割窗口将单文档窗口的视图区分割成几个独立的视图,框架从同一视图类创建多个视图对象。Word的子窗口即属于这种类型。 3)视图对象基于不同的视图类,所有的视图位于同一文档框架中。 多个视图共享同一文档框架,但从不同的视图类创建,每个视图可以为文档提供不同的观察和编辑方法。比如在一个窗口里观察文档的不同部分,或者是在一个窗口里用不用类型的视图观察同一个文档。这种类型的实现方法是通过重载框架类CMainFrame的成员函数OnCreateClient实现,用户可以根据不同需要将窗口分为垂直或水平的多个分割窗口。

相关文档
相关文档 最新文档