⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browsedlg.cpp

📁 《医学图象的远程传输系统》
💻 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 + -