Windows编程与MFC # 3 基于对话框的应用程序(5)

登录对话框

绝大对数软件系统都有登录窗口,完成如下功能:
1、基本登录窗口
2、限制录入信息
Windows编程与MFC # 3 基于对话框的应用程序(5)_第1张图片
(1)参照界面,完成控件的添加和布局,并修改ID;
(2)修改密码框的属性Password改为True;
(3)为按钮添加消息函数

void CLoginDlg::OnClickedButtonCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	CDialogEx::OnCancel();
}

CDialogEx::OnCancel()函数通过调用CDialogEx::EndDialog()函数关闭对话框。关闭对话框后,DoModal()会返回值IDCANCEL。

void CLoginDlg::OnClickedButtonLogin()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	if (m_strUser.IsEmpty() || m_strPassword.IsEmpty())	{
		AfxMessageBox(_T("用户名或密码不能为空"));
		return;
	}

	if (m_strUser == _T("admin") && m_strPassword == _T("123"))	{
		AfxMessageBox(_T("OK"));
		CDialogEx::OnOK();
	}
	else	{
		AfxMessageBox(_T("用户名或者密码错误!"));
	}
}

CDialogEx::OnOK()函数通过调用CDialogEx::EndDialog()函数关闭对话框。关闭对话框后,DoModal()会返回值IDOK。
修改密码框回显符
为“密码”文本编辑框添加Control型变量,通过SetPasswordChar()函数设置符号。
限制密码框只能输入数字
So easy, 设置密码文本框的Number属性为True。
限制密码框只能输入字母
(1)从CEdit类派生出新类CMyEdit
Windows编程与MFC # 3 基于对话框的应用程序(5)_第2张图片
(2)为CMyEdit类添加WM_CHAR消息函数OnChar()。
Windows编程与MFC # 3 基于对话框的应用程序(5)_第3张图片
(3)修改OnChar()函数。

void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if ( nChar >= 'a' && nChar <= 'z' //小字字母
		|| nChar>='A'&&nChar<='Z')//大写字母
	{
		CEdit::OnChar(nChar, nRepCnt, nFlags);
	}
	else
		return;
}

(4)将添加的CEdit变量改为CMyEdit类型。

为按钮添加图标
(1)使用Bitmap方式
A)将按钮的Bitmap属性设为true
B)为按钮添加变量
C)新建BITMAP,ID为IDB_BITMAP1,并绘制
D)然后在初始化中加入如下代码:
HBITMAP hBmp=::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
m_Btn.SetBitmap(hBmp);

(2)使用图片方式
HBITMAP hBitmap = (HBITMAP)::LoadImage(
NULL,
“E://a.bmp”, // 图片全路径
IMAGE_BITMAP, // 图片格式
0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);

HANDLE LoadImage(
HINSTANCE hinst, // 若加载程序外部资源传NULL,否则一般传AfxGetInstanceHandle()
LPCTSTR lpszName, // 图片名称或全路径
UINT uType, // 图片类型:IMAGE_BITMAP或IMAGE_ICON或IMAGE_CURSOR
int cxDesired,
int cyDesired,
UINT fuLoad // 一般为LR_DEFAULTCOLOR | LR_CREATEDIBSECTION
);
按Image的实际尺寸加载:cxDesired=0,cyDesired=0并且fuLoad不指定LR_DEFAULTSIZE。
按指定大小加载: cxDesired,cyDesired不为0并且fuLoad不指定LR_DEFAULTSIZE,Image会根据实际大小缩放。
按Windows系统默认的Icon或Cursor大小(一般为32x32)加载Icon或Cursor:cxDesired=0,cyDesired=0, fuLoad指定LR_DEFAULTSIZE,Image会根据实际大小缩放。 注意: LR_DEFAULTSIZE只对Icon和Cursor起作用,对Bitmap不起作用。
fuLoad:若从独立于程序的Image文件(.bmp,.ico)加载,请指定标志LR_LOADFROMFILE。

旋钮的使用

使用旋钮控制数字的变化:
1、整数
2、浮点数
Windows编程与MFC # 3 基于对话框的应用程序(5)_第4张图片
【编程步骤】
建立“基于对话框”的MFC工程Spin。
添加一个文本编辑框和一个旋钮控件。
为文本编辑框添加int型的关联变量m_nValue。
为旋钮添加变量m_spin设置旋钮属性,Auto Buddy为True,Set Buddy Interge 为True。
【注意】
调整控件的Tab键顺序。旋钮控件不是把离它最近的控件作为伙伴,伙伴的选择是以Tab键顺序为参照,伙伴控件的Tab键顺序必须紧挨着旋钮控件且比它小 。
【自定义】
可以设置旋钮的范围SetRange()函数。
循环显示,属性Wrap为True。

浮点数旋钮

【编程步骤】

  1. 再添加一个文本编辑框和一个旋钮控件。
  2. 为文本编辑框添加double型的关联变量m_dValue2。
  3. 为新旋钮添加变量m_spin2设置旋钮属性,Auto Buddy为True。
  4. 为CSpinDlg添加WM_VSCROLL消息响应函数OnVScroll()。

Windows编程与MFC # 3 基于对话框的应用程序(5)_第5张图片
5. 改写函数OnVScroll()。

void CspinDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(pScrollBar->GetDlgCtrlID() == IDC_SPIN2)//如果垂直滚动的控件是旋钮IDC_SPIN2
	{
		m_dValue2 = nPos/10.0;
		UpdateData(FALSE);
	}
	CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}

6.为IDC_EDIT2添加EN_CHANGE消息响应函数OnChangeEdit2() 。
Windows编程与MFC # 3 基于对话框的应用程序(5)_第6张图片
7.改写函数OnChangeEdit2() 。

void CspinDlg::OnChangeEdit2()
{
	UpdateData(TRUE);
	int nPos = (int)(m_dValue2*10);
	m_spin2.SetPos(nPos);
}

8.编译、链接、运行

你可能感兴趣的:(Windows编程)