我的第一个MFC程序------登录对话框简单实现
2013-02-25 18:56
537 查看
声明:主要参考网址http://wenku.baidu.com/view/52582de8172ded630b1cb6a6.html
如果文中有错误的地方,还请各路大神指正、教育,谢谢。
功能:在进入单文档之前弹出登录界面,在正确输入用户名、密码的情况下才可跳转。
总结记录:
1、建立一个MFC单文档应用程序;
2、在Resource视图中添加一个Dialog并建立对应的类(public继承CDialog);
3、添加必要的控件,如静态文本框(用于描述控件和显示当前时间)、文本编辑框(用于输入用户名和密码);
4、给用户名和密码(均为文本编辑框)关联类成员变量m_password、m_user。此时运行程序并没有出现添加的Dialog。在MFC中窗口的注册和产生由Creat()完成,而在产生窗口之前,MFC提供了OnCreate()给实现者对要生成的窗口进行修改,百度百科解释如下:
一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate()函数主要是用来响应此消息的。因为在MFC里面用一种消息映射的机制来响应消息,也就是可以用函数来响应相应的消息。就拿CMainFrame类来说,当窗口创建后会产生WM_CREATE消息,我们可以在OnCreate函数里实现我们要在窗口里面增加的东西,例如按扭,状态栏,工具栏等。
这就意味着我们可以重载OnCreate()来实现在某个窗口创建时附加首先要做的事情。于是,在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中return 0;前添加如下代码,其中DoMdal()创建一个模态对话框(在当前对话框操作完成之前不能对其它对话框进行操作):
5、添加默认Button(确认和取消)的关联函数OnOK()和OnCancel();
6、为了让界面不那么单调,我在右上角加了一个显示当前系统时间的静态文本控件。此处参照孙鑫老师的教学视频,由于当时看的时候距现在时间有点长,具体是哪个课程忘记了(网上有免费下载)。这里要用到OnInitDialog()函数。顾名思义,这是初始化函数,一些控件的初始化即可在这里面完成,静态文本控件当然也不例外。这里要注意一下,有的时候这个函数默认是没有的,这时候需要手动进行添加。为了达到效果在这个函数里面调用了SetTimer()函数来进行计时,对于这个函数,MSDN解释如下:
This method installs a system timer. A time-out value is specified, and every time a time-out occurs, the system posts a WM_TIMER message to the message queue of the installing application or passes the message to an application-defined TimerProccallback function.
它主要用来记时,在指定的时间间隔中发送一次WM_TIMER消息给应用程序消息队列或者发送消息给定义的应用程序TimerProccallback函数。(翻译不准的话请指正,免得误人子弟)。只要计时函数是不够的,还需要有有响应处理函数,这时需要另外一个函数OnTimer(),同样参考MSDN:
The framework calls this member function after each interval specified in the SetTimer member function used to install a timer.
由此知道,这个成员函数由框架在每隔SetTimer()指定的时间间隔中调用一次。
上代码:
运行效果如下:
如果文中有错误的地方,还请各路大神指正、教育,谢谢。
功能:在进入单文档之前弹出登录界面,在正确输入用户名、密码的情况下才可跳转。
总结记录:
1、建立一个MFC单文档应用程序;
2、在Resource视图中添加一个Dialog并建立对应的类(public继承CDialog);
3、添加必要的控件,如静态文本框(用于描述控件和显示当前时间)、文本编辑框(用于输入用户名和密码);
4、给用户名和密码(均为文本编辑框)关联类成员变量m_password、m_user。此时运行程序并没有出现添加的Dialog。在MFC中窗口的注册和产生由Creat()完成,而在产生窗口之前,MFC提供了OnCreate()给实现者对要生成的窗口进行修改,百度百科解释如下:
一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate()函数主要是用来响应此消息的。因为在MFC里面用一种消息映射的机制来响应消息,也就是可以用函数来响应相应的消息。就拿CMainFrame类来说,当窗口创建后会产生WM_CREATE消息,我们可以在OnCreate函数里实现我们要在窗口里面增加的东西,例如按扭,状态栏,工具栏等。
这就意味着我们可以重载OnCreate()来实现在某个窗口创建时附加首先要做的事情。于是,在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中return 0;前添加如下代码,其中DoMdal()创建一个模态对话框(在当前对话框操作完成之前不能对其它对话框进行操作):
// 在返回前加载登录界面 CDlg_Login dlg; dlg.DoModal();
5、添加默认Button(确认和取消)的关联函数OnOK()和OnCancel();
void CDlg_Login::OnOK() { // TODO: Add extra validation here this->UpdateData(true); CWnd *pWnd = NULL; // 验证用户名、密码是否正确 if (this->m_user != "test") { MessageBox("用户名错误,请重新输入!"); m_user = ""; pWnd = GetDlgItem(IDC_USER); // 获取IDC_USER的控件指针 pWnd->SetFocus(); // 设置焦点 UpdateData(false); } else if (this->m_password != "test") { MessageBox("密码错误,请重新输入!"); m_password = ""; pWnd = GetDlgItem(IDC_PASSWORD); pWnd->SetFocus(); UpdateData(false); } else { CDialog::OnOK(); } }
void CDlg_Login::OnCancel() { // TODO: Add extra cleanup here AfxGetMainWnd()->PostMessage(WM_QUIT); // 发送WM_QUIT消息退出程序 CDialog::OnCancel(); }
6、为了让界面不那么单调,我在右上角加了一个显示当前系统时间的静态文本控件。此处参照孙鑫老师的教学视频,由于当时看的时候距现在时间有点长,具体是哪个课程忘记了(网上有免费下载)。这里要用到OnInitDialog()函数。顾名思义,这是初始化函数,一些控件的初始化即可在这里面完成,静态文本控件当然也不例外。这里要注意一下,有的时候这个函数默认是没有的,这时候需要手动进行添加。为了达到效果在这个函数里面调用了SetTimer()函数来进行计时,对于这个函数,MSDN解释如下:
This method installs a system timer. A time-out value is specified, and every time a time-out occurs, the system posts a WM_TIMER message to the message queue of the installing application or passes the message to an application-defined TimerProccallback function.
它主要用来记时,在指定的时间间隔中发送一次WM_TIMER消息给应用程序消息队列或者发送消息给定义的应用程序TimerProccallback函数。(翻译不准的话请指正,免得误人子弟)。只要计时函数是不够的,还需要有有响应处理函数,这时需要另外一个函数OnTimer(),同样参考MSDN:
The framework calls this member function after each interval specified in the SetTimer member function used to install a timer.
由此知道,这个成员函数由框架在每隔SetTimer()指定的时间间隔中调用一次。
上代码:
BOOL CDlg_Login::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here SetTimer(1, 1000, NULL); // 计时,以1000毫秒为单位 return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDlg_Login::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CTime time = CTime::GetCurrentTime(); // 获取当前系统时间 CString strtime = time.Format(_TEXT("日期:%Y-%m-%d 时间:%H:%M:%S")); // 格式化为CString类型 SetDlgItemText(IDC_TIME, strtime); // 在IDC_TIME中显示 CDialog::OnTimer(nIDEvent); }
运行效果如下:
相关文章推荐
- 【MFC-10】VS2010/MFC基于对话框程序的登录窗口实现
- MFC中基于对话框程序快捷键的实现
- MFC中基于对话框程序快捷键的实现
- php实现简单用户登录功能程序代码
- 基于对话框的MFC程序中,实现非模态子窗口在任务栏显示图标以及窗口左上角加图标
- 第一个成功的MFC对话框程序
- 不用splitter控件 简单实现对mfc对话框的分割的方法
- MFC对话框简单实现窗口全透明的方法
- go语言实现一个简单的登录注册web小程序
- 用VC6.0建立MFC工程,建立对话框和简单的实现跳转
- MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现
- 模仿MFC实现简单画图程序
- MFC基于对话框的的多点触控简单画图程序
- MFC中基于对话框程序快捷键的实现
- MFC 简单的用户登录界面(在主程序窗口之前)
- [转]MFC中基于对话框程序快捷键的实现。
- MFC实现简单点对点聊天程序
- MFC中基于对话框程序快捷键的实现
- 在一个MFC的对话框应用程序中,实现程序开始时就隐藏对话框界面方法(收集)
- MFC简单的在对话框程序中加工作线程