Windows c++界面开发初学(十二)win32

今天把用户管理界面大致完成了,主要涉及的功能为展示所有用户、删除当前用户、更改当前用户信息。

参考网址:
怎样在程序中让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;
}

运行效果

用户管理的初始界面,可以看到正确显示了所有用户的信息以及当前用户的名字。
这里写图片描述
点击修改用户信息进入用户信息修改对话框。只修改用户名
这里写图片描述
返回后可看到用户名正确显示
这里写图片描述
修改密码,旧密码错误时弹出错误提示
这里写图片描述
继续修改密码,设置新密码为空时弹出错误提示
这里写图片描述
正确设置密码后,重新登录可以成功。点击删除用户按钮删除当前用户
这里写图片描述
可以看到用户记录中该用户已被删去
这里写图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值