C++ VC登录对话框


图3.19 “Adding a Class”对话框
单击“OK”按钮,将弹出如图3.20所示的New Class对话框。其中,Name框 是用来输入用户定义的类名,注意要以“C”字母打头,以保持与Visual C++标 识符命名规则一致。File Name框用来指定类的源代码文件名,单击“Change” 按钮可改变默认的源文件名称及其在磁盘中的位置。Base class和Dialog ID内 容是由系统自动设置的,一般无须修改。从Base class框的内容可以看出,用户 对话框类是从基类CDialog派生而来的。
程序文本、界面编辑区
编译信息显示区
图3.3 VC++ 6.0 编程平台
2.建立管理系统工程 选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程” (Project)标签,这时显示出一系列的应用程序项目类型;选择MFC AppWizard (exe)的项目类型(该类型用于创建可执行的Windows应用程序即MFC应用程序, 不同于控制台方式的“Win32 Console Application”),并在“工程”(Project) 中输入项目名XSCJTEST(为与后文叙述一致,请读者在编程时尽量使用本书定义的 名称),在“位置”(Location)处选择或输入工程保存的位置,如图3.4所示。
3.基于资源的程序设计 .
Windows应用程序常常包含众多图形元素,例如光标、菜单、工具 栏、位图、对话框等。每一个这样的资源都用相应的标识符来区分,而 且Windows内部也有预定义的资源,例如在Ex_HelloWin中,LoadIcon 和LoadCursor函数将系统内部的IDI_APPLICATION(应用程序图标) 和IDC_ARROW(箭头光标)作为创建窗口的窗口图标和鼠标指针。
图3.17 设置控件大小和位置
在菜单上选择Layout(编排)→Align(对齐),可以选择左、右、上、下 对齐,位置以“主要控件”为基准。使用Make Same Size命令则可以改变其他 控件的大小,使其与“主要控件”的尺寸一致。编辑完成后的“登录”对话框 如图3.18所示。
图3.18 “登录”对话框编辑后的最终状态
图3.21 MFC ClassWizard的“Member Variables”页面
(2)选定Class name为CDlgLogin,然后在Control IDs列表中,选定所要 关联的控件ID号IDC_EDIT2,双击鼠标左键或单击“Add Variable”按钮,弹出 Add Member Variable对话框,在对话框设置变量的名称、类别和数据类型,如 图3.22所示。
(c)“用户名”静态文本标签
(d)“确认”按钮属性
如图3.16(e)所示,在“密码”编辑框属性的Styles 选项卡中勾选 Password。这样,程序运行后,用户输入密码到编辑框时将会显示“***”符号。
(e)“密码”编辑框属性 图3.16 设置控件属性
添加的控件可能大小不一,此时可以选定某个控件,移动鼠标到控件边缘 处出现双箭头来调整大小。要设置多个控件之间的位置大小关系时,先按住 Shift键不放,然后用鼠标选取控件,直到所需要的多个控件选取之后再释放 Shift键。若在选取时,对已选取的控件再单击一下,则取消该控件选取。一旦 单个控件被选取后,其四周由选择框包围着,选择框上还有几个蓝色实心小方 块,拖动它可改变控件的大小;多个控件被选取后,其中只有一个控件的选择 框有几个蓝色实心小方块,这个控件称为“主要控件”,而其他控件的选择框 的小方块是空心的。如图3.17所示。
图3.2 打开VC++ 6.0
编程平台由图3.3所示的各类交互元素组成,其中菜单包含各种编程设计命 令,工具栏包括一些命令的快捷按钮和各种导航按钮、搜索框等,视图显示区 (项目工作区窗口)将会在建立工程后显示编程视图,程序文本、界面编辑区 是主要的工作场所,进行程序的录入和界面的设计。
功能菜单 工具栏 视图显示区
1.为“登录”对话框IDD_LOGIN创建类 登录”对话框IDD_LOGIN创建类 IDD_LOGIN 在应用程序中使用添加的对话框前,须先为该对话框模板创建一个用户对话 框类。在对话框资源模板的空白区域(没有其他元素或控件)内双击鼠标,将弹 出如图3.19所示的对话框,询问是否为对话框资源创建一个新类。
图3.20 “New Class”对话框
2.为“登录”对话框设置控件关联变量 登录” 使用MFC ClassWizard可以很容易地为一个控件定义关联变量并可设置其数 据范围。例如,下面的步骤是为CDlgLogin类的控件IDC_EDIT1和IDC_EDIT2即 “用户名”和“密码”编辑框添加关联变量m_user和m_pass。 (1)按快捷键Ctrl + W,打开MFC ClassWizard,并切换到Member Variables页面,如图3.21所示。
4.动态链接库 .
动态链接库提供了一些特定结构的函数,能被应用程序在运行过程中装入和 连接,且多个程序可以共享同一个动态链接库,这样就可以大大节省内存和磁盘 空间。 Windows提供了丰富的应用程序可调用的函数,大多数用于实现其用户界面 和在屏幕显示的文本和图形,都是通过动态链接库来实现的。这些动态链接库是 一些具有DLL扩展名或者有时是EXE扩展名的文件。
2.图形设备接口(GDI) .图形设备接口( )
在控制台应用程序中,想要在屏幕或打印机上显示或打印一幅图形是一件非 常复杂的事件,因为用户必须按照屏幕分辨率模式以及专用绘图函数库调用相应 的函数在屏幕上绘图,或根据打印机类型或指令规则向打印机输送数据。而 Windows提供了一个抽象的接口,称为图形设备接口(Graphical Device Interface,GDI),使得用户直接利用系统的GDI函数就能方便地实现图形和文本 的输出,而不必关心与系统相连的外部设备的类型。
图3.12 对话框属性修改后的部分界面
2.为“登录”对话框添加控件 登录” 对话框编辑器最初打开时,控件工具栏是随之出现的,利用此工具栏中各 个按钮,可以顺利完成控件的添加。图3.13说明了各个图标按钮所对应的控件 类型。
控件的选择 静态文本 组框 复选框 组合框 水平滚动条 旋转按钮 滑动条 列表视图 标签 复合编辑 月历 用户定制工具 静态图片 编辑框 按钮 单选框 列表框 垂直滚动条 进展条 热键 树形视图 动画 日期选择 IP 地址 组合框的扩展
登录界面.bmp
登录界面.bmp
图3.15 import命令导入图片文件
设置左上方图片控件的属性,将General选项卡中的Type设为BITMAP,Image 设为IDB_BITMAP1,如图3.16(a)所示,之后图片控件将会显示此图片。 对另一个图片控件则拉成细条状,如图3.16(b)设置属性,将General选项 卡中的Type设为Frame,并勾选Extended Styles选项卡中的Static Edge项,调 整粗细长度作为分隔条。
图3.22 “Add Member Variable”对话框
需要说明的是: ①对于大多数控件而言,Category框内可选择Value或Control两种类型。 Control所对应的变量类型就是MFC为该控件封装的控件类,Value所对应的是数 值类型。 ②不同的控件所提供的关联的数值类型各不相同。例如,对于编辑框来说, Variables type中的数值类型可以有CString(字符串)、int、UINT、long、 DWORD、float、double、BYTE、short、BOOL等。 (3)在Member variable name框中填好与控件相关联的成员变量m_pass, “Category”(分类)选择为Value,“Variable type”(变量类型)为 Cstring,单击“OK”按钮,又回到MFC ClassWizard对话框的Member Variables 页面中,以同样方法为IDC_EDIT1控件添加Control分类CEdit变量类型的变量 m_user,在Control IDs列表中出现刚才添加的控件关联变量(或直接称之为 “控件变量”)。
图3.10 插入新对话框
右键单击右边对话框编辑窗口中刚建立的对话框,选择属性,弹出如图 3.11所示的窗口。 ①将对话框标识符改成IDD_LOGIN(在MFC程序中,命名方法要完全遵循 C/C++语言的命名规则); ②将对话框标题改为“登录学生成绩管理系统”。
图3.11 修改对话框属性
单击“字体”按钮,通过弹出的字体对话框将对话框内的文本设置成“宋体, 9”,以使自己的对话框和Windows操作系统中的对话框保持外观上的一致,完成 后对话框如图3.12所示。
1.消息驱动机制 .
基于Windows程序和基于控制台应用程序之间的一个最根本区别,就在于控 制台应用程序是通过调用系统的函数来获得用户输入的,而Windows程序则是通 过系统发送的消息来处理用户输入的。 在Windows操作环境中,无论是系统产生的动作或是用户运行应用程序产生 的动作,都称为事件(Events)产生的消息(Message)。例如,在Windows 桌面(传统风格)上,双击应用程序的快捷图标,系统就会执行该应用程序。在 Windows的应用程序中,也是通过接收消息、分发消息、处理消息来和用户进行 交互的。这种消息驱动的机制是 这种消息驱动的机制是Windows编程的最大特点。 编程的最大特点。 这种消息驱动的机制是 编程的最大特点
创建“登录” 3.1 创建“登录”对话框 3.1.1 生成默认对话框工程 1.进入VC++ 进入VC++ 安装Microsoft Visual Studio 6.0 后,在开始菜单中单击Microsoft Visual Studio 6.0子菜单下的Microsoft Visual C++ 6.0,即可打开VC++ 6.0 编程平台,如图3.2所示。
合集下载

登录对话框之VC中用INI文件保存登录信息的操作-wind1987321的专栏-C...

登录对话框之VC中用INI文件保存登录信息的操作-wind1987321的专栏-C...

登录对话框之VC中用INI文件保存登录信息的操作-wind1987321的专栏-C...在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下:一.将信息写入.INI文件中.1.所用的WINAPI函数原型为:BOOL WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);其中各参数的意义:LPCTSTR lpAppName 是INI文件中的一个字段名.LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR 型或CString型的.LPCTSTR lpFileName 是完整的INI文件名.2.具体使用方法:设现有一名学生,需把他的姓名和年龄写入c:\stud\student.ini 文件中.CString strName,strTemp;int nAge;strName="张三";nAge=12;::WritePrivateProfileString("StudentInfo","Name",strName,"c: \\stud\\student.ini");此时c:\stud\student.ini文件中的内容如下:[StudentInfo]Name=张三3.要将学生的年龄保存下来,只需将整型的值变为字符型即可:strTemp.Format("%d",nAge);::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\s tud\\student.ini");二.将信息从INI文件中读入程序中的变量.1.所用的WINAPI函数原型为:DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefault,LPTSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);其中各参数的意义:前二个参数与 WritePrivateProfileString中的意义一样.lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器.nSize : 目的缓存器的大小.lpFileName : 是完整的INI文件名.2.具体使用方法:现要将上一步中写入的学生的信息读入程序中.CString strStudName;int nStudAge;GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");执行后strStudName 的值为:"张三",若前两个参数有误,其值为:"默认姓名".3.读入整型值要用另一个WINAPI函数:UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);这里的参数意义与上相同.使用方法如下:nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\s tud\\student.ini");三.循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来,具体程序如下:1.写入:CString strTemp,strTempA;int i;int nCount=6;file://共有6个文件名需要保存for(i=0;i {strTemp.Format("%d",i);strTempA=文件名;file://文件名可以从数组,列表框等处取得.::WritePrivateProfileString("UseFileName","FileName"+strTe mp,strTempA,"c:\\usefile\\usefile.ini");}strTemp.Format("%d",nCount);::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");file://将文件总数写入,以便读出.2.读出:nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\use file\\usefile.ini");for(i=0;i {strTemp.Format("%d",i);strTemp="FileName"+strTemp;::GetPrivateProfileString("CurrentIni",strTemp,"default.fil",strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\use file.ini");file://使用strTempA中的内容.}补充四点:1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE 值.2.文件名的路径中必须为 \\ ,因为在VC++中, \\ 才表示一个 \ .3.也可将INI文件放在程序所在目录,此时lpFileName 参数为: ".\\student.ini".//----------------------------------------------------------------------------------/*类名:CIni版本:v2.0最后更新:v2.0梦小孩于2004年2月14日情人节加入高级操作的功能v1.0梦小孩于2003年某日一般操作完成类描述:本类可以于.ini文件进行操作*/文件 1:#pragma once#include "afxTempl.h"class CIni{private:CString m_strFileName;public:CIni(CString strFileName):m_strFileName(strFileName){}public://一般性操作:BOOL SetFileName(LPCTSTR lpFileName); //设置文件名CString GetFileName(void); //获得文件名BOOL SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue,boolbCreate=true); //设置键值,bCreate是指段名及键名未存在时,是否创建。

MFC登录系统(图解)

MFC登录系统(图解)

MFC登录系统第一步、建立一个框架结构工程选择其它语言中的Visual C++,在中间视图中选择MFC应用程序,下面的名称中输入工程名称GzyOa,解决方案名称是你的工程目录名可以使用默认的工程名也可以修改成自己好记的名称。

点击确定。

下一步我们选择“多个文档”“选项卡式文档”,我们不用文档视图,所以将下面的“文档/视图结构支持(V)”复选框去掉,点击完成。

这样就完成了工程的创建。

第二步,建立登录对话框。

选择“类视图”导航栏,点击右键选择“类向导”。

选择添加类类名CLogin基类为CDialog点击完成。

在类视图中找到刚建的类,点右键选择“转到”对话框(D)制作如下对话框。

(确定改为“登录”,取消改为“退出”,增加“设置”按钮。

)鼠标放在第一个编辑框点右键,选添加变量m_editName同法定义第二个编辑框变量为m_editPassWord,同时将其属性Password设置为True,并在其头文件中手动添加两个变量:public:CString cName;CString cPass;双击登录按钮添加如下代码:void CLogin::OnBnClickedOk(){m_editName.GetWindowTextW (cName);m_editPassWord.GetWindowTextW(cPass);CDialog::OnOK();}这里是把编辑框的内容传给public变量,以便于主程序存储登录信息,这里以后还要添加认证代码。

(这是后话)在类视图中找到CGzyOaApp类(程序入口)修改InitInstance()函数,使用程序先启动对话框后再启动框CMainFrame。

方法如下:1.为CGzyOaApp类添加两个对应变量(用于接收登录窗口的用户信息)CString m_strSqlName;CString m_strSqlPassword;2.先在CGzyOaApp类的源文件头添加#include"Login.h"3.找到InitInstance()函数定义(向下翻)添加如下代码:红色部分BOOL CGzyOaApp::InitInstance(){INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinAppEx::InitInstance();if (!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);return FALSE;}AfxEnableControlContainer();EnableTaskbarInteraction();SetRegistryKey(_T("应畖用?程ì序ò向ò导?生Θ?成é的?本?地?应畖用?程ì序ò"));InitContextMenuManager();InitKeyboardManager();InitTooltipManager();CMFCToolTipInfo ttParams;ttParams.m_bVislManagerTheme = TRUE;theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);CLogin m_login;if (m_login.DoModal ()==IDOK){m_strSqlName=m_ame ;m_strSqlPassword=m_login.cPass ;CMDIFrameWnd* pFrame = new CMainFrame;if (!pFrame)return FALSE;m_pMainWnd = pFrame;if (!pFrame->LoadFrame(IDR_MAINFRAME))return FALSE;HINSTANCE hInst = AfxGetResourceHandle();m_hMDIMenu = ::LoadMenu(hInst, MAKEINTRESOURCE(IDR_GzyOaTYPE));m_hMDIAccel = ::LoadAccelerators(hInst, MAKEINTRESOURCE(IDR_GzyOaTYPE));CMainFrame* pMainFrame = new CMainFrame;if (!pMainFrame->LoadFrame(IDR_MAINFRAME))return FALSE;m_pMainWnd = pMainFrame;pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->UpdateWindow();}return TRUE;}这样就完成了登录过程的修改,但对话框还太单调,这里我们使用绘图方法添加标题等信息,方法如下:在类视图中找到对话框类CLogin,点右键,选择类向导。

MFC之编写一个简单的登录对话框

MFC之编写一个简单的登录对话框

编写一个简单的登录对话框大家好,我们利用MFC编写一个简单的登录对话框。

主窗体是单文档界面。

程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。

1、开打VC++6.0。

点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。

2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。

3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。

如果没有问题,我们继续。

点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。

5、鼠标右键单击刚才加进去的第一个静态文本框控件,点击属性。

在弹出的标题中填写:输入用户名:。

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

然后弹出选择建立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,我们可以在对话框空白的地方单击右键,点击属性,在标题中输入:请登录。

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_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(Microsoft Foundation Class)是一种基于C++语言的面向对象的图形用户界面(GUI)开发框架,它提供了一整套类库和工具,简化了Windows下的GUI应用程序开发。

在MFC中,可以通过单文本和对话框来实现登录界面。

首先,我们可以创建一个MFC应用程序并选择单文档或对话框应用程序。

在本文中,我们选择创建一个对话框应用程序。

创建对话框应用程序后,MFC会自动生成与对话框相关的代码,包括对话框资源和控件类。

然后,我们需要为登录按钮添加点击事件的处理程序。

可以在对话框类的头文件中声明处理程序函数,并在源文件中实现它。

处理程序函数将在用户点击登录按钮时被调用。

在处理程序函数中,我们需要获取用户输入的用户名和密码,并与预先存储的正确用户名和密码进行比较。

可以使用MFC提供的CString类来处理字符串。

如果用户名和密码正确,我们可以显示一个消息框来提示用户登录成功,并关闭登录对话框,打开主界面。

如果用户名和密码不正确,我们可以显示一个错误消息框,提示用户重新输入。

下面是一个示例的处理程序函数:```void CMyDialog::OnBnClickedLoginCString strUsername;CString strPassword;//获取用户输入的用户名和密码GetDlgItemText(IDC_EDIT_USERNAME, strUsername);GetDlgItemText(IDC_EDIT_PASSWORD, strPassword);//比较用户名和密码是否正确if (strUsername == "admin" && strPassword == "password") //登录成功,显示成功消息框MessageBox(_T("登录成功"), _T("提示"), MB_OK ,MB_ICONINFORMATION);//关闭登录对话框EndDialog(IDOK);//打开主界面CMainFrame* pMainFrame = new CMainFrame;pMainFrame->Create(NULL, _T("主界面"));pMainFrame->ShowWindow(SW_SHOW);}else//登录失败,显示错误消息框MessageBox(_T("用户名或密码错误"), _T("错误"), MB_OK ,MB_ICONERROR);}```在处理程序函数中,我们使用了`GetDlgItemText`函数来获取文本框中的文本,`MessageBox`函数来显示消息框,`EndDialog`函数来关闭对话框,`Create`函数来创建主界面窗口。

VC通用对话框类CFileDlg

VC通用对话框类CFileDlg

VC通用对话框类CFileDlgCFileDialog类封装了Windows常用的文件对话框。

常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。

可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。

每种情况下,对话框都与标准MFC对话框一样工作。

因为它们都是CCommonDialog类的派生类。

要使用CFileDialog,先用CFileDialog构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。

m_ofn结构是OPENFILENAME类型的。

要了解更多信息,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。

初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。

DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。

当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。

CFileDIalog包含许多保护成员,使你可以处理常用的共享冲突、文件名合法性检查、列表框改变通知。

这些保护成员对许多应用来说用处不大,因为缺省处理是自动的。

对这些函数来说,消息映射入口是不必要的,因为它们是标准虚函数。

可以使用Windows CommDlgExtendError函数判断在初始化对话框时是否是发生了错误,并获取关于错误的更多信息。

析构一个CFileDialog对象是自动,无须调用CDialog::EndDialog。

要使用户选用多个文件,可在调用DoModal之前设置OFN_ALLOWMULTISELECT标志。

你应提供文件名缓冲区来放置返回的多个文件名的列表,这通过用一个分配了的缓冲区指针替换m_ofn.lpstrFile来实现,要在创建了CFileDialog之后调用DoModal 之前进行此操作。

MFC用户登录、注册、工作主窗体

MFC⽤户登录、注册、⼯作主窗体创建项⽬由向导⽣成的窗体作为⼯作的主窗体。

⽤户登录、注册窗体添加对话框来实现。

【具体功能】1、主窗体应该出现在登录窗体成功之后。

2、登录窗体关闭(右上⾓ ),程序直接退出。

在App.cpp的InitInstance()内起始处加⼊代码//============登录===========//在主程序窗⼝运⾏前⾸先弹出登录对话框while (TRUE){CLogin login_Dialog;//模态对话框int nReturn = login_Dialog.DoModal();//返回IDOK或IDCANCEL。

如果返回的是IDCANCEL,则要调⽤WindowsCommDlgExtendedError函数来确定是否发⽣了⼀个错误。

IDOK和IDCANCEL都是常量,它表明⽤户选择的是OK按钮还是Cancel按钮if (nReturn == IDCANCEL)//点击取消{return FALSE;}if (nReturn == IDOK)//点击确定{//HWND login_Hwnd = GetDlgItem(login_Dialog, IDD_DIALOG1);CString str_User = login_Dialog.m_strUser;CString str_Password = login_Dialog.m_strPassword;if (!(str_User == "admin" && str_Password == "admin"))//如果⽤户名密码不是admin/admin,则报错,提⽰重新输⼊,直⾄正确为⽌。

{if (IDOK == MessageBox(NULL, TEXT("⽤户ID或密码错误!\n 请重新输⼊!"),TEXT( "登录失败!"), MB_OKCANCEL | MB_ICONERROR)) continue;elsereturn FALSE;}elsebreak;}}⽤户登录对话框void CMFCApplication17Dlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//将控件数据复制给控件变量CString username;CString password;//与注册类似操作bool flag = false;//char * path = "username.txt";CString path = TEXT("./username.txt");CFile file;file.Open(path, CFile::modeCreate | CFile::modeRead);file.SeekToBegin();CArchive ar(&file, CArchive::load);//去除数据左右空格数据m_loginName.Trim();m_loginPwd.Trim();//校验⽤户密码,与注册校验相同的操作,这⾥多验证了⼀步,即校验密码while (ar.ReadString(username)){if (ar.ReadString(password)){username.Trim();password.Trim();if (username == m_loginName && password == m_loginPwd){flag = true;break;}}}//关闭CFile和CArchivear.Close();file.Close();if (flag){//m_Login_Result = m_Login_Account + " " + " " + "已登录";//找到则显⽰的是⽤户名+性别+已登录 m_loginName = "";//成功登录后把⽤户框和密码框⽂本清除m_loginPwd = "";UpdateData(FALSE);//将数据从控件变量传递给控件CWork dlgW;dlgW.DoModal();}else{MessageBox(TEXT("⽤户名不存在或密码错误"));//⽤户密码错误或⽤户不存在提⽰}}void CMFCApplication17Dlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码CRegister reg;reg.DoModal();}⽤户注册对话框void CRegister::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码CString username;//从⽂件中读取⽤户名进⾏校验,如果输⼊的⽤户名在⽂件已存在则不进⾏注册bool flag = false;//标记//char * path = "username.txt";//⽂件路径CString path = TEXT("username.txt");CFile fp;//使⽤MFC的CFile将暑假写⼊⽂件fp.Open(path, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);fp.SeekToBegin();//移动⽂件指针位置⾄⽂件头CArchive ar(&fp, CArchive::load);//使⽤CArchive进⾏读取⽂件UpdateData(TRUE);//将数据从控件复制到控件变量//进⾏左右空格清除m_registerName.Trim();m_registerPwd1.Trim();m_registerPwd2.Trim();//校验操作while (ar.ReadString(username)){username.Trim();if (username == m_registerName){flag = true;//如果已存在⽤户名,则标记flag为truebreak;}else{ar.ReadString(username);//读取下⼀⾏(每⼀⾏为⼀个属性,⽐如⽤户名,密码)ar.ReadString(username);//读取下⼀⾏}}ar.Close();fp.SeekToEnd();//⽂件写⼊为追加操作,所以写⼊前必须将⽂件指针移动⾄⽂件尾if (!flag){//CFile Write(*str,GetLength())写⼊fp.Write(m_registerName, m_registerName.GetLength());//win虽是\r\n,在写程序只需要\n即可换⾏fp.Write("\r\n", sizeof(char));if (m_registerPwd1 != m_registerPwd2){MessageBox(TEXT("密码不⼀致"));}else{fp.Write(m_registerPwd1, m_registerPwd1.GetLength());fp.Write("\r\n", sizeof(char));fp.Close();MessageBox(TEXT("注册成功"));CDialog::OnOK();}}else{MessageBox(TEXT("⽤户已存在"));//⽤户已存在提⽰框,不关闭注册框,可让⽤户⾃由选择是否继续注册 }}。

C技巧:VC中对话框上显示信息的方法

VC实现对话框上信息的显⽰ 利⽤ VC的AppWizard,可以很容易地实现⼯具条和菜单项的ToolTip,或在状态条上显⽰帮助信息,但要在对话框的控件上显⽰ToolTip和在状态条上显⽰控件信息并不容易实现。

现在,我们⽤VC中的WM_SETCURSOR 与TTN_NEEDTEXT消息就可达到⽬的。

具体操作如下: ⼀、利⽤ VC的 MFC AppWizard ⽣成⼀个 SDI 或 MDI 的应⽤程序 ⼆、编辑对话框控件的字符串资源 例如:IDC_dbBUTTON1 = “This is 肖天鹏的第⼀⾃制按钮天鹏\", 其中字符串“This is肖天鹏的第⼀⾃制按钮“将在⿏标移到控件上时显⽰在状态条上,字符串“天鹏\"将作为 ToolTip 显⽰。

三、建⽴消息映射 在对话框的头⽂件 (*.H) 中 加⼊以下代码: protected: void SetStatusText(UINT nID=0); //{{AFX_MSG(CFileOp1) afx_msg void OnDestroy(); afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); //}}AFX_MSG afx_msg BOOL OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ); DECLARE_MESSAGE_MAP() 在对话框的实现⽂件 (*.CPP) 中加⼊以下代码: BEGIN_MESSAGE_MAP(CFileOp1, CDialog) //{{AFX_MSG_MAP(CFileOp1) ON_WM_DESTROY() ON_WM_SETCURSOR() //}}AFX_MSG_MAP ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnTipNotvify) END_MESSAGE_MAP() 四、编辑消息处理函数 BOOL CFileOp1::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) {// TODO: Add your message handler code here and/or call default if(pWnd==this) SetStatusText(); else {TOOLTIPTEXT m_psttt; m_psttt.hdr.hwndFrom=m_hWnd; m_psttt.hdr.idFrom=pWnd->GetDlgCtrlID(); m_psttt.hdr.code=TTN_NEEDTEXT; m_psttt.uFlags= TTF_IDISHWND; SetStatusText(pWnd->GetDlgCtrlID()); this->SendMessage(WM_NOTIFY,m_psttt.hdr.idFrom,(LPARAM)&m_psttt); } return CDialog::OnSetCursor(pWnd, nHitTest, message);} void CFileOp1::OnDestroy() {SetStatusText(); CDialog::OnDestroy();} void CFileOp1::SetStatusText(UINT nID) {if(nID==0) nID=AFX_IDS_IDLEMESSAGE; CWnd *pWnd=AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR); if(pWnd) {AfxGetMainWnd()->SendMessage(WM_SETMESS AGESTRING ,nID); pWnd->SendMessage(WM_IDLEUPDATECMDUI); pWnd->UpdateWindow();}} BOOL CFileOp1::OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ) { TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; UINT nID =pNMHDR->idFrom; if (pTTT->uFlags & TTF_IDISHWND) { nID = ::GetDlgCtrlID((HWND)nID); if (nID) { TCHAR szFullText[256]; CString StrTipText; AfxLoadString(nID,szFullText); AfxExtractSubString(StrTipText,szFullText,1,′′); if(!StrTipText.IsEmpty()) strcpy(pTTT->lpszText,StrTipText); pTTT->hinst = AfxGetResourceHandle(); return(TRUE); } } return(FALSE);} 五、将该对话框作为⼀个 SDI 或 MDI应⽤程序的主框架的⼦窗⼝,⽣成这样⼀个对话框后,当你把⿏标移到某个控件 (必须有相应的字符串资源 )上时,就会出现该控件的 ToolTip和状态条信息。

C语言实现图形界面登陆窗口

纯C语言实现图形界面登陆窗口一下是界面图:编程工具是:VC6.0请根据个人需要对源代码进行修改使用,图片放在工程文件夹中。

新建时应该将文件后缀设置为.cpp以下是程序灯源代码:#include<graphics.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<String.h>#include<windows.h>#define LEN_A 20//账户长度#define LEN_P 10//密码长度typedef struct Account{char name[20];long int password;}InAccount;typedef struct inputAPword{InAccount account;int flag;}InputAPword;void inputbox(void);void cursor(void);void cursor2(void);void name(void);int MouseEvent(IMAGE);InputAPword menu2(void){initgraph(640,480);//初始化图形界面IMAGE Img1;//声明一个IMAGE变量IMAGE Img2(640,480);//声明一个IMAGE变量char input1[LEN_A];//用于接收输入的字符串char input2[LEN_P];//用于接收输入的字符串int j;InputAPword account;loadimage(&Img1,_T("girl4.bmp"));//加载图片SetWorkingImage(&Img1);//设置当前绘图设备为Img1setlinestyle(PS_SOLID, NULL, 2);//设置线的样式setfont(64,0,"华文隶书");//设置字体的样式和大小settextcolor(RGB(134,0,255));//设置字体的颜色setlinecolor(RGB(16,16,16));//设置线的颜色setbkmode(TRANSPARENT);//设置字体的背景为透明outtextxy(50,50,_T("A 用户登录"));//显示汉字settextcolor(RGB(0,0,0));//设置字体的颜色rectangle(50,150,350,340);//画矩形框rectangle(254,515,302,585);//画一个矩形框fillrectangle(100,280,173,315);//登录框fillrectangle(223,280,296,315);//取消框SetWorkingImage();//恢复当前绘图设备为默认设备putimage(0,0,&Img1);//显示图片do{name();//显示文字信息setbkmode(OPAQUE);//设置字体背景为默认setbkcolor(RGB(255,255,255));cursor();//显示输入框以及闪烁的光标for(j=0;LEN_A;j++){//限制输入,最多允许输入LNE位数据input1[j]=getch();//读取键盘输入的字符并存入数组outtextxy(161+8*j,193,input1[j]);//将字符显示在图片上if(input1[j]==8){//按删除键时的操作input1[j-1]=0;//字符数组内容删除一位outtextxy(161+8*j,193," ");//将字符遮掩outtextxy(161+8*(j-1),193," ");//将字符遮掩j -=2;//数组坐标后退两个if(j<=-1){//当回退到头时的处理input1[0]='\0';//对数组进行标记break;//退出本次输入}continue;}else if(input1[j]==13){//按回车键时的处理input1[j]='\0';//将数组的最后一个数据标记为'\0'if(j==0){//无任何输入,且按下回车时的处理outtextxy(161+8*j,193," ");//将回车显示的字符遮掩outtextxy(161+8*(j-1),193," ");//将回车显示的字符遮掩input1[0]='\0';//对数组进行进行标记}break;//退出本次输入}}setbkmode(OPAQUE);//设置字体背景为默认setbkcolor(RGB(255,255,255));cursor2();//光标聚到下一个输入框的开始位置for(j=0;j<LEN_P;j++){//密码输入input2[j]=getch();//获取从键盘输入的字符outtextxy(161+8*j,234,"*");//以*号显示,起到遮掩密码的作用if(input2[j]==8){//按下删除键时的处理input2[j-1]=0;//对数组进行处理outtextxy(161+8*j,234," ");//对需要进行删除处理的字符进行遮掩outtextxy(161+8*(j-1),234,_T(" "));//对需要删除进行处理的字符进行遮掩j-=2;//对数组进行处理if(j<=-1){//当删除到头时进行的操作input2[0]='\0';//对数组进行标记break;//退出本次输入}continue;}else if(input2[j]==13){//按下回车时的操作outtextxy(161+8*j,234," ");input2[j]='\0';//将数组的最后一位标记为‘\0’if(j==0){//无任何操作,直接进行回车输入时的操作outtextxy(161+8*j,234," ");//对输入回车时产生的字符进行遮掩outtextxy(161+8*(j-1),234,_T(" "));//对输入回车时产生的字符进行遮掩input2[0]='\0';//对数组进行标记}break;//结束本次输入}}getimage(&Img2,0,0,640,480);//保存当前显示的界面}while((input1[0]=='\0')&&(input2[0]=='\0'));//当第一个或第二个框有一个未输入时则继续循环输入switch(MouseEvent(Img2)){case 1:{account.flag=1;strcpy(,input1);//将输入的字符存入结构体account.account.password=atol(input2);//将输入的密码存入结构体break;}case 2:{account.flag=2;}}return account;closegraph();}void name(void)//显示文字信息函数{setfont(25,0,"宋体");//设置字体的大小和样式setbkmode(TRANSPARENT);settextcolor(RGB(0,0,0));outtextxy(90,190,_T("账号"));//显示汉字outtextxy(90,233,_T("密码"));outtextxy(111,285,_T("登录"));outtextxy(234,285,_T("取消"));setfont(18,0,"宋体");//setbkmode(OPAQUE);//设置字体背景为默认}void cursor(void)//闪烁光标的作用{while(1){//如果键盘没有进行输入这循环闪烁inputbox();if(kbhit()){//当键盘有反应时kbhit()会返回一个非零值break;//退出闪烁}Sleep(300);//延时setlinestyle(PS_SOLID,NULL,2);//设置线的样式为PS_SOLID,宽度为2line(161,194,162,210);//光标的描绘Sleep(300);//延时}}void cursor2(void)//第二个光标{do{Sleep(30);//延时setlinestyle(PS_SOLID,NULL,2);//设置字体样式line(162,234,163,251);//光标的描绘Sleep(30);//延时}while(!kbhit());//当键盘有反应时kbhit()会返回一个非零值}void inputbox(void)//描绘两个输入框{int i;for(i=0;i<2;i++){bar(150,188+41*i,300,216+41*i);//账户栏和密码输入栏setcolor(RGB(0,0,0));rectangle(150,188+41*i,300,216+41*i);}}int MouseEvent(IMAGE Img)//鼠标判断{MOUSEMSG m;//声明一个鼠标变量int value=0;//返回值while(!value){m=GetMouseMsg();//获取鼠标的信息switch(m.uMsg){case WM_MOUSEMOVE://当鼠标又移动时的信息处理{if((m.x>=100&&m.x<=173)&&(m.y>=280&&m.y<=315)){//对鼠标的X,Y 坐标进行判断SetWorkingImage(&Img);//设置当前的绘图设备setlinestyle(PS_SOLID,NULL,2);setlinecolor(RGB(252,15,0));//线的颜色,红色settextcolor(RGB(252,15,0));//字体颜色,红色setfont(25,0,"宋体");//设置字体的大小和样式setbkmode(TRANSPARENT);fillrectangle(100,280,173,315);//登录框outtextxy(111,285,_T("登录"));SetWorkingImage();//恢复当前的绘图设备putimage(0,0,&Img);//显示当前的图画}else if((m.x>=223&&m.x<=296)&&(m.y>=280&&m.y<=315)){//对鼠标的X,Y坐标进行判断SetWorkingImage(&Img);//设置当前的绘图设备setlinestyle(PS_SOLID,NULL,2);setlinecolor(RGB(252,15,0));//线的颜色,红色settextcolor(RGB(252,15,0));//字体颜色,红色setfont(25,0,"宋体");//设置字体的大小和样式setbkmode(TRANSPARENT);fillrectangle(223,280,296,315);//取消框outtextxy(234,285,_T("取消"));SetWorkingImage();//恢复当前的绘图设备putimage(0,0,&Img);//显示当前的图画}else{SetWorkingImage(&Img);//设置当前的绘图设备setlinecolor(RGB(134,0,255));//设置线的颜色settextcolor(RGB(134,0,255));//字体颜色,黑色fillrectangle(100,280,173,315);//登录框fillrectangle(223,280,296,315);//取消框setbkcolor(RGB(255,255,255));///字体背景色,白色setfont(25,0,"宋体");//设置字体的大小和样式outtextxy(111,285,_T("登录"));outtextxy(234,285,_T("取消"));SetWorkingImage();//恢复当前绘图设备为默认设备putimage(0,0,&Img);}break;}case WM_LBUTTONDBLCLK://鼠标双击左键时的信息{if((m.x>=100&&m.x<=173)&&(m.y>=280&&m.y<=315)){//登陆按键范围value=1;}else if((m.x>=223&&m.x<=296)&&(m.y>=280&&m.y<=315)){//取消按键范围value=2;}break;}}}return value;//返回值}void main(){long int a;InputAPword account;account = menu2();a = account.account.password;system("cls");printf("这是测试的密码:%ld",a);printf("%s",);getchar();getchar(); }。

VS2010MFC基于对话框程序的登录窗口实现

VS2010MFC基于对话框程序的登录窗口实现【MFC-10】VS2010/MFC基于对话框程序的登录窗口实现标签:MFCC++VS20102016-02-26 17:33 3341人阅读评论(0) 收藏举报分类:MFC(4)C++(14)版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]一、开发环境1、VS2010;2、C++ / MFC;二、登录窗口设计示例1、新建基于对话框的MFC项目,命名为“UserLogin”;2、资源视图中插入一个Dialog,修改ID为:IDD_LOGIN_DIALOG,标题修改为登录对话框,并添加控件,结果如图1所示;图13、创建登录对话框类:CLoginDlg,添加控件变量如图2所示;图24、将对话框类头文件添加到UserLogin.cpp;[cpp] view plain copy// UserLogin.cpp : 定义应用程序的类行为。

//#include "stdafx.h" #include "UserLogin.h" #include "UserLoginDlg.h" #include "LoginDlg.h"5、修改UserLogin.cpp函数BOOLCUserLoginApp::InitInstance()如下:[cpp] view plain copyBOOL CUserLoginApp::InitInstance() { // 如果一个运行在Windows XP 上的应用程序清单指定要// 使用ComCtl32.dll 版本 6 或更高版本来启用可视化方式,//则需要InitCommonControlsEx()。

否则,将无法创建窗口。

INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的// 公共控件类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档