?? 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 + -