MFC设计人事管理系统

文章详细描述了在MFC环境下修复登录界面的几个问题,包括处理回车、关闭按钮和ESC键的响应。接着介绍了如何创建和初始化树视图,以及利用CSplitterWnd类拆分窗口。此外,还展示了如何搭建个人信息界面并实现界面挂载功能,通过自定义消息进行通信。
摘要由CSDN通过智能技术生成

双击登录按钮,进入Button的编写

验证输入内容是否为空

//登录按钮点击事件
	UpdateData(TRUE)
	if (m_user.IsEmpty() || m_pwd.IsEmpty())
	{
		MessageBox(TEXT("输入内容不能为空"));-
	}

验证输入内容是否符合要求(密码和用户名是否一致)

//获取正确的值
	CInfoFile file;
	CString name, pwd;
	file.ReadLogin(name, pwd);
	if (name == m_user)//用户名一致
	{
		if (pwd == m_pwd)//密码一致
		{
			//关闭当前对话框
			CDialog::OnCancel();
		}
		else { MessageBox(TEXT("密码有误")); }
	}
	else
	{
		MessageBox(TEXT("用户名有误"));
	}

运行代码后弹出对话框

 

为了便于登录,在对话框中直接显示用户名和密码,将初始化后的密码和用户名写进OnInitDialog:单击CLoginDlg,点击属性一栏,找到OnInitDialog,添加它

BOOL CLoginDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此添加额外的初始化
	//默认登录信息
	CInfoFile file;
	CString name, pwd;
	file.ReadLogin(name, pwd);
	m_user = name;
	m_pwd = pwd;
	//同步到控件中
	UpdateData(FALSE);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

设计取消按钮,双击取消

exit(0);

第一个bug:点击回车后直接进入界面

 CLoginDlg->点击属性->重写->找到OnOK->注释掉    //CDialogEx::OnOK();

第二个bug:点击×后进入界面

CLoginDlg->点击属性->消息->OnClose()->添加

第三个bug:点击esc后进入界面
 CLoginDlg->点击属性->重写->找到OnCancel-> 注释//CDialogEx::OnCancel();
(3)静态拆分窗口

①创建两个类CSelectView

单击项目->类向导->添加类->下拉找到MFC类

 注意:这里是CTreeView

 注意:这里是CFormView

 vs2022中如果报错可以添加#include"afxcview.h"的头文件

②通过CSplitterWnd类拆分窗口

在CMainFrame中添加

private:
	CSplitterWnd m_spliter;//切分窗口类对象

CMainFrame->属性->重写->OnCreateClient->注释掉默认值重写这一段

//return CFrameWnd::OnCreateClient(lpcs, pContext);
	
	//拆分为一行两列
	m_spliter.CreateStatic(this, 1, 2);
	//左侧和右侧的具体显示内容
	m_spliter.CreateView(0, 0, RUNTIME_CLASS(CSelectView), CSize(200, 500), pContext);
	m_spliter.CreateView(0, 1, RUNTIME_CLASS(CDisplayView), CSize(200, 500), pContext);
    return TRUE;//自己拆分

(5)树视图功能实现

双击CSelectView进入头文件后,添加

private:
	CTreeCtrl* m_treeCtrl;//树控件
	CImageList m_imageList;//图标列表

进入属性栏->重写->OnInitialUpdate->添加,进行初始化操作

void CSelectView::OnInitialUpdate()
{
	CTreeView::OnInitialUpdate();
	//初始化树视图
	//获取树控件
	m_treeCtrl =& GetTreeCtrl();
	//1,准备图片结合
	HICON icon = AfxGetApp()->LoadIconW(IDI_ICON_re);//添加图片
	m_imageList.Create(30, 30, ILC_COLOR32, 1, 1);//设置图片格式
	m_imageList.Add(icon);
	m_treeCtrl->SetImageList(&m_imageList, TVSIL_NORMAL);
	//2,添加节点
	m_treeCtrl->InsertItem(TEXT("个人信息"), 0, 0, NULL);
	m_treeCtrl->InsertItem(TEXT("公司管理"), 0, 0, NULL);
	m_treeCtrl->InsertItem(TEXT("人员添加"), 0, 0, NULL);
	m_treeCtrl->InsertItem(TEXT("人员离职"), 0, 0, NULL);
// TODO: 在此添加专用代码和/或调用基类
}

点击个人信息等会触发另一个事件,进入属性栏->重写->OnTvnSelchanged->添加

void CSelectView::OnTvnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	//先获取当前的选中项

	HTREEITEM item = m_treeCtrl->GetSelectedItem();

	//通过选中的项获取这个项目中的内容
	CString str = m_treeCtrl->GetItemText(item);
	MessageBox(str);
}

成功后界面如下

(4)个人信息的搭建

①在资源视图的Dialog中插入一个新的Dialog

删除自带的控件后修改id名,在属性里将边框设置为None,将样式设置为child

编辑如下的对话框,适当调整位置

将身份和用户名后的编辑框设置为只读

将新密码和确定密码后的编辑框设置为密码

 ②添加一个类,注意基类为CFormView

③关联变量

(5)界面挂载 

①在CMainFrame中自定义宏

//自定义消息
#define NM_A (WM_USER+100)
#define NM_B (WM_USER+101)
#define NM_C (WM_USER+102)
#define NM_D (WM_USER+103)

②在.cpp中找到分界宏加入自定义的信息

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	ON_WM_CREATE()
	//产生NM_X消息,自动调用OnMyChange函数
	ON_MESSAGE(NM_A,OnMyChange)
	ON_MESSAGE(NM_B, OnMyChange)
	ON_MESSAGE(NM_C, OnMyChange)
	ON_MESSAGE(NM_D, OnMyChange)
    ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)
	ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
	ON_WM_SETTINGCHANGE()
END_MESSAGE_MAP()

③在MainFrame的.h文件中创建OnMychange函数

afx_msg LRESULT OnMyChange(WPARAM wParam, LPARAM lParam);

选中afx_msg LRESULT OnMyChange(WPARAM wParam, LPARAM lParam);这一行,按Alt和回车创建定义

添加return 0;

⑥在CSelectView中调用该函数

//通过选中的项获取这个项目中的内容
	CString str = m_treeCtrl->GetItemText(item);
	//MessageBox(str);
	if (str == TEXT("个人信息"))
	{
		//需要包含框架类头文件#include"MainFrm.h"
		//CWnd::PostMessage将一个信息放入窗口的信息队列
		//AfxGetMainWnd(),框架窗口对象的指针
		//AfxGetMainWnd()->GetSafeHwnd(),获取返回窗口的句柄,CWnd::GetSafeHwnd
		//NM_A:发送自定义消息
		//(WPARAM)NM_A:指定了附加消息的信息
		//(LPARAM)0:指定了附加消息的信息,此参数这里没有意义
		::PostMessage(AfxGetMainWnd()->GetSafeHwnd(), NM_A, (WPARAM)NM_A, (LPARAM)0);
   }

接受消息的是CMainFrame中的 OnMyChange(WPARAM wParam, LPARAM lParam)

LRESULT CMainFrame::OnMyChange(WPARAM wParam, LPARAM lParam)
{
	if (wParam == NM_A)
	{
		MessageBox(TEXT("个人信息界面挂载!"));
	}
	return 0;
}

将上面的这一段修改为如下内容

LRESULT CMainFrame::OnMyChange(WPARAM wParam, LPARAM lParam)
{
	CCreateContext Context;
	if (wParam == NM_A)
	{
		//MessageBox(TEXT("个人信息界面挂载!"));
		//挂载界面
		Context.m_pNewViewClass = RUNTIME_CLASS(CUserDlg);
		Context.m_pCurrentFrame = this;
		Context.m_pLastView = (CFormView*)m_spliter.GetPane(0, 1);
		m_spliter.DeleteView(0, 1);
		m_spliter.CreateView(0, 1, RUNTIME_CLASS(CUserDlg), CSize(600, 500), &Context);
		CUserDlg* pNewView = (CUserDlg*)m_spliter.GetPane(0, 1);
		m_spliter.RecalcLayout();
		pNewView->OnInitialUpdate();
		m_spliter.SetActivePane(0, 1);
	}
	else if (wParam == NM_B)
	{
		//MessageBox(TEXT("公司管理界面挂载!"));


	}
	return 0;
}

成功后会弹出对话框

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值