添加当前模块大概功能的描述,希望不要把所有接口文档写在一个文件中,至少按模块分类。
CMyDlg::CMyDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG1, pParent)
, m_UserName(_T(""))
, m_PassWord(_T(""))
, m_OtherText(_T("这里是用户协议,不同意也得同意"))
{ }
双击注册提交 创建的函数
// 注册按钮的响应,在这个函数中需要检测相应的值
void CMyDlg::OnBnClickedRegisterButton()
{
UpdateData(TRUE);
// 判断用户名或密码是否为空,如果为空就提示,否则就输出内容
if (m_PassWord.IsEmpty() || m_UserName.IsEmpty())
MessageBox(L"请输入正确的用户名或密码");
else
MessageBox(m_UserName + L" " + m_PassWord);
}
如果用户调用了 UpdateData 函数就会间接的进行数据交换,用户每绑定一个变量到控件,该函数中就会多出一行代码用于支持数据交换。
[在响应父类 OnInitDialog
,消息的时候,这个函数也会被自动调用一次]
// 如果用户调用了 UpdateData 函数就会间接的进行数据交换,用户每绑定一个变量
// 到控件,该函数中就会多出一行代码用于支持数据交换。[在响应父类 OnInitDialog
// 消息的时候,这个函数也会被自动调用一次]
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_USERNAME, m_UserName);
DDX_Text(pDX, IDC_PASSWORD, m_PassWord);
DDX_Text(pDX, IDC_EDIT2, m_OtherText);
DDX_Control(pDX, IDC_USERNAME, m_UserNameCtrl);
DDX_Control(pDX, IDC_PASSWORD, m_PassWordCtrl);
}
// 在这两个宏的中间,编写相应消息对应的宏
BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
ON_BN_CLICKED(IDC_REGISTER_BUTTON, &CMyDlg::OnBnClickedRegisterButton)
END_MESSAGE_MAP()
// 响应对话框创建的消息
BOOL CMyDlg::OnInitDialog()
{
// 如果这个地方没有编写这句话,数据就不会在初始化的时候进行绑定
CDialogEx::OnInitDialog();
// 通过函数设置编辑框的输入长度
m_UserNameCtrl.SetLimitText(6);
m_PassWordCtrl.SetLimitText(8);
// 设置密码默认的填充字符
m_PassWordCtrl.SetPasswordChar('#');
return TRUE;
}
// CMyDlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "CMyWinApp.h"
#include "CMyDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMyDlg 对话框
// 将资源 ID 硬编码传入了父类的构造函数中,绑定了资源
CMyDlg::CMyDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG1, pParent)
, m_UserName(_T(""))
, m_PassWord(_T(""))
, m_OtherText(_T("这里是用户协议,不同意也得同意"))
{ }
// 如果用户调用了 UpdateData 函数就会间接的进行数据交换,用户每绑定一个变量
// 到控件,该函数中就会多出一行代码用于支持数据交换。[在响应父类 OnInitDialog
// 消息的时候,这个函数也会被自动调用一次]
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_USERNAME, m_UserName);
DDX_Text(pDX, IDC_PASSWORD, m_PassWord);
DDX_Text(pDX, IDC_EDIT2, m_OtherText);
DDX_Control(pDX, IDC_USERNAME, m_UserNameCtrl);
DDX_Control(pDX, IDC_PASSWORD, m_PassWordCtrl);
}
// 在这两个宏的中间,编写相应消息对应的宏
BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
ON_BN_CLICKED(IDC_REGISTER_BUTTON, &CMyDlg::OnBnClickedRegisterButton)
END_MESSAGE_MAP()
// 响应对话框的创建消息
BOOL CMyDlg::OnInitDialog()
{
// 如果这个地方没有编写这句话,数据就不会在初始化的时候进行绑定
CDialogEx::OnInitDialog();
// 通过函数设置编辑框的输入长度
m_UserNameCtrl.SetLimitText(6);
m_PassWordCtrl.SetLimitText(8);
// 设置密码默认的填充字符
m_PassWordCtrl.SetPasswordChar('#');
return TRUE;
}
// 注册按钮的响应,在这个函数中需要检测相应的值
void CMyDlg::OnBnClickedRegisterButton()
{
UpdateData(TRUE);
// 判断用户名或密码是否为空,如果为空就提示,否则就输出内容
if (m_PassWord.IsEmpty() || m_UserName.IsEmpty())
MessageBox(L"请输入正确的用户名或密码");
else
MessageBox(m_UserName + L" " + m_PassWord);
}
// CMyDlg.h: 头文件
//
#pragma once
// CMyDlg 对话框
class CMyDlg : public CDialogEx
{
public:
// 构造函数要求传入的参数是指向父类对象的指针(不是句柄)
CMyDlg(CWnd* pParent = nullptr);
// 和 [类向导] 相关,如果删除了这一行,那么类向导功能会不完整
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DIALOG1 };
#endif
protected:
// 支持变量和控件之间的数据交换
virtual void DoDataExchange(CDataExchange* pDX) override;
protected:
// 这是一个虚函数,用于响应对话框的创建消息
virtual BOOL OnInitDialog() override;
// 消息映射宏用于支持消息和对应函数的响应
DECLARE_MESSAGE_MAP()
public:
CString m_UserName;
CString m_PassWord;
CString m_OtherText;
afx_msg void OnBnClickedRegisterButton();
CEdit m_UserNameCtrl;
CEdit m_PassWordCtrl;
};