📄 adoblobdlg.cpp
字号:
m_bNewUser = TRUE;
UpdateData(FALSE);
DestroyPhoto();
Invalidate();
}
//////////////删除用户//////////////
void CADOBlobDlg::OnDeleteUser()
{
//theApp.m_pConnection->BeginTrans();
m_pRecordset->Delete(adAffectCurrent);
AfxMessageBox("waiting...");
//theApp.m_pConnection->RollbackTrans();
if(m_pRecordset->adoEOF)
m_pRecordset->MoveLast();
ResetControls();
m_buttonDeleteUser.EnableWindow(FALSE);
ReadData();
Invalidate();
}
void CADOBlobDlg::OnChangeUsername()
{
m_bModify = TRUE;
m_buttonSaveInfo.EnableWindow();
}
void CADOBlobDlg::OnChangeOld()
{
m_bModify = TRUE;
m_buttonSaveInfo.EnableWindow();
}
////////////////保存用户信息/////////////////
void CADOBlobDlg::OnSaveinfo()
{
char sstime[30];
if(!m_bModify) return;
UpdateData();
if(m_pBMPBuffer == NULL || m_hPhotoBitmap == NULL || m_UserName == "" || m_Old == "")
{
AfxMessageBox("您没有提供完整的用户信息。\r\n这些信息包括:用户名、年龄、照片");
return;
}
m_buttonSaveInfo.EnableWindow(FALSE);
char *pBuf = m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
BOOL h;
if(m_bNewUser){
//m_pRecordset->get_EditMode(adEditAdd
// m_pRecordset->put_LockType(adLockPessimistic);
h=m_pRecordset->Supports(adAddNew);
if(!h)
::AfxMessageBox("not support AddNew!",MB_OK,0);
else
::AfxMessageBox("OK! support AddNew!",MB_OK,0);
m_pRecordset->AddNew();
}
gettime((char ** )sstime);
m_pRecordset->PutCollect("username",_variant_t(m_UserName));
//m_pRecordset->PutCollect("old",atol(m_Old));
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);
}
gettime((char ** )sstime);
m_pRecordset->Update();
gettime((char ** )sstime);
AfxMessageBox("OK! Finished!!",MB_OK,0);
m_buttonDeleteUser.EnableWindow();
ResetControls();
m_bNewUser = FALSE;
m_bModify = FALSE;
}
///////////选择BMP文件并加载到内存/////////////
void CADOBlobDlg::OnSelectphoto()
{
static char BASED_CODE szFilter[] = "BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE,"BMP",NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal() == IDOK)
{
CString pathname = dlg.GetPathName();
DestroyPhoto();
LoadBMPFile(pathname);
m_hPhotoBitmap = BufferToHBITMAP();
m_bModify = TRUE;
m_buttonSaveInfo.EnableWindow();
Invalidate();
}
}
/////////////清除分配的对象/////////////
void CADOBlobDlg::DestroyPhoto()
{
if(m_hPhotoBitmap)
{
DeleteObject(m_hPhotoBitmap);
m_hPhotoBitmap = NULL;
}
if(m_pBMPBuffer)
{
delete m_pBMPBuffer;
m_pBMPBuffer = NULL;
}
}
/////////////加载BMP文件到内存//////////////
BOOL CADOBlobDlg::LoadBMPFile(const char *pBMPPathname)
{
CFile file;
if( !file.Open( pBMPPathname, CFile::modeRead) )
return FALSE;
m_nFileLen = file.GetLength();
m_pBMPBuffer = new char[m_nFileLen + 1];
if(!m_pBMPBuffer)
return FALSE;
if(file.ReadHuge(m_pBMPBuffer,m_nFileLen) != m_nFileLen)
return FALSE;
return TRUE;
}
///////////将内存中的BMP文件内容转换到HBITMAP///////
HBITMAP CADOBlobDlg::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) ('M' << 8) | 'B')) return NULL;
hDIB = lpBuffer + bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount;
if( bmInfo.bmiHeader.biBitCount > 8 )
lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) +
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
CClientDC dc(this);
hBmp = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
return hBmp;
}
BOOL CADOBlobDlg::DestroyWindow()
{
DestroyPhoto();
return CDialog::DestroyWindow();
}
//////////////下一个用户信息///////////////
void CADOBlobDlg::OnNextUser()
{
if(m_bModify)///假如当前记录改动过,则保存
OnSaveinfo();
m_pRecordset->MoveNext();
if(m_pRecordset->adoEOF)
m_pRecordset->MoveLast();
ReadData();
ResetControls();
Invalidate();
}
/////////////上一个用户信息/////////////////
void CADOBlobDlg::OnPreviousUser()
{
if(m_bModify)///假如当前记录改动过,则保存
OnSaveinfo();
m_pRecordset->MovePrevious();
if(m_pRecordset->BOF)
m_pRecordset->MoveFirst();
ReadData();
ResetControls();
Invalidate();
}
////////////////判断是否是最后一个记录//////////////
BOOL CADOBlobDlg::LastRecord()
{
if(m_pRecordset->adoEOF)
{
m_editUserName.EnableWindow(FALSE);
m_editOld.EnableWindow(FALSE);
m_buttonSelectPhoto.EnableWindow(FALSE);
return TRUE;
}
m_pRecordset->MoveNext();
if(m_pRecordset->adoEOF)
{
m_pRecordset->MovePrevious();
return TRUE;
}
else
{
m_pRecordset->MovePrevious();
return FALSE;
}
}
////////////////判断是否是第一个记录////////////////
BOOL CADOBlobDlg::FirstRecord()
{
if(m_pRecordset->BOF)
{
m_editUserName.EnableWindow(FALSE);
m_editOld.EnableWindow(FALSE);
m_buttonSelectPhoto.EnableWindow(FALSE);
return TRUE;
}
m_pRecordset->MovePrevious();
if(m_pRecordset->BOF)
{
m_pRecordset->MoveFirst();
return TRUE;
}
else
{
m_pRecordset->MoveNext();
return FALSE;
}
}
void CADOBlobDlg::ResetControls()
{
BOOL IsFirstRecord = FirstRecord();
BOOL IsLastRecord = LastRecord();
m_buttonPreviousUser.EnableWindow(!IsFirstRecord);
m_buttonNextUser.EnableWindow(!IsLastRecord);
}
void CADOBlobDlg::OnUpdate()
{
char sstime[30];
if(!m_bModify) return;
UpdateData();
if(m_pBMPBuffer == NULL || m_hPhotoBitmap == NULL || m_UserName == "" || m_Old == "")
{
AfxMessageBox("您没有提供完整的用户信息。\r\n这些信息包括:用户名、年龄、照片");
return;
}
m_buttonSaveInfo.EnableWindow(FALSE);
char *pBuf = m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
BOOL h;
if(m_bNewUser){
if(!h)
::AfxMessageBox("not support AddNew!",MB_OK,0);
else
::AfxMessageBox("OK! support AddNew!",MB_OK,0);
// m_pRecordset->AddNew();
}
gettime((char ** )sstime);
m_pRecordset->PutCollect("username",_variant_t(m_UserName));
//m_pRecordset->PutCollect("old",atol(m_Old));
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);
}
gettime((char ** )sstime);
m_pRecordset->Update();
gettime((char ** )sstime);
AfxMessageBox("OK!Update Finished!!",MB_OK,0);
m_buttonDeleteUser.EnableWindow();
ResetControls();
m_bNewUser = FALSE;
m_bModify = FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -