📄 page1.cpp
字号:
// Page1.cpp : implementation file
//
#include "stdafx.h"
#include "me.h"
#include "Page1.h"
#include "ADDdlg.h"
#include "MenSearch.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CMeApp theApp;
CString check;
/////////////////////////////////////////////////////////////////////////////
// CPage1 dialog
CPage1::CPage1(CWnd* pParent /*=NULL*/)
: CDialog(CPage1::IDD, pParent)
{
//{{AFX_DATA_INIT(CPage1)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CPage1::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPage1)
DDX_Control(pDX, IDC_LIST1, m_list1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPage1, CDialog)
//{{AFX_MSG_MAP(CPage1)
ON_WM_PAINT()
ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)
ON_BN_CLICKED(IDC_MENBER_ADD, OnMenberAdd)
ON_BN_CLICKED(IDC_MENBER_Fresh, OnMENBERFresh)
ON_BN_CLICKED(IDC_MENBER_Delete, OnMENBERDelete)
ON_BN_CLICKED(IDC_MENBER_Search, OnMENBERSearch)
ON_BN_CLICKED(IDC_MENBER_Amend, OnMENBERAmend)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPage1 message handlers
BOOL CPage1::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
/*-------------------------------------------------------------------------------*/
m_pRecordset.CreateInstance("ADODB.Recordset");
HRESULT hr;
try
{
hr = m_pRecordset->Open("SELECT * FROM user2",
_variant_t((IDispatch *)theApp.m_pConnection,true),
adOpenDynamic,
adLockPessimistic,
adCmdText);
}
catch (_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
m_list1.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
LV_COLUMN h;
h.mask=LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
h.fmt=LVCFMT_CENTER;
h.cx=100;
h.pszText="用户ID";
m_list1.InsertColumn(0,&h);
h.pszText="用户名";
m_list1.InsertColumn(1,&h);
h.pszText="用户卡号";
m_list1.InsertColumn(3,&h);
h.pszText="性 别";
m_list1.InsertColumn(4,&h);
h.pszText="部 门";
m_list1.InsertColumn(5,&h);
h.pszText="电话号码";
m_list1.InsertColumn(6,&h);
h.pszText="签到(是/否)";
m_list1.InsertColumn(7,&h);
if(SUCCEEDED(hr))
{
readdata();
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPage1::readdata()
{
m_list1.DeleteAllItems();
try{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");return;
}
int i=0;
while(!m_pRecordset->adoEOF)
{
m_name=m_pRecordset->GetCollect("name").bstrVal;
m_ID=m_pRecordset->GetCollect("Id").bstrVal;
m_CardID=m_pRecordset->GetCollect("Card_ID").bstrVal;
m_sex=m_pRecordset->GetCollect("sex").bstrVal;
m_telenumber=m_pRecordset->GetCollect("telenumber").bstrVal;
if(m_pRecordset->GetCollect("flag").bstrVal)
m_flag="是";
else m_flag="否";
m_department=m_pRecordset->GetCollect("department").bstrVal;
m_list1.InsertItem(i,m_ID);
m_list1.SetItemText(i,1,m_name);
m_list1.SetItemText(i,2,m_CardID);
m_list1.SetItemText(i,3,m_sex);
m_list1.SetItemText(i,4,m_department);
m_list1.SetItemText(i,5,m_telenumber);
m_list1.SetItemText(i,6,m_flag);
m_pRecordset->MoveNext();
i++;
}
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
GetDlgItem(IDC_MENBER_Amend)->EnableWindow(FALSE);
GetDlgItem(IDC_MENBER_Delete)->EnableWindow(FALSE);
m_pRecordset->MoveFirst();
}
HBITMAP CPage1::BufferToHBITMAP()
{
HBITMAP hBmp;
LPSTR hDIB,lpBuffer = m_pBMPBuffer;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen;
//获得位图的头信息
bmfHeaderLen = sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
//根据获得的信息头判断是否是位图
if (bmfHeader.bfType != (*(WORD*)"BM")) return NULL;
//获取位图数据
hDIB = lpBuffer + bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits;
//创建位图
CClientDC dc(this);
hBmp = CreateDIBitmap(dc.m_hDC,&bmiHeader,
CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
return hBmp;
}
void CPage1::DrawUserPhoto(int x, int y, CDC *pDC)
{
if(!m_hPhotoBitmap) return;
HBITMAP OldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBitmap);
pDC->BitBlt(x,y,152,190,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap);
}
void CPage1::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
DrawUserPhoto(45,50,&dc);
CDialog::OnPaint();
// Do not call CDialog::OnPaint() for painting messages
}
void CPage1::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POSITION pos=m_list1.GetFirstSelectedItemPosition();
if(pos==NULL)
{
GetDlgItem(IDC_MENBER_Amend)->EnableWindow(FALSE);
GetDlgItem(IDC_MENBER_Delete)->EnableWindow(FALSE);
return;
}
else
{ GetDlgItem(IDC_MENBER_Amend)->EnableWindow(TRUE);
GetDlgItem(IDC_MENBER_Delete)->EnableWindow(TRUE);
int nItem =m_list1.GetNextSelectedItem(pos);
m_pRecordset->MoveFirst();
m_pRecordset->Move(nItem);
UpdateData(true);
m_name=m_pRecordset->GetCollect("name").bstrVal;
check=m_name;
m_ID=m_pRecordset->GetCollect("Id").bstrVal;
m_CardID=m_pRecordset->GetCollect("Card_ID").bstrVal;
m_sex=m_pRecordset->GetCollect("sex").bstrVal;
m_telenumber=m_pRecordset->GetCollect("telenumber").bstrVal;
if(m_pRecordset->GetCollect("flag").bstrVal)
m_flag="是";
else m_flag="否";
m_department=m_pRecordset->GetCollect("department").bstrVal;
long lDataSize = m_pRecordset->GetFields()->GetItem("photo")->ActualSize;
if(lDataSize > 0)
{//3
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem("photo")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{//2
///重新分配必要的存储空间
if(m_pBMPBuffer = new char[lDataSize+1])
{//1
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
///复制数据到缓冲区m_pBMPBuffer
memcpy(m_pBMPBuffer,pBuf,lDataSize);
SafeArrayUnaccessData (varBLOB.parray);
m_nFileLen = lDataSize;
///生成BITMAP对象
m_hPhotoBitmap = BufferToHBITMAP();
}//1
}//2
} //3
UpdateData(false);
}
Invalidate();
*pResult = 0;
}
void CPage1::OnMenberAdd()
{
// TODO: Add your control notification handler code here
CString name,card,id,tele,depart,strSex;
int flag1=0,flag=1, flagselect=0;
if(check!="")
{ destroyphoto();
Invalidate();}
do { flag1=0;
CADDdlg m_adddig;
m_adddig.m_usersex=0;
if( m_adddig.DoModal()==IDOK)
{ UpdateData();
name=m_adddig.m_username;
card=m_adddig.m_userCardID;
id=m_adddig.m_userID;
tele=m_adddig.m_usertelenumber;
depart=m_adddig.m_userdepart;
flagselect=m_adddig.flagselect;
if(flagselect==1)
{ m_nFileLen=m_adddig.m_nFileLen;
m_pBMPBuffer=m_adddig.m_pBMPBuffer;
m_hPhotoBitmap=m_adddig.m_hPhotoBitmap;
Invalidate();
}
if(m_adddig.m_usersex)strSex="女";else strSex="男";
if(name==""||id==""||card=="")
{AfxMessageBox("用户ID和姓名卡号不能为空,请加入姓名.用户ID和卡号!");flag1=1;}
else
{
m_pRecordset->MoveFirst();
while(!m_pRecordset->adoEOF)
{
m_name=m_pRecordset->GetCollect("name").bstrVal;
m_ID=m_pRecordset->GetCollect("Id").bstrVal;
m_CardID=m_pRecordset->GetCollect("Card_ID").bstrVal;
if(name==m_name||id==m_ID||card==m_CardID)
{ flag=0;break;}
m_pRecordset->MoveNext();
}
}
if(flag==0)
{ AfxMessageBox("工号或卡号不能重复,请重新认真填写用户信息!");flag1=1;}
}
else{GetDlgItem(IDC_MENBER_Amend)->EnableWindow(FALSE);
GetDlgItem(IDC_MENBER_Delete)->EnableWindow(FALSE);
return;}
} while(flag1);
try{
m_pRecordset->AddNew();
m_pRecordset->PutCollect("name",_variant_t(name));
m_pRecordset->PutCollect("Id",_variant_t(id));
m_pRecordset->PutCollect("Card_ID",_variant_t(card));
m_pRecordset->PutCollect("sex",_variant_t(strSex));
m_pRecordset->PutCollect("telenumber",_variant_t(tele));
m_pRecordset->PutCollect("department",_variant_t(depart));
if(flagselect==1)
{ char *pBuf = m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements =m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("photo")->AppendChunk(varBLOB);
}
}
m_pRecordset->Update();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
UpdateData(FALSE);
OnMENBERFresh();
AfxMessageBox("新用户记录信息添加成功!");
}
void CPage1::OnMENBERFresh()
{
// TODO: Add your control notification handler code here
CString s;
m_pRecordset->Close();
s="select * from user2 ";
BSTR bsql=s.AllocSysString();
m_pRecordset->Open(
(_variant_t)bsql,theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
readdata();
}
void CPage1::OnMENBERDelete()
{
// TODO: Add your control notification handler code here
if(check=="")
{ AfxMessageBox("请选择您要删除的用户记录信息!");return;}
else
{
if (MessageBox("您真的要删除该用户吗?","提示",MB_YESNO|MB_ICONWARNING) == IDNO)
{GetDlgItem(IDC_MENBER_Amend)->EnableWindow(FALSE);
GetDlgItem(IDC_MENBER_Delete)->EnableWindow(FALSE);
return;}
else
{
m_pRecordset->Delete(adAffectCurrent);
//m_pRecordset->MoveLast();
// if(m_pRecordset->MoveLast()==m_pRecordset->MoveFirst())
m_pRecordset->Close;
OnMENBERFresh() ;
destroyphoto();
Invalidate();
AfxMessageBox(" 该用户记录已经成功删除!");
}
}
}
void CPage1::OnMENBERSearch()
{
// TODO: Add your control notification handler code here
CMenSearch m_CSearchDlg;
CString strSql,s;
m_CSearchDlg.m_searchway=3;
if( m_CSearchDlg.DoModal()==IDOK)
{
if (m_CSearchDlg.m_Search=="")
AfxMessageBox("查询条件不能为空,请您输入姓名!");
else
{
s.Format("%s",m_CSearchDlg.m_Search);
switch(m_CSearchDlg.m_searchway)
{ case 3: m_pRecordset->Close();s="select * from user2 where name like '%"+s+"%'";break;
case 2: m_pRecordset->Close(); s="select * from user2 where Id like '%"+s+"%'";break;
case 1: m_pRecordset->Close(); s="select * from user2 where Card_ID like '%"+s+"%'";break;
case 0: m_pRecordset->Close(); s="select * from user2 where department like '%"+s+"%'";break;
default: break;
}
BSTR bsql=s.AllocSysString();
m_pRecordset->Open(
(_variant_t)bsql,theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
if(m_pRecordset->adoEOF&&m_pRecordset->BOF)
{ MessageBox("没有符合条件的记录");OnMENBERFresh() ;}
else{ readdata();}
}
}
else
{GetDlgItem(IDC_MENBER_Amend)->EnableWindow(FALSE);
GetDlgItem(IDC_MENBER_Delete)->EnableWindow(FALSE);
}
}
void CPage1::OnMENBERAmend()
{
// TODO: Add your control notification handler code here
CString strSex;
int flag=0,flagphoto=0;
do{ CADDdlg m_adddig;
m_adddig.m_username=m_name;
m_adddig.m_userCardID=m_CardID;
m_adddig.m_userID=m_ID;
m_adddig.m_usertelenumber=m_telenumber;
m_adddig.m_userdepart=m_department;
if(m_sex=="女")m_adddig.m_usersex=1;else m_adddig.m_usersex=0;
m_adddig.m_hPhotoBitmap=m_hPhotoBitmap;
if(m_adddig.DoModal()==IDOK)
{flagphoto=m_adddig.flagselect;
if(m_ID==m_adddig.m_userID)
{ UpdateData(true);
m_pRecordset->PutCollect("name",_variant_t(m_adddig.m_username));
if(m_adddig.m_usersex)strSex="女";else strSex="男";
m_pRecordset->PutCollect("sex",_variant_t(strSex));
m_pRecordset->PutCollect("telenumber",_variant_t(m_adddig.m_usertelenumber));
m_pRecordset->PutCollect("department",_variant_t(m_adddig.m_userdepart));
if(flagphoto==1)
{
char *pBuf = m_adddig.m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_adddig.m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("photo")->AppendChunk(varBLOB);
}
}
if(m_pRecordset->Update())
{ AfxMessageBox("修改失败,您可能修改了卡号或工号或没有做任何修改,\n请认真填写您需要修改的信息,若不修改请按取消退出");flag=1;}
else flag=0;
UpdateData(FALSE);
m_pRecordset->MoveNext();
}
}
else {GetDlgItem(IDC_MENBER_Amend)->EnableWindow(FALSE);
GetDlgItem(IDC_MENBER_Delete)->EnableWindow(FALSE);return;}
} while(flag);
if(!flag)
AfxMessageBox("用户基本信息已经成该修改!");
readdata();
destroymenber();
}
void CPage1::destroymenber()
{ m_name="";
m_ID="";
m_CardID="";
m_sex="";
m_flag="";
m_telenumber="";
m_department="";
}
void CPage1::destroyphoto()
{
if(m_hPhotoBitmap)
{
DeleteObject(m_hPhotoBitmap);
m_hPhotoBitmap = NULL;
}
if(m_pBMPBuffer)
{
delete m_pBMPBuffer;
m_pBMPBuffer = NULL;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -