📄 login.cpp
字号:
// Login.cpp : 实现文件
//
#include "stdafx.h"
#include "NongCheManage.h"
#include "Login.h"
#include ".\login.h"
// CLogin 对话框
IMPLEMENT_DYNAMIC(CLogin, CDialog)
CLogin::CLogin(CWnd* pParent /*=NULL*/)
: CDialog(CLogin::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
CLogin::~CLogin()
{
}
void CLogin::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC1, m_static1);
DDX_Control(pDX, IDC_STATIC2, m_static2);
DDX_Control(pDX, IDC_STATIC3, m_static3);
DDX_Control(pDX, IDC_UNIT, m_unit);
DDX_Control(pDX, IDC_USER, m_user);
DDX_Control(pDX, IDC_PASSWORD, m_password);
}
BEGIN_MESSAGE_MAP(CLogin, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_WM_CTLCOLOR()
ON_WM_ERASEBKGND()
ON_WM_PAINT()
END_MESSAGE_MAP()
// CLogin 消息处理程序
void CLogin::OnBnClickedOk()
{
CString UserName,UserPassword;
GetDlgItemText(IDC_USER,UserName);
GetDlgItemText(IDC_PASSWORD,UserPassword);
CString strSQL;
strSQL="SELECT Uname,Upassword FROM users where Uname='";
strSQL=strSQL+UserName+"' and Upassword='";
strSQL=strSQL+UserPassword+"'";
try
{
HRESULT hTRes;
hTRes = theApp.m_pRecordset.CreateInstance(_T("ADODB.Recordset"));
if (SUCCEEDED(hTRes))
{
hTRes = theApp.m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130),
((CNongCheManageApp*)AfxGetApp())->m_pConn.GetInterfacePtr(),
adOpenDynamic,adLockPessimistic,adCmdText);
if(SUCCEEDED(hTRes))
{
if (!(theApp.m_pRecordset->adoEOF) && (theApp.p_MySetClass->GetString(theApp.m_pRecordset->GetCollect("Uname"))==UserName) && (theApp.p_MySetClass->GetString(theApp.m_pRecordset->GetCollect("Upassword"))==UserPassword))
{
this->OnOK();
}
else
AfxMessageBox("密码错误,重新输入!");
}
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format(_T("创建记录集失败:%s"),e.ErrorMessage());
MessageBox(errormessage,"错误");
}
GotoDlgCtrl(GetDlgItem(IDC_USER));
theApp.m_pRecordset->Close();
theApp.m_pRecordset=NULL;
}
void CLogin::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}
BOOL CLogin::OnInitDialog()
{
CDialog::OnInitDialog();
::SetWindowText(this->m_hWnd,"用户身份验证");
this->RadeImage();
CString unit=theApp.GetReg();
if((theApp.GetReg()).IsEmpty())
SetDlgItemText(IDC_UNIT,"························ 未 注 册 ························");
else
SetDlgItemText(IDC_UNIT,unit);
m_static1.bkColor(RGB(244,246,248));
m_static2.bkColor(RGB(244,246,248));
m_static3.bkColor(RGB(244,246,248));
m_static1.textColor(RGB(0,0,128));
m_static2.textColor(RGB(0,0,128));
m_static3.textColor(RGB(0,0,128));
m_unit.textColor(RGB(128,0,0));
m_user.textColor(RGB(0,64,128));
m_password.textColor(RGB(0,64,128));
return TRUE;
}
HBRUSH CLogin::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if(nCtlColor!=CTLCOLOR_STATIC && nCtlColor!=CTLCOLOR_EDIT)
{
pDC->SetTextColor(RGB(40,20,255));
pDC->SetBkMode(TRANSPARENT);
HBRUSH B = CreateSolidBrush(RGB(244,246,248));
return (HBRUSH) B;
}
else
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
BOOL CLogin::OnEraseBkgnd(CDC* pDC)
{
CBrush brush(RGB(244,246,248));
CBrush* pOldBrush=pDC->SelectObject(&brush);
CRect rcClip;
pDC->GetClipBox(&rcClip);
pDC->PatBlt(rcClip.left,rcClip.top,rcClip.Width(),rcClip.Height(),PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
}
void CLogin::OnPaint()
{
CPaintDC dc(this);
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
DrawUserPhoto(&dc);//显示照片
CDialog::OnPaint();
}
}
void CLogin::RadeImage(void)
{
theApp.m_pRecordset.CreateInstance("ADODB.Recordset");
HRESULT hr = theApp.m_pRecordset->Open("SELECT dlgview FROM zp",_variant_t((IDispatch *)theApp.m_pConn,true),adOpenDynamic,adLockPessimistic,adCmdText);
if(SUCCEEDED(hr))
{
long lDataSize = theApp.m_pRecordset->GetFields()->GetItem("dlgview")->ActualSize;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = theApp.m_pRecordset->GetFields()->GetItem("dlgview")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(m_pBMPBuffer = new char[lDataSize+1]) ///重新分配必要的存储空间
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize); ///复制数据到缓冲区m_pBMPBuffer
SafeArrayUnaccessData (varBLOB.parray);
m_nFileLen = lDataSize;
m_hPhotoBitmap = BufferToHBITMAP(); ///生成BITMAP对象
}
}
}
}
theApp.m_pRecordset->Close();
theApp.m_pRecordset=NULL;
}
HBITMAP CLogin::BufferToHBITMAP(void)
{
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 CLogin::DrawUserPhoto(CDC *pDC)
{
if(!m_hPhotoBitmap)
return;
HBITMAP OldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBitmap);
CRect rect;
GetClientRect(rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);//不伸缩
//pDC->StretchBlt(0,0,120,120,&MemDC,0,0,200,240,SRCCOPY);
MemDC.SelectObject(OldBitmap);
}
void CLogin::OnCancel()
{
if(m_hPhotoBitmap)
{
DeleteObject(m_hPhotoBitmap);
m_hPhotoBitmap = NULL;
}
if(m_pBMPBuffer)
{
delete m_pBMPBuffer;
m_pBMPBuffer = NULL;
}
CDialog::OnCancel();
}
BOOL CLogin::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
{
AfxGetMainWnd()->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
return CDialog::Create(lpszTemplateName, pParentWnd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -