绝大对数软件系统都有登录窗口,完成如下功能:
1、基本登录窗口
2、限制录入信息
(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
(2)为CMyEdit类添加WM_CHAR消息函数OnChar()。
(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、浮点数
【编程步骤】
建立“基于对话框”的MFC工程Spin。
添加一个文本编辑框和一个旋钮控件。
为文本编辑框添加int型的关联变量m_nValue。
为旋钮添加变量m_spin设置旋钮属性,Auto Buddy为True,Set Buddy Interge 为True。
【注意】
调整控件的Tab键顺序。旋钮控件不是把离它最近的控件作为伙伴,伙伴的选择是以Tab键顺序为参照,伙伴控件的Tab键顺序必须紧挨着旋钮控件且比它小 。
【自定义】
可以设置旋钮的范围SetRange()函数。
循环显示,属性Wrap为True。
【编程步骤】
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() 。
7.改写函数OnChangeEdit2() 。
void CspinDlg::OnChangeEdit2()
{
UpdateData(TRUE);
int nPos = (int)(m_dValue2*10);
m_spin2.SetPos(nPos);
}
8.编译、链接、运行