📄 myuserlogin.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 + -