📄 browsedlg.cpp
字号:
// BrowseDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Enroll.h"
#include "BrowseDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "..\Defines.h"
#include "..\ImgDecompress\ImgDecompress.h"
#include "PatientRecord.h"
#include "ImageRecord.h"
/////////////////////////////////////////////////////////////////////////////
// CBrowseDlg dialog
CBrowseDlg::CBrowseDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBrowseDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBrowseDlg)
//}}AFX_DATA_INIT
m_CurID=-1;
m_CurIdx=-1;
m_bmInfo.bmiHeader.biBitCount=24;
m_bmInfo.bmiHeader.biClrImportant=0;
m_bmInfo.bmiHeader.biClrUsed=0;
m_bmInfo.bmiHeader.biCompression=BI_RGB;
m_bmInfo.bmiHeader.biHeight=0;
m_bmInfo.bmiHeader.biPlanes=1;
m_bmInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
m_bmInfo.bmiHeader.biSizeImage=0;
m_bmInfo.bmiHeader.biWidth=0;
m_bmInfo.bmiHeader.biXPelsPerMeter=1;
m_bmInfo.bmiHeader.biYPelsPerMeter=1;
}
CBrowseDlg::~CBrowseDlg()
{
if (!IDRelease(&m_jcprops)){
AfxMessageBox(IDGetLastError(),MB_ICONERROR);
}
::GlobalFree(m_JpegBuffer);
::GlobalFree(m_pDib);
CDialog::~CDialog();
}
void CBrowseDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBrowseDlg)
DDX_Control(pDX, IDC_STATIC_IMG, m_Img);
DDX_Control(pDX, IDC_PATIENTLIST, m_PatientList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBrowseDlg, CDialog)
//{{AFX_MSG_MAP(CBrowseDlg)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_NOTIFY(NM_CLICK, IDC_PATIENTLIST, OnClickPatientlist)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBrowseDlg message handlers
BOOL CBrowseDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if (!IDInit(&m_jcprops)){
AfxMessageBox(IDGetLastError(),MB_ICONERROR);
}
m_JpegBuffer=(BYTE*)::GlobalAlloc(GMEM_FIXED,MAX_JPEG_SIZE);
if (!m_JpegBuffer){
AfxMessageBox("Error to allocate memory for Jpeg Buffer!",MB_ICONERROR);
}
m_pDib=(BYTE*)::GlobalAlloc(GMEM_FIXED,MAX_BMP_SIZE);
if (!m_pDib){
AfxMessageBox("Error wo allocate memory for dib buffer!",MB_ICONERROR);
}
CPatientRecord PRecord;
PRecord.Open();
m_PatientList.DeleteAllItems();
LV_COLUMN lvc;
lvc.mask=LVCF_TEXT | LVCF_WIDTH;
lvc.pszText="Name";
m_PatientList.InsertColumn(0,&lvc);
int i=0;
while (!PRecord.IsEOF()){
m_PatientList.InsertItem(i++,"["+PRecord.m_sName+"]");
PRecord.MoveNext();
}
PRecord.Close();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CBrowseDlg::LoadImage(int ID,int Idx)
{
CImageRecord IRecord;
IRecord.m_strFilter.Format("ID=%d AND Idx=%d",ID,Idx);
IRecord.Open();
if (IRecord.IsEOF()){
return FALSE;
}
BYTE* pData=(BYTE*)::GlobalLock(IRecord.m_Image.m_hData);
m_JpegSize=IRecord.m_Image.m_dwDataLength;
::CopyMemory(m_JpegBuffer,pData,m_JpegSize);
IRecord.Close();
//*********************************
//decompress the image
if (!IDDecompress(&m_jcprops,m_JpegBuffer,m_JpegSize,&m_pDib,(DWORD*)&(m_bmInfo.bmiHeader.biWidth),(DWORD*)&(m_bmInfo.bmiHeader.biHeight))){
AfxMessageBox(IDGetLastError(),MB_ICONERROR);
m_bmInfo.bmiHeader.biWidth=0;
m_bmInfo.bmiHeader.biHeight=0;
}
DrawImg();
CStatic* pLabel=(CStatic*)GetDlgItem(IDC_STATIC_LABEL);
ASSERT(pLabel);
CString str;
str.Format("Patient %d : Image %d",ID,Idx);
pLabel->SetWindowText(str);
return TRUE;
}
//select an item (or select none) in the list ctrl.
//2002.05.26
void CBrowseDlg::OnClickPatientlist(NMHDR* pNMHDR, LRESULT* pResult)
{
int i=m_PatientList.GetNextItem(-1,LVNI_SELECTED);
if (i<0){
m_CurID=-1;
m_CurIdx=-1;
CStatic* pLabel=(CStatic*)GetDlgItem(IDC_STATIC_LABEL);
ASSERT(pLabel);
CString str;
str.Format("Patient %d : Image %d",m_CurID,m_CurIdx);
pLabel->SetWindowText(str);
m_bmInfo.bmiHeader.biWidth=0;
m_bmInfo.bmiHeader.biHeight=0;
DrawImg();
return;
}
else if (i==m_CurID){
return;
}
m_CurID=i;
m_CurIdx=0;
if (!LoadImage(m_CurID,m_CurIdx)){
AfxMessageBox("No Image to browse!",MB_ICONWARNING);
m_CurIdx=-1;
m_bmInfo.bmiHeader.biWidth=0;
m_bmInfo.bmiHeader.biHeight=0;
Invalidate();
}
*pResult = 0;
}
void CBrowseDlg::DrawImg()
{
CDC* pDC=GetDC();
CRect rect;
m_Img.GetWindowRect(&rect);
ScreenToClient(&rect);
pDC->FillSolidRect(rect,RGB(0,0,0));
if (m_bmInfo.bmiHeader.biWidth>0 && m_bmInfo.bmiHeader.biHeight>0){
::SetDIBitsToDevice(pDC->m_hDC,
rect.left,
rect.top,
rect.Width(),
rect.Height(),
0,
0,
0,
rect.Height(),
m_pDib,
&m_bmInfo,
DIB_RGB_COLORS);
}
ReleaseDC(pDC);
}
void CBrowseDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
DrawImg();
}
//go previous image
void CBrowseDlg::OnButton1()
{
if (!LoadImage(m_CurID,m_CurIdx-1)){
AfxMessageBox("No Image to browse!",MB_ICONWARNING);
}
else{
m_CurIdx--;
}
}
//go next image
void CBrowseDlg::OnButton2()
{
if (!LoadImage(m_CurID,m_CurIdx+1)){
AfxMessageBox("No Image to browse!",MB_ICONWARNING);
}
else{
m_CurIdx++;
}
}
//save current image
void CBrowseDlg::OnButton3()
{
CImageRecord IRecord;
IRecord.m_strFilter.Format("ID=%d AND Idx=%d",m_CurID,m_CurIdx);
IRecord.Open();
if (IRecord.IsEOF()){
m_bmInfo.bmiHeader.biWidth=0;
m_bmInfo.bmiHeader.biHeight=0;
AfxMessageBox("No image could be save!");
return;
}
BYTE* pData=(BYTE*)::GlobalLock(IRecord.m_Image.m_hData);
CFileDialog fDlg(FALSE);
if (fDlg.DoModal()==IDOK){
CFile f;
f.Open(fDlg.GetPathName(),CFile::modeWrite|CFile::modeCreate);
BYTE* pData=(BYTE*)::GlobalLock(IRecord.m_Image.m_hData);
f.WriteHuge(pData,IRecord.m_Image.m_dwDataLength);
f.SetLength(IRecord.m_Image.m_dwDataLength);
f.Close();
::GlobalUnlock(IRecord.m_Image.m_hData);
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -