前言
- 各位师傅大家好,我是qmx_07,今天来给大家讲解登录框的小练习,就此SDK的相关学习就此结束
登录框
对话框绘制
- 通过添加DIaLog对话框,添加 static test文本、Edit Control输入框、Button按钮,制作登录框
- password输入框 需要将密码勾选为True,密码不可见
- 对话框整体ID:IDD_DIALOG1
- 账户名输入框 控件ID:IDC_EDIT_USERNAME
- 密码输入框 控件ID:IDC_EDIT_PASSWORD
- 提交按钮 控件ID:IDC_BUTTON_LOGIN
创建非模态对话框
登录框的消息处理:
INT_PTR CALLBACK login(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
case WM_CLOSE:
{
EndDialog(hDlg, 0);
PostQuitMessage(0);
return TRUE;
}
}
return (INT_PTR)FALSE;
}
创建绑定非模态对话框:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 将实例句柄存储在全局变量中
HWND hWnd = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, login);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
画面演示:
- 对话框程序 已经创建好了,但是 在左上角不是很美观和方便,需要调整到 windows窗口中心位置
调整登录框显示位置
- 想要调整登录框位置, 需要引用<atltypes.h>这个头文件库,里面包含一些用于处理和管理图形设备的接口函数
#include <atltypes.h>
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 将实例句柄存储在全局变量中
HWND hWnd = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, login);
if (!hWnd)
{
return FALSE;
}
CRect rect;//表示矩形地址的结构体
GetWindowRect(hWnd, &rect);//获得窗口的屏幕坐标矩形,用于存储左上角和右下角的坐标值
int nX = GetSystemMetrics(SM_CXFULLSCREEN);//获得全屏的宽度
int nY = GetSystemMetrics(SM_CYFULLSCREEN);//获得全屏的高度
int nW = rect.Width();//获得窗口的宽度
int nH = rect.Height();//获得窗口的高度
MoveWindow(hWnd, (nX - nW) / 2, (nY - nH) / 2, nW, nH, TRUE);//让窗口来到正中心
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
画面演示:
功能实现
INT_PTR CALLBACK login(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
{
switch (HIWORD(wParam))
{
case BN_CLICKED:
{
if (LOWORD(wParam) == IDC_BUTTON_LOGIN)
{
//获得输入框句柄
HWND hUserWnd = GetDlgItem(hDlg, IDC_EDIT_USERNAME);
HWND hPassWnd = GetDlgItem(hDlg, IDC_EDIT_PASSWORD);
//获得文本长度
DWORD userLength = GetWindowTextLength(hUserWnd);
DWORD passLength = GetWindowTextLength(hPassWnd);
//申请内存
WCHAR* UserBuffer = new WCHAR[userLength + 1];
WCHAR* PassBuffer = new WCHAR[passLength + 1];
//获得控件文本
GetWindowText(hUserWnd, UserBuffer, userLength + 1);
GetWindowText(hPassWnd, PassBuffer, passLength + 1);
if (wcscmp(UserBuffer, L"qmx_07") == 0 && wcscmp(PassBuffer, L"123456") == 0)
{
MessageBox(NULL, L"登录成功", L"提示", MB_OK);
}
else
{
MessageBox(NULL, L"登录失败", L"提示", MB_OK);
}
}
break;
}
}
}
break;
case WM_CLOSE:
{
EndDialog(hDlg, 0);
return TRUE;
}
}
return (INT_PTR)FALSE;
}
- 通过点击按钮,获取文本信息,进行对比内容
画面演示:
总结
- 通过绘制登录框,调整窗口位置,获得文本信息 进行对比,实现了登录框的练习演示