⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagedeptinfo.cpp

📁 人事管理系统
💻 CPP
字号:
// PageDeptInfo.cpp : implementation file
//

#include "stdafx.h"
#include "personelmanage.h"
#include "PageDeptInfo.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPageDeptInfo property page

IMPLEMENT_DYNCREATE(CPageDeptInfo, CResizablePage)

CPageDeptInfo::CPageDeptInfo() : CResizablePage(CPageDeptInfo::IDD)
{
	//{{AFX_DATA_INIT(CPageDeptInfo)
	m_strEmail = _T("");
	m_strLoginName = _T("");
	m_strName = _T("");
	//}}AFX_DATA_INIT

	m_pPicture = NULL;
	m_nFileLen = 0;
	m_pPicBuffer = NULL;

	m_psp.dwFlags &= (~PSP_HASHELP);
	m_psp.dwFlags |= ( PSP_USEHICON );
	HICON hIconTab = AfxGetApp()->LoadIcon(IDI_PERSON);
	m_psp.hIcon = hIconTab;
}

CPageDeptInfo::~CPageDeptInfo()
{
	if(m_pPicture)
		m_pPicture->Release();
	if(m_pPicBuffer)
		delete [] m_pPicBuffer;
	m_pPicture = NULL;
	m_pPicBuffer = NULL;
}

void CPageDeptInfo::DoDataExchange(CDataExchange* pDX)
{
	CResizablePage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPageDeptInfo)
	DDX_Control(pDX, IDC_LIST_EMPINFO, m_ctrlEmp);
	DDX_Control(pDX, IDC_COMBO_DEPT, m_cmbDept);
	DDX_Text(pDX, IDC_EDIT_EMAIL, m_strEmail);
	DDX_Text(pDX, IDC_EDIT_LOGINNAME, m_strLoginName);
	DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPageDeptInfo, CResizablePage)
	//{{AFX_MSG_MAP(CPageDeptInfo)
	ON_CBN_DROPDOWN(IDC_COMBO_DEPT, OnDropdownComboDept)
	ON_CBN_SELCHANGE(IDC_COMBO_DEPT, OnSelchangeComboDept)
	ON_NOTIFY(LVN_ITEMCHANGING, IDC_LIST_EMPINFO, OnItemchangingListEmpinfo)
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPageDeptInfo message handlers

BOOL CPageDeptInfo::OnInitDialog() 
{
	CResizablePage::OnInitDialog();
	
	// TODO: Add extra initialization here
	AddAnchor(IDC_GRP, TOP_LEFT);
	AddAnchor(IDC_COMBO_DEPT, TOP_LEFT);
	AddAnchor(IDC_STATIC_EMPCOUNT, TOP_LEFT);
	AddAnchor(IDC_GRP1, TOP_LEFT);
	AddAnchor(IDC_PIC, TOP_LEFT);
	AddAnchor(IDC_STATIC_NAME, TOP_LEFT);
	AddAnchor(IDC_STATIC_LOGINNAME, TOP_LEFT);
	AddAnchor(IDC_STATIC_EMAIL, TOP_LEFT);
	AddAnchor(IDC_EDIT_NAME, TOP_LEFT);
	AddAnchor(IDC_EDIT_LOGINNAME, TOP_LEFT);
	AddAnchor(IDC_EDIT_EMAIL, TOP_LEFT);
	AddAnchor(IDC_LIST_EMPINFO, TOP_LEFT, BOTTOM_RIGHT);

	DWORD dwStyle = m_ctrlEmp.GetExtendedStyle();
	dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT;
	m_ctrlEmp.SetExtendedStyle(dwStyle);

	m_ctrlEmp.InsertColumn(0, "员工编号", LVCFMT_LEFT, 128);
	m_ctrlEmp.InsertColumn(1, "姓名", LVCFMT_LEFT, 128);
	m_ctrlEmp.InsertColumn(2, "登录名", LVCFMT_LEFT, 128);
	m_ctrlEmp.InsertColumn(3, "电子邮件", LVCFMT_LEFT, 128);
	m_ctrlEmp.InsertColumn(4, "职位", LVCFMT_LEFT, 128);
	m_ctrlEmp.InsertColumn(5, "电话号码", LVCFMT_LEFT, 128);

	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPageDeptInfo::FillDept()
{
	CString query = "SELECT [DeptName] FROM [tblDepartment]";
	CString strDeptName;

	CADODatabase *pDb = new CADODatabase;
	try
	{
		if(pDb->Open())
		{
			CADORecordset *pRs = new CADORecordset(pDb);
			if(pRs->Open(query, CADORecordset::openQuery))
			{
				m_cmbDept.ResetContent();
				while(!pRs->IsEOF())
				{
					pRs->GetFieldValue("DeptName", strDeptName);
					m_cmbDept.AddString(strDeptName);

					pRs->MoveNext();
				}
				pRs->Close();
			}
			delete pRs;
			pDb->Close();
		}
		delete pDb;
	}
	catch(CADOException)
	{
	}
}

void CPageDeptInfo::OnDropdownComboDept() 
{
	// TODO: Add your control notification handler code here
	FillDept();
}

void CPageDeptInfo::OnSelchangeComboDept() 
{
	// TODO: Add your control notification handler code here
	int nItem = -1;
	int count = 0;
	CString strCount;
	CString strDeptName;
	nItem = m_cmbDept.GetCurSel();
	m_cmbDept.GetLBText(nItem, strDeptName);
	strDeptName.TrimRight();

	CString strEmployeeID, strName, strLoginName, strEmail, strTitle, strTelephone;
	if(strDeptName.GetLength() > 0)
	{
		CADODatabase *pDb = new CADODatabase;
		try
		{
			if(pDb->Open())
			{
				CADORecordset *pRs = new CADORecordset(pDb);
				CADOParameter pInDeptName(CADORecordset::typeWChar, sizeof(WCHAR) * 10, CADOParameter::paramInput);
				pInDeptName.SetValue(strDeptName);
				CADOCommand pCmd(pDb, "spwinGetEmpbyDeptName", CADOCommand::typeCmdStoredProc);
				pCmd.AddParameter(&pInDeptName);

				if(pRs->Execute(&pCmd))
				{
					count = pRs->GetRecordCount();
					strCount.Format("员工统计: %d", count);
					GetDlgItem(IDC_STATIC_EMPCOUNT)->SetWindowText(strCount);
					m_ctrlEmp.DeleteAllItems();
					
					int cur = 0;
					while(!pRs->IsEOF())
					{
						pRs->GetFieldValue("员工编号", strEmployeeID);
						m_ctrlEmp.InsertItem(cur, strEmployeeID);
						pRs->GetFieldValue("姓名", strName);
						m_ctrlEmp.SetItemText(cur, 1, strName);
						pRs->GetFieldValue("登录名", strLoginName);
						m_ctrlEmp.SetItemText(cur, 2, strLoginName);
						pRs->GetFieldValue("电子邮件", strEmail);
						m_ctrlEmp.SetItemText(cur, 3, strEmail);
						pRs->GetFieldValue("职位", strTitle);
						m_ctrlEmp.SetItemText(cur, 4, strTitle);
						pRs->GetFieldValue("电话号码", strTelephone);
						m_ctrlEmp.SetItemText(cur, 5, strTelephone);

						cur++;
						pRs->MoveNext();
					}
					pRs->Close();
				}
				delete pRs;
				pDb->Close();
			}
			delete pDb;
		}
		catch(CADOException)
		{
		}
	}	
}

void CPageDeptInfo::OnItemchangingListEmpinfo(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	m_strName = m_ctrlEmp.GetItemText(pNMListView->iItem, 1);
	m_strLoginName = m_ctrlEmp.GetItemText(pNMListView->iItem, 2);
	m_strEmail = m_ctrlEmp.GetItemText(pNMListView->iItem, 3);

	CString strEmpID = m_ctrlEmp.GetItemText(pNMListView->iItem, 0);
	strEmpID.TrimRight();
	long empID = _ttoi(strEmpID);
	
	CString query;
	query.Format("SELECT [PhotoImage] FROM [tblEmployee] WHERE EmployeeID = %d", empID);

	CADODatabase *pDb = new CADODatabase;
	try
	{
		if(pDb->Open())
		{
			CADORecordset *pRs = new CADORecordset(pDb);
			if(pRs->Open(query, CADORecordset::openQuery))
			{
				if(pRs->GetRecordCount() > 0)
				{
					//清除原有数据
					if(m_pPicBuffer)
					{
						delete [] m_pPicBuffer;
						m_pPicBuffer = NULL;
					}
					if(m_pPicture)
					{
						m_pPicture->Release();
						m_pPicture = NULL;
					}
					m_nFileLen = 0;
					//以下得到照片数据
					m_nFileLen = pRs->GetRecordset()->GetFields()->GetItem("PhotoImage")->GetActualSize();
					if(m_nFileLen > 0)
					{
						m_pPicBuffer = new BYTE[m_nFileLen];
						if(m_pPicBuffer)
						{
							if(pRs->GetChunk("PhotoImage", (LPVOID)m_pPicBuffer))
								LoadPicFromBuffer();	//加载图片
						}
					}
				}
				pRs->Close();
			}
			delete pRs;
			pDb->Close();
		}
		delete pDb;
	}
	catch(CADOException)
	{
	}
	UpdateData(FALSE);
	Invalidate();
	
	*pResult = 0;
}

void CPageDeptInfo::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	if(m_pPicture)
	{
		CWnd *pWnd = GetDlgItem(IDC_PIC);
		CRect rect;
		pWnd->GetClientRect(&rect);
		CDC *pDC = pWnd->GetDC();

		OLE_XSIZE_HIMETRIC hmWidth;
		OLE_YSIZE_HIMETRIC hmHeight;
		m_pPicture->get_Width(&hmWidth);
		m_pPicture->get_Height(&hmHeight);
		m_pPicture->Render(*pDC, 0, 0, rect.Width(), rect.Height(), 0, hmHeight, hmWidth, -hmHeight, NULL);
	}
	
	// Do not call CResizablePage::OnPaint() for painting messages
}

BOOL CPageDeptInfo::LoadPicFromBuffer()
{
	BOOL bResult = FALSE;
	HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, m_nFileLen);
	LPVOID pData = GlobalLock(hGlobal);
	memcpy(pData, m_pPicBuffer, m_nFileLen);
	GlobalUnlock(hGlobal);
	IStream * pStream = NULL;
	if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
	{
		//此处注意参数形式
		if(OleLoadPicture(pStream, m_nFileLen, FALSE, IID_IPicture, (LPVOID *)&m_pPicture) == S_OK)
			bResult = TRUE;
		pStream->Release();
	}
	return bResult;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -