MFC学习实践——创建登录对话框

自学存档专用抬头

       Windows应用程序首先会调用WinMain入口函数, 再注册并创建窗口类, 并显示更新窗口,采用消息循环机制与操作系统交互. 操作系统接收到程序的窗口消息,将消息传入到应用程序的消息队列中,应用程序通过一些预处理(临时取消或新增相应)然后回传给系统,系统调用窗口过程对消息进行处理。

       MFC相比Win32来说,内层框架封装了WinMain函数。必须从CWinApp类派生程序类CxxxApp,并定义了一个全局对象theApp,该类的InitInstance虚函数需重写来实现窗体的创建,而且MFC也可以直接实例或派生其窗体类。

效果图如下:

                                                   MFC学习实践——创建登录对话框_第1张图片

登录对话框所需新建如下:

                        MFC学习实践——创建登录对话框_第2张图片

                        MFC学习实践——创建登录对话框_第3张图片

Tips:

    MFC通过自调用消息映射机制(通过C语言宏将消息与消息函数一一对应)调用相应的消息处理函数。在DECLARE_MESSAGE_MAP中为对应的映射方式。将Windows消息分为三大类:普通窗口函数、命令消息、控件通知消息。

        1)普通窗口函数——关联与操作窗口相关的动作,以ON_WM宏进行映射,如鼠标点击,键盘输入;

        2)命令消息——来自菜单、工具栏和加速键的通知消息,使用ON_COMMAND宏进行隐射响应,一个函数可对多个同名ID按钮相应;

        3)控件通知消息——通过WM_COMMAND消息发送给父窗口。

    以Afx开头表明为全局函数,Messagebox也适用于win32 SDK, 可以自定义标题.

 

进入正题,先创建一个简易版的登录界面:

1、先创建一个SDI程序,然后在资源视图中新增一个对话框,新建对应的对话框类可以左键双击对话框,或是点击MFC ClassWizard。(该类派生自CDlialog)

                                  MFC学习实践——创建登录对话框_第4张图片

 

2、在对话框视图中拖拽控件工具形成基本的登录界面,密码控件需勾选Password属性保护输入信息。

                                   MFC学习实践——创建登录对话框_第5张图片     

 

3、右击对话框“OK”按钮进入MFC ClassWizard,创建响应消息函数OnOK。

                               MFC学习实践——创建登录对话框_第6张图片

 

4、双击图中“1”选中的ID号,或是选中后按“2 增加变量”,即可打开新增变量视图,在类别选择Control,输入对应的变量名即可。

                              MFC学习实践——创建登录对话框_第7张图片

5、接下来完善代码, 重载对话框新类的OnOK判定登录信息, 然后在工程App类InitInstance中对判定结果实现不同情况下的操作.

      1)定义两个局部变量, 用于接收控件文本; 然后是否if判定用户名与密码是否匹配;

void CDlgLogin::OnOK() 
{
	// TODO: Add extra validation here
	CString username,password;
	m_edit_username.GetWindowText(username);
	m_edit_password.GetWindowText(password);
//如果不想使用以上变量进行传递,也可以增加变量型控件对象CString,直接使用UpdateData(TRUE)
//将输入的值转入到对应的CString控件变量中
//
	if(username=="Jennifer"&&password=="520")
	{
		CDialog::OnOK();
	}
	else 
	{
		AfxMessageBox("user don't exists, please try again!");
                //此处也可以设置密码清零以及文本焦点
                m_edit_password.SetWindowText("");//清空密码文本框
 		m_edit_password.SetFocus();//设置密码文本框为当前的焦点,即无需点击密码文本框
	}
}

      2)在CxxxxApp中的InitInstance中实例化创建对象Login(注意添加CDlgLogin头文件,否则无法创建实例),并在并使用DoModal判定Login是否执行,成功则创建程序主窗口,否则返回提示.

 

	#include "CDlgLogin.h"
        ......
        ......


        // Register the application's document templates.  Document templates
	//  serve as the connection between documents, frame windows and views.
	CDlgLogin Login;
	if(IDOK==Login.DoModal())
	{
		CSingleDocTemplate* pDocTemplate;    
                ... ...
	        m_pMainWnd->ShowWindow(SW_SHOW);
                //这里可以定义主程序界面的标题
                //m_pMainWnd->SetWindowText("成功登陆!!!");
		m_pMainWnd->UpdateWindow();
	}
	else
	{
		AfxMessageBox("please try again!");        //提示错误
		return FALSE;

	} 

6、大功告成

                                  MFC学习实践——创建登录对话框_第8张图片

#190316#

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(项目集)