今天把用户管理界面大致完成了,主要涉及的功能为展示所有用户、删除当前用户、更改当前用户信息。
参考网址:
怎样在程序中让Edit Control显示或是隐藏
Edit Control
1、UI
用户管理界面,点击会议管理切换至会议管理界面,点击修改用户信息切换至用户信息修改页面,
当前用户显示当前登录的用户的用户名
用户信息修改页面,点击修改密码按钮后才能修改密码,需要输入旧密码才能修改新密码,
点击确认修改后更新当前用户信息。
2、代码
//处理用户管理对话框消息
INT_PTR CALLBACK DialogProcUserManagement(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg)
{
//初始化时列出所有用户的信息
case WM_INITDIALOG: {
HWND hUserList = GetDlgItem(hdlg, IDC_LIST2);
//设置listView的列信息包含哪些
LVCOLUMN col;
col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
//列标题
col.pszText = L"用户名";
//列宽
col.cx = 90;
// 子项索引,第一列无子项
col.iSubItem = 0;
ListView_InsertColumn(hUserList, 0, &col);
//第二列
col.pszText = L"用户邮箱";
col.cx = 160;
col.iSubItem = 2;
ListView_InsertColumn(hUserList, 1, &col);
//第三列
col.pszText = L"用户电话";
col.cx = 90;
col.iSubItem = 3;
ListView_InsertColumn(hUserList, 2, &col);
std::list<User> users = agendaService.listAllUsers();
int arrCount = 0;
LVITEM vitem;
vitem.mask = LVFIF_TEXT;
for (auto iter : users) {
vitem.pszText = StringToWchar(iter.getName());
vitem.iItem = arrCount;
//设置子项
vitem.iSubItem = 0;
ListView_InsertItem(hUserList, &vitem);
vitem.iSubItem = 1;
vitem.pszText = StringToWchar(iter.getEmail());
ListView_SetItem(hUserList, &vitem);
vitem.iSubItem = 2;
vitem.pszText = StringToWchar(iter.getPhone());
ListView_SetItem(hUserList, &vitem);
arrCount++;
}
HWND hCurrentUser = GetDlgItem(hdlg, IDC_STATIC3);
SetWindowText(hCurrentUser, StringToWchar(agendaService.getCurrentUser()->getName()));
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam)) {
//会议管理按钮
case IDC_BUTTON11:
{
EndDialog(hdlg, IDC_BUTTON11);
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProcMeetingManagement);
}
break;
//退出登录按钮
case IDC_BUTTON12:
{
if (MessageBox(hdlg, L"确定退出登录?", L"提示", MB_OKCANCEL) == IDOK) {
EndDialog(hdlg, IDC_BUTTON12);
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), NULL, DialogProcSignIn);
}
}
break;
//修改用户信息按钮
case IDC_BUTTON13:
{
EndDialog(hdlg, IDC_BUTTON13);
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG5), NULL, DialogProcUpdateUsers);
}
break;
//删除用户按钮
case IDC_BUTTON14:
{
if (MessageBox(hdlg, L"确定删除当前用户?", L"提示", MB_OKCANCEL) == IDOK) {
if (agendaService.deleteUser(agendaService.getCurrentUser()->getName(),
agendaService.getCurrentUser()->getPassword())) {
MessageBox(hdlg, L"当前用户已删除!", L"提示", MB_OK);
EndDialog(hdlg, IDC_BUTTON14);
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), NULL, DialogProcSignIn);
} else {
MessageBox(hdlg, L"删除失败!请重试", L"提示", MB_OK);
}
}
}
break;
}
}
break;
case WM_SYSCOMMAND:
{
if (wParam == SC_CLOSE) {
if (MessageBox(hdlg, L"确定退出程序?", L"提示", MB_OKCANCEL) == IDOK) {
PostQuitMessage(0);
}
}
}
break;
}
return (INT_PTR)FALSE;
}
//用户信息修改对话框消息处理
INT_PTR CALLBACK DialogProcUpdateUsers(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) {
WCHAR username[20], phone[20], email[40];
WCHAR pwd1[40], pwd2[40];
std::shared_ptr<User> currentUser = agendaService.getCurrentUser();
//记录是否点击了修改密码
static bool changePwd = false;
switch (msg)
{
case WM_INITDIALOG:
{
changePwd = false;
wcscpy_s(username, StringToWchar( currentUser->getName()));
wcscpy_s(phone, StringToWchar(currentUser->getPhone()));
wcscpy_s(email, StringToWchar(currentUser->getEmail()));
wcscpy_s(pwd1, StringToWchar(currentUser->getPassword()));
memset(pwd2, 0, sizeof pwd2);
SetDlgItemText(hdlg, IDC_EDIT9, username);
SetDlgItemText(hdlg, IDC_EDIT10, phone);
SetDlgItemText(hdlg, IDC_EDIT11, email);
SetDlgItemText(hdlg, IDC_EDIT12, pwd1);
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam)) {
//确认修改按钮
case IDC_BUTTON15:
{
if (MessageBox(hdlg, L"确认修改?", L"提示", MB_OKCANCEL) == IDOK) {
GetDlgItemText(hdlg, IDC_EDIT9, username, sizeof username);
GetDlgItemText(hdlg, IDC_EDIT12, pwd1, sizeof pwd1);
GetDlgItemText(hdlg, IDC_EDIT13, pwd2, sizeof pwd2);
if (wcscmp(pwd1, StringToWchar(agendaService.getCurrentUser()->getPassword())) != 0) {
MessageBox(hdlg, L"旧密码有误!", L"提示", MB_OK);
break;
}
else if (changePwd && lstrlen(pwd2) == 0) {
MessageBox(hdlg, L"新密码不能为空!", L"提示", MB_OK);
break;
}
GetDlgItemText(hdlg, IDC_EDIT10, phone, sizeof phone);
GetDlgItemText(hdlg, IDC_EDIT11, email, sizeof email);
if (agendaService.updateCurrentUser(WcharToString(username), (changePwd ? WcharToString(pwd2): WcharToString(pwd1)),
WcharToString(email), WcharToString(phone), 0)) {
EndDialog(hdlg, IDC_BUTTON15);
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG4), NULL, DialogProcUserManagement);
} else {
MessageBox(hdlg, L"更新失败!请重试", L"提示", MB_OK);
}
}
}
break;
//取消按钮
case IDC_BUTTON16:
{
EndDialog(hdlg, IDC_BUTTON16);
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG4), NULL, DialogProcUserManagement);
}
break;
//修改密码按钮
case IDC_BUTTON17:
{
if (!changePwd && MessageBox(hdlg, L"确认修改密码?", L"提示", MB_OKCANCEL) == IDOK) {
HWND hEdit12 = GetDlgItem(hdlg, IDC_EDIT12);
HWND hEdit13 = GetDlgItem(hdlg, IDC_EDIT13);
HWND hText5 = GetDlgItem(hdlg, IDC_STATIC5);
SetWindowText(hEdit12, L"");
Edit_Enable(hEdit12, true);
ShowWindow(hEdit13, SW_SHOW);
ShowWindow(hText5, SW_SHOW);
changePwd = true;
}
}
break;
}
}
break;
case WM_SYSCOMMAND:
{
if (wParam == SC_CLOSE) {
EndDialog(hdlg, SC_CLOSE);
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG4), NULL, DialogProcUserManagement);
}
}
break;
}
return (INT_PTR)FALSE;
}
运行效果
用户管理的初始界面,可以看到正确显示了所有用户的信息以及当前用户的名字。
点击修改用户信息进入用户信息修改对话框。只修改用户名
返回后可看到用户名正确显示
修改密码,旧密码错误时弹出错误提示
继续修改密码,设置新密码为空时弹出错误提示
正确设置密码后,重新登录可以成功。点击删除用户按钮删除当前用户
可以看到用户记录中该用户已被删去