📄 studinfo.cpp
字号:
// STUDINFO.cpp : implementation file
//
#include "stdafx.h"
#include "图书馆系统.h"
#include "STUDINFO.h"
#include "BORROWLIST.h"
#include "LeftTreeView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// STUDINFO dialog
STUDINFO::STUDINFO(CWnd* pParent /*=NULL*/)
: CDialog(STUDINFO::IDD, pParent)
{
//{{AFX_DATA_INIT(STUDINFO)
m_adr = _T("");
m_id = _T("");
m_name = _T("");
m_phone = _T("");
m_ptno = _T("");
m_idpt = _T("");
m_pt = _T("");
m_wps = _T("");
//}}AFX_DATA_INIT
}
void STUDINFO::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(STUDINFO)
DDX_Text(pDX, IDC_BOP_ADR, m_adr);
DDX_Text(pDX, IDC_BOP_ID, m_id);
DDX_Text(pDX, IDC_BOP_NAME, m_name);
DDX_Text(pDX, IDC_BOP_PHONE, m_phone);
DDX_Text(pDX, IDC_BOP_PTNO, m_ptno);
DDX_Text(pDX, IDC_BOP_PT, m_idpt);
DDX_Text(pDX, IDC_BOP_PTT, m_pt);
DDX_Text(pDX, IDC_BOP_WPS, m_wps);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(STUDINFO, CDialog)
//{{AFX_MSG_MAP(STUDINFO)
ON_BN_CLICKED(IDC_BUTTON1, OnDetial)
ON_WM_SIZE()
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// STUDINFO message handlers
void STUDINFO::OnDetial()
{
// TODO: Add your control notification handler code here
BORROWLIST dlg;
dlg.m_getblid=m_id;
dlg.DoModal();
}
void STUDINFO::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CDialog::ShowScrollBar(SB_BOTH,FALSE);
if (GetSafeHwnd())
{
CWnd* pGroup=(CWnd*)GetDlgItem(IDC_GROUP_PHOTO);
if (pGroup->GetSafeHwnd())
{
CRect recGroup;
pGroup->GetClientRect(&recGroup);
CRect recOffset(recGroup.right+45,recGroup.top+24,
recGroup.right*2+40,recGroup.bottom+15);
m_recOffset.CopyRect(&recOffset);
}
}
}
void STUDINFO::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect recGroup;
if (m_Bitmap.GetSafeHandle() != NULL)
{
if (GetSafeHwnd())
{
CWnd* pGroup=(CWnd*)GetDlgItem(IDC_GROUP_PHOTO);
if (pGroup->GetSafeHwnd())
{
pGroup->GetClientRect(&recGroup);
CRect recOffset(recGroup.right+45,recGroup.top+24,
recGroup.right*2+40,recGroup.bottom+15);
m_recOffset.CopyRect(&recOffset);
CDC memDC;
BITMAP bm;
m_Bitmap.GetBitmap(&bm);
memDC.CreateCompatibleDC(&dc);
CBitmap *oldbitmap = memDC.SelectObject(&m_Bitmap);
//设置拉伸模式
dc.SetStretchBltMode(HALFTONE);
//判断复选按钮的状态
//CButton* pCheckStretch=(CButton*)GetDlgItem(IDC_CHECK1);
//拉伸图像
dc.StretchBlt(m_recOffset.left,m_recOffset.top,
m_recOffset.right-m_recOffset.left,m_recOffset.bottom-
m_recOffset.top,
&memDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
/*dc.BitBlt(recOffset.left,recOffset.top,
recOffset.right,recOffset.bottom,&memDC, 0, 0, SRCCOPY);*/
memDC.SelectObject(oldbitmap);
}
}
}
// Do not call CDialog::OnPaint() for painting messages
}
void STUDINFO::ReadBmpToMem(CString &strPath)
{
CFile photoBmp;
//打开指定的文件
if (photoBmp.Open(strPath, CFile::modeRead))
{
LONG fileSize=(LONG)photoBmp.GetLength();
//分配内存
char *pDib=new char[fileSize+1];
//读到内存
if (photoBmp.Read(pDib,fileSize)==(DWORD)fileSize)
{
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen=sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)pDib,bmfHeaderLen);
if (bmfHeader.bfType==(*(WORD*)"BM"))
{
LPSTR lpDIB =pDib+ bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)lpDIB;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)lpDIB;
LPVOID lpDIBBits =pDib+((BITMAPFILEHEADER*)pDib)->bfOffBits;
//创建设备上下文
CWindowDC dc(this);
HBITMAP hBmp = CreateDIBitmap(dc.m_hDC, &bmiHeader,
CBM_INIT,lpDIBBits, &bmInfo, DIB_RGB_COLORS);
if (m_Bitmap.GetSafeHandle()!=NULL)
{
m_Bitmap.DeleteObject();
}
//将位图绑定到CBitMap对象
m_Bitmap.Attach(hBmp);
}
}
delete[] pDib;
pDib = NULL;
}
InvalidateRect(&m_recOffset);
}
BOOL STUDINFO::SetDbToFile(_RecordsetPtr &recPtr, CString &strPath)
{
long lPhotoSize = recPtr->Fields->Item["照片"]->ActualSize;
//如果没有照片则返回
if(lPhotoSize==0)
{
return FALSE;
}
//有照片
long lIsRead=0;
CFile f;
f.Open(strPath,CFile::modeWrite|CFile::modeCreate);
_variant_t varChunk;
BYTE buf[ChunkSize];
while(lPhotoSize>0)
{
lIsRead=lPhotoSize>=ChunkSize? ChunkSize:lPhotoSize;
//从字段data中获取一个数据包
varChunk = recPtr->Fields->
Item["照片"]->GetChunk(lIsRead);
for(long index=0;index<lIsRead;index++)
{
::SafeArrayGetElement(varChunk.parray,&index,buf+index);
}
//将数据包写入文件
f.Write(buf,lIsRead);
lPhotoSize-=lIsRead;
}
f.Close();
return TRUE;
}
BOOL STUDINFO::OpenRecordSet(_RecordsetPtr &recPtr, CString &strSQL)
{
CMyApp* pApp=(CMyApp*)AfxGetApp();
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
//因为它有时会经常出现一些想不到的错误
try
{
//从数据库中打开表
recPtr->Open(strSQL.AllocSysString(),
pApp->m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch (_com_error e)
{
CString strError;
strError.Format("警告:打开数据表时发生异常。 错误信息: %s",\
e.ErrorMessage());
AfxMessageBox(strError);
return FALSE;
}
return TRUE;
}
BOOL STUDINFO::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
//设置查询语句
CString strSQL;
strSQL.Format("select * from 借阅人员表 where 借阅ID='%s'",bookborno);
//打开记录集 选择表名
if(!OpenRecordSet(m_pRecordset,strSQL))
{
AfxMessageBox("没有成功打开数据表");
return FALSE;
}
//应该只有一条记录
CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd();
CLeftTreeView *pLeftView;
pLeftView=(CLeftTreeView*)pMainFrm->m_wndSplitter.GetPane(0,0);
m_pRecordset->MoveFirst();
m_id=pLeftView->VariantToCString(m_pRecordset->GetCollect("借阅ID"));
m_idpt=pLeftView->VariantToCString(m_pRecordset->GetCollect("借阅类型"));
m_name=pLeftView->VariantToCString(m_pRecordset->GetCollect("用户姓名"));
m_pt=pLeftView->VariantToCString(m_pRecordset->GetCollect("证件类型"));
m_ptno=pLeftView->VariantToCString(m_pRecordset->GetCollect("证件号码"));
m_phone=pLeftView->VariantToCString(m_pRecordset->GetCollect("联系电话"));
m_wps=pLeftView->VariantToCString(m_pRecordset->GetCollect("工作单位"));
m_adr=pLeftView->VariantToCString(m_pRecordset->GetCollect("联系地址"));
UpdateData(FALSE);
//照片信息
//路径问题的解决
CString strCurDir,strTem;
char chCurDir[MAX_PATH];
//填充0
memset(chCurDir,0,MAX_PATH);
::GetModuleFileName(NULL,chCurDir,sizeof(chCurDir));
strCurDir.Format("%s",chCurDir);
//取得模块名的处exe部分之外的其余部分
strCurDir=strCurDir.Left(strCurDir.ReverseFind('\\'));
strCurDir=strCurDir+"\\tem.bmp";
if(SetDbToFile(m_pRecordset,strCurDir))
{
ReadBmpToMem(strCurDir);
}
//关闭
m_pRecordset->Close();
m_pRecordset=NULL;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -