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

📄 login.cpp

📁 一个农用车辆管理系统的雏形
💻 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 + -