MFC的基本控件的使用~设计一个UI界面(二)
吃饱喝足(没睡够)之后呢,咱们继续接着上次界面的设计。
现在做个东西都需要登录注册,所以呢咱们就设计个登录注册的界面。
首先打开上次的文件定位到资源视图 找到Dialog文件夹右键插入一个Dialog
插入之后呢 找到新插入的Dialog,把上面的空间全部删除,我们自己来DIY,右键这个Dialog,在属性里修改一下ID,便于区分。
然后在这个Dialog上开始DIY ,所有的控件都是在工具箱里, 左边的数字和右边的数组一一对应,1是文本框显示文本的也可以用来显示图片,2是编辑框用来输入文本的,密码是以加密形式显示的,所以点击这个编辑框右键属性里面找到PassWord这个属性然后设为true,就可以了。3是按钮。 我们对文本框和按钮上面文字的修改,有两种方法,1:直接点击控件输入文字即可,2:点击控件右键属性找到一个叫Caption的在后面输入文本, Tips:可以好好看一下控件的属性。 注册面板也是同样的步骤,这里我就不重复了。
界面设计完之后我们就要开始写代码管理这些控件了。控件是由变量来关联的,而界面是由类关联的。
首先我们先做一下配置,新建一个文档用来存储用户名和密码,在文件目录下新建一个文档起名login后缀为.ini ,在里面输入用户名和密码 。然后在新建一个类其名为InfoFile 用来读取和写入,在文件目录下新建两个文本文档起名InfoFile后缀分别为.h和.cpp 。完成之后回到VS中把这个两个文件引用一下 右键项目添加现有项 选中这两个文件,最后添加就可以了。(一定要注意文件的后缀哦)
创建完成之后 打开InfoFile头文件(.h)
在里面输入代码。
#include <list>
#include <fstream>
#include <iostream>
#include <string>
#include <afxwin.h>#define _F_LOGIN "./login.ini"
using namespace std;class CInfoFile
{
public:
CInfoFile();
~CInfoFile();//读取登录信息
void ReadLogin(CString &name, CString &pwd);};
完成之后再在InfoFile源文件(.cpp)中输入代码
#include "stdafx.h"
#include "InfoFile.h"
CInfoFile::CInfoFile()
{
}
CInfoFile::~CInfoFile()
{
}
//读取登录信息
void CInfoFile::ReadLogin(CString & name, CString & pwd)
{
//创建文件输入对象
ifstream ifs;
//打开文件
ifs.open(_F_LOGIN);
char buf[1024] = { 0 };
//读取一行内容
ifs.getline(buf, sizeof(buf));
//char* 转换为CString
name = CString(buf);
ifs.getline(buf, sizeof(buf));
pwd = CString(buf);
//关闭文件
ifs.close();
}
完成之后下面给按钮添加事件,回到登录界面,然后双击登陆按钮会直接进入到脚本中,就直接创建了按钮的点击事件。
然后在方法里面添加我们的判断事件。不过要先引用InfoFile的头文件。在脚本中最上面引用一下。
//登录按钮点击事件
void CLoginDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码//把控件中的值更新到变量中
UpdateData(TRUE);////把变量更新到控件中 这两个要好好区分一下哦
//UpdateData(FALSE)if (c_user.IsEmpty() || m_psd.IsEmpty())
{
//消息提示框
MessageBox(TEXT("用户名或密码不能为空"));
return;
}CInfoFile file;
CString user, psd;
//读取信息
file.ReadLogin(user, psd);
if (user == c_user)
{
if (psd == m_psd)
{
//关闭当前窗口
DialogBox:OnCancel();
}
else
{
MessageBox(TEXT("密码输入错误"));
}
}
else
{
MessageBox(TEXT("用户名输入错误"));
}}
然后现在就可以运行一下看一下效果。
输入用户名,密码点击登录 是不是就进去了呢,不过不论你输不输入用户名密码 ,直接敲击回车或者点击X号的话是不是也直接进入下一个窗口了呢。所以我们就先解决一下这个Bug.
首先是回车问题: 回到类视图中找到CLoginDlg 文件 ,右键属性 在属性页中,点击重写,找到回车对应的事件 OnOk 添加这个事件。会直接进入到这个事件中。把他的returnCDialogEx::OnOK() 注释掉 就解决了。
下面来解决X号问题:
还是这个界面右键属性 ,不过这个是点击消息,然后找到WM_CLOSE 添加这个事件,然后把它自带的事件注销掉,我们仍然DIY 添加一句exit(0); 就解决了。
再运行一下是不是这两个小Bug已经解决了呢。
好了 ,到这里先把登录事件写完,下一篇在写注册事件。