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

📄 myuserlogin.cpp

📁 一个学生考试成绩管理的半成品
💻 CPP
字号:
// MyUserLogin.cpp : 实现文件
//

#include "stdafx.h"
#include "ScoreGather.h"
#include "GetHardSoftInfo.h"
#include "GetSn.h"
#include "DeviceCaps.h"
#include "MyUserLogin.h"
#include ".\myuserlogin.h"


// CMyUserLogin 对话框

IMPLEMENT_DYNAMIC(CMyUserLogin, CDialog)
CMyUserLogin::CMyUserLogin(CWnd* pParent /*=NULL*/)
	: CDialog(CMyUserLogin::IDD, pParent)
	, m_count(0)
	, cdlen(0)
	, cdfrom(0)
	, cdto(0)
	, view(0)
	, m_userID(_T(""))
	, m_password(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDI_PASSWORD);
}

CMyUserLogin::~CMyUserLogin()
{
}

void CMyUserLogin::DoDataExchange(CDataExchange* pDX)
{
	if(pDX->m_bSaveAndValidate)
		if(pDX->m_bSaveAndValidate)
			m_userpassword.g_bAuthorIdentity = TRUE;
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_USERPASSWORD, m_userpassword);
	DDX_Control(pDX, IDCANCEL, m_cancel);
	DDX_Control(pDX, IDOK, m_ok);
	DDX_Text(pDX, IDC_USERNAME, m_userID);
	DDX_Text(pDX, IDC_USERPASSWORD, m_password);
}


BEGIN_MESSAGE_MAP(CMyUserLogin, CDialog)
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
	ON_BN_CLICKED(IDOK, OnBnClickedOk)
	ON_WM_ERASEBKGND()
	ON_WM_CTLCOLOR()
//	ON_WM_TIMER()
	ON_WM_PAINT()
END_MESSAGE_MAP()


// CMyUserLogin 消息处理程序

void CMyUserLogin::OnBnClickedCancel()
{
	OnOK();
}

void CMyUserLogin::OnBnClickedOk()
{
	UpdateData(true);
	_RecordsetPtr m_pUsersRecordset;
	CString strSQL;
	m_userID=p_MySetClass->addordelpassword(m_userID,TRUE);
	m_password=p_MySetClass->addordelpassword(m_password,TRUE);
	strSQL="SELECT UserID,UserPassword FROM users where UserID='";
	strSQL=strSQL+m_userID+"' and UserPassword='";
	strSQL=strSQL+m_password+"'";
	try
	{
		HRESULT hTRes;
		hTRes = m_pUsersRecordset.CreateInstance(_T("ADODB.Recordset"));
		if (SUCCEEDED(hTRes))
		{
			hTRes = m_pUsersRecordset->Open((LPTSTR)strSQL.GetBuffer(130),
				((CScoreGatherApp*)AfxGetApp())->m_pConn.GetInterfacePtr(),
				adOpenDynamic,adLockPessimistic,adCmdText);
			if(SUCCEEDED(hTRes))
			{
				if (!(m_pUsersRecordset->adoEOF) && (p_MySetClass->GetString(m_pUsersRecordset->GetCollect("UserPassword"))==m_password))
				{
					this->OnCancel();
				}
				else
					AfxMessageBox("密码错误,重新输入!");
			}
		}
	}
	catch(_com_error e)
	{
		CString errormessage;
		errormessage.Format(_T("创建记录集失败:%s"),e.ErrorMessage());
		MessageBox(errormessage,"错误");
	}
	UpdateData(false);
	m_pUsersRecordset->Close();
	m_pUsersRecordset=NULL;
	m_userID.Empty();
	m_password.Empty();
	SetDlgItemText(IDC_USERNAME,_T(""));
	SetDlgItemText(IDC_USERPASSWORD,_T(""));
	GotoDlgCtrl(GetDlgItem(IDC_USERNAME));
}

BOOL CMyUserLogin::OnInitDialog()
{
	CDialog::OnInitDialog();
	SetIcon(m_hIcon, TRUE);
	int xScrn, yScrn;
	HDC hScrDC;
	hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
	xScrn = GetDeviceCaps(hScrDC, HORZRES);
	yScrn = GetDeviceCaps(hScrDC, VERTRES);
	if((xScrn!=800 || yScrn!=600) && (xScrn!=1024 || yScrn!=768))
	{
		CDeviceCaps device;
		if(device.DoModal()!=0)
		{
			if(device.dev==1)
			{
				DEVMODE lpDevMode;
				long result;
				lpDevMode.dmPelsHeight = 600;
				lpDevMode.dmPelsWidth = 800;
				lpDevMode.dmSize = sizeof ( lpDevMode);
				lpDevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT ;
				result = ChangeDisplaySettings ( &lpDevMode , 0);
				if ( result != DISP_CHANGE_SUCCESSFUL)
					MessageBox ("修改失败!");
			}
			if(device.dev==2)
			{
				DEVMODE lpDevMode;
				long result;
				lpDevMode.dmPelsHeight = 768;
				lpDevMode.dmPelsWidth = 1024;
				lpDevMode.dmSize = sizeof ( lpDevMode);
				lpDevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT ;
				result = ChangeDisplaySettings ( &lpDevMode , 0);
				if ( result != DISP_CHANGE_SUCCESSFUL)
					MessageBox ("修改失败!");
			}
		}
	}
	SetWindowText(_T("用户登录"));
	m_tooltip.Create(this,TTS_ALWAYSTIP);
	m_tooltip.Activate(TRUE);
	m_tooltip.AddTool(GetDlgItem(IDC_USERNAME),IDS_USERNAME);
	m_tooltip.AddTool(GetDlgItem(IDC_USERPASSWORD),IDS_USERPASSWORD);
	m_tooltip.AddTool(GetDlgItem(IDCANCEL),IDS_CANCEL_USERLOGIN);
	m_tooltip.AddTool(GetDlgItem(IDOK),IDS_OK_USERLOGIN);
	RadeImage();
	mciSendCommand(m_count,MCI_CLOSE,0,NULL);
	PlayingFalg=true;//标志为正在播放
	MCI_OPEN_PARMS mciopenparms;//打开
	MCI_PLAY_PARMS mciplayparms;//播放
	TCHAR playstring1[MAX_PATH];
	::GetModuleFileName(NULL,playstring1,MAX_PATH);
	CString playstring,splaypath,playpath;
	playstring.Format("%s",playstring1);
	playpath=playstring.Left(playstring.ReverseFind('\\')+1)+"ScoreGather.mp3";
	int position;
	CString string_left,string_mp3;
	do
	{
		position=playpath.Find('\\',0);
		string_left=playpath.Left(position)+"\\\\";
		string_mp3+=string_left;
		playpath=playpath.Right(playpath.GetLength()-position-1);
	}
	while(position>0);
	splaypath=string_mp3.Left(string_mp3.GetLength()-2)+playpath;
	mciopenparms.lpstrElementName=playpath;//播放路径
	mciopenparms.lpstrDeviceType=NULL;//文件类型为NULL,就可以支持全部类型
	mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD_PTR)&mciopenparms);//向MCI设备发送命令消息(DWORD)(LPVOID)&mciopenparms
	m_count=mciopenparms.wDeviceID;
	mciplayparms.dwCallback=NULL;//窗口拥有者句柄
	cdlen=getinfo(MCI_STATUS_LENGTH);//得到曲目长度                                                                                                                                                                                                                                          
	cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen),MCI_HMS_SECOND(cdlen));//根据长度计算出时、分、秒
	mciplayparms.dwFrom=MCI_MAKE_HMS(0,0,0);//表示从哪儿开始播放
	mciplayparms.dwTo=cdto;//表示放到哪儿为止
	mciSendCommand(m_count,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD_PTR)& mciplayparms); //发送播放消息 DWORD)(LPVOID)& mciplayparms
	///////////////获取PC物理信息
	CGetMachineInfo m_Info;
	CGetSn m_sn;
	CString info_sn=m_Info.str_DN_Modol+m_Info.str_DN_Serial+m_Info.str_DN_ControllerRevision+m_Info.str_HardDeskSize+m_Info.str_HardDeskBufferSize+m_Info.str_HardDeskType+m_Info.str_Controller;
	m_sn.GetBiosSn();
	m_sn.GetCpuSn();
	m_sn.GetIDESn();
	m_sn.GetNetSn();
	info_sn+=m_sn.ConvertToString();
	int x=info_sn.GetLength();
	CString str,str1;
	str=str1=_T("");
	for(int n=0;n<x;n++)
	{
		if(info_sn.GetAt(n)<127 && info_sn.GetAt(n)>0)
		{
			str1.Format("%c",info_sn.GetAt(n));
			str+=str1;
		}
	}
	info_sn.Empty();
	return TRUE;
}

DWORD CMyUserLogin::getinfo(DWORD item)
{
	MCI_STATUS_PARMS mcistatusparms;
	mcistatusparms.dwCallback=NULL;
	mcistatusparms.dwItem=item;//接受命令参数的地方
	mcistatusparms.dwReturn=0;//返回值
	mciSendCommand(m_count,MCI_STATUS,MCI_STATUS_ITEM,(DWORD_PTR)&mcistatusparms);
	return (DWORD)mcistatusparms.dwReturn;
}

BOOL CMyUserLogin::PreTranslateMessage(MSG* pMsg)
{
	m_tooltip.RelayEvent(pMsg);
	return CDialog::PreTranslateMessage(pMsg);
}

BOOL CMyUserLogin::OnEraseBkgnd(CDC* pDC)
{
	CBrush brush(RGB(239,240,252));
	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;
}

HBRUSH CMyUserLogin::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	if(nCtlColor!=CTLCOLOR_EDIT)
	{
		pDC->SetTextColor(RGB(40,20,255));
		pDC->SetBkMode(TRANSPARENT);
		HBRUSH B = CreateSolidBrush(RGB(239,240,252));
		return (HBRUSH) B;
	}
	else
		return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
}

void CMyUserLogin::RadeImage(void)
{
	_RecordsetPtr m_pUsersRecordset;
	m_pUsersRecordset.CreateInstance("ADODB.Recordset");
	HRESULT hr = m_pUsersRecordset->Open("SELECT bmp FROM users",_variant_t((IDispatch *)theApp.m_pConn,true),adOpenDynamic,adLockPessimistic,adCmdText);
    if(SUCCEEDED(hr))
	{
		long lDataSize = m_pUsersRecordset->GetFields()->GetItem("bmp")->ActualSize;
		if(lDataSize > 0)
		{
			_variant_t varBLOB;
			varBLOB = m_pUsersRecordset->GetFields()->GetItem("bmp")->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对象
				}
			}
		}
	}
	m_pUsersRecordset->Close();
	m_pUsersRecordset=NULL;
}

HBITMAP CMyUserLogin::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 CMyUserLogin::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 CMyUserLogin::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(x,y,120,120,&MemDC,0,0,200,240,SRCCOPY);
	MemDC.SelectObject(OldBitmap);
}

BOOL CMyUserLogin::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
{
	AfxGetMainWnd()->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
	return CDialog::Create(lpszTemplateName, pParentWnd);
}

void CMyUserLogin::OnCancel()
{
	if(m_hPhotoBitmap)
	{
		DeleteObject(m_hPhotoBitmap);
		m_hPhotoBitmap = NULL;
	}
	if(m_pBMPBuffer)
	{
		delete m_pBMPBuffer;
		m_pBMPBuffer = NULL;
	}
	CDialog::OnCancel();
}

⌨️ 快捷键说明

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