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

📄 selectfolderdlg.cpp

📁 3D reconstruction, medical image processing from colons, using intel image processing for based clas
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SelectFolderDlg.cpp : implementation file//#include "stdafx.h"#include "afxtempl.h"#include "fusion.h"#include <afx.h>//#include "StudyRecordset.h"//#include "SeriesRecordset.h"//#include "ImageRecordset.h"#include "SelectFolderDlg.h"//#include "func.h"#include "dicomobject.h"#include "regfunc.h"#include "sort.h"#include "ProgressWnd.h"//#include "log.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifextern void TotalFilesInSubtree(LPITEMINFO pItemCurrent, int& iTotalFiles);typedef struct _TwoStrings {	CString strUID;	LPITEMINFO pItemInfo;} TwoStrings;/////////////////////////////////////////////////////////////////////////////// RxLoadImportDlg dialogRxLoadImportDlg::RxLoadImportDlg(CWnd* pParent /*=NULL*/)	: CDialog(RxLoadImportDlg::IDD, pParent), m_listDICOMInfo(TRUE){	//{{AFX_DATA_INIT(RxLoadImportDlg)	m_bRecursive = FALSE;	m_bMoveFile = FALSE;	m_bQuickSearch = FALSE;	//}}AFX_DATA_INIT	m_bCancel = FALSE;	m_pWndProgress = NULL;}void RxLoadImportDlg::DoDataExchange(CDataExchange* pDX){	CDialog::DoDataExchange(pDX);	//{{AFX_DATA_MAP(RxLoadImportDlg)	DDX_Control(pDX, IDC_TREE_FOLDER, m_ctrlDirTree);	DDX_Control(pDX, IDC_LIST_FOLDER, m_listDICOMInfo);	DDX_Check(pDX, IDC_CHECK_MOVE_FILES, m_bMoveFile);	DDX_Check(pDX, IDC_CHECK_RECURSIVE_QUICK, m_bQuickSearch);	//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(RxLoadImportDlg, CDialog)	//{{AFX_MSG_MAP(RxLoadImportDlg)	ON_WM_DESTROY()	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_FOLDER, OnItemchangedListDicomInfo)	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_FOLDER, OnSelchangedTreeFolder)	ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_FOLDER, OnColumnclickListFolder)	ON_BN_CLICKED(IDC_CHECK_RECURSIVE_QUICK, OnCheckRecursiveQuick)	ON_WM_KEYDOWN()	ON_BN_CLICKED(IDC_BUTTON_SEARCH, OnButtonSearch)	//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// RxLoadImportDlg message handlersBOOL RxLoadImportDlg::OnInitDialog() {	CDialog::OnInitDialog();		// 滚瓢阑 diable矫糯.	CButton* pButton = (CButton*)GetDlgItem(IDOK);	pButton->EnableWindow(FALSE);	//LOG_MESSAGE("Tree initialize in Dialog");	m_ctrlDirTree.Initialize();	//LOG_MESSAGE("List initialize in Dialog");	ListInitialize();	SetToRecentImportFolder();	m_ctrlDirTree.SetFocus();	return TRUE;}BOOL RxLoadImportDlg::ListInitialize(){	TCHAR *szListItem[] = {_T("Patient Name"), _T("Patient ID"), _T("Exam Date"), _T("Sex"), _T("Modality")};	int aSortType[] = {RxSort::dtSTRING, RxSort::dtINT, RxSort::dtINT,RxSort::dtSTRING, RxSort::dtSTRING};	int nItemCount, aListWidth[] = {150, 80, 80, 50, 50};	LV_COLUMN lvcolumn;	DWORD dwStyle;	nItemCount = sizeof(aListWidth)/ sizeof(int);	for (int i = 0; i < nItemCount; i++) {		lvcolumn.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;		lvcolumn.fmt=LVCFMT_CENTER;		lvcolumn.pszText=szListItem[i];		lvcolumn.iSubItem=i;		lvcolumn.cx=aListWidth[i];		m_listDICOMInfo.InsertColumn(i, &lvcolumn);	}		m_listDICOMInfo.SetNoOfColumn(nItemCount, aSortType);	dwStyle = m_listDICOMInfo.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE);	dwStyle |= (LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);	m_listDICOMInfo.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dwStyle);	return TRUE;}#define DICOM_DOT_NUMBER	4int RxLoadImportDlg::CountDotInFilename(CString strFilename){	int i, iCount = 0, iLength= strFilename.GetLength();	for (i = 0; i < iLength; i++) {		if (strFilename[i] == '.')			iCount++;	}	return iCount;}void RxLoadImportDlg::OnDestroy() {	LPITEMINFO pItemInfo;	CArray<TwoStrings, TwoStrings&> *pArr;	int nItemCount = m_listDICOMInfo.GetItemCount();	int j, iArraySize;	for (int i = 0; i < nItemCount; i++) {		pArr = (CArray<TwoStrings, TwoStrings&>*)m_listDICOMInfo.GetItemData(i);		iArraySize = pArr->GetSize();		for (j = 0; j < iArraySize; j++) {			pItemInfo = (*pArr)[j].pItemInfo;			Pidl_Free(pItemInfo->pidlFQ);			Pidl_Free(pItemInfo->pidlRel);			delete[] pItemInfo;		}		delete pArr;	}	CDialog::OnDestroy();}void RxLoadImportDlg::OnOK() {	int nSel, i = 0, j, nItemCount = m_listDICOMInfo.GetSelectedCount(), nCount;	CArray<TwoStrings, TwoStrings&> *pArr;	m_nImportCount = 0;	POSITION pos = m_listDICOMInfo.GetFirstSelectedItemPosition();	while (pos) {		nSel = m_listDICOMInfo.GetNextSelectedItem(pos);		pArr = (CArray<TwoStrings, TwoStrings&>*)m_listDICOMInfo.GetItemData(nSel);		m_nImportCount += pArr->GetSize();	}	m_ppImportItemList = new LPITEMINFO[m_nImportCount];	m_pstrImportUID = new CString[m_nImportCount];	FILETIME ft;	CString strTemp;	pos = m_listDICOMInfo.GetFirstSelectedItemPosition();	while (pos) {		nSel = m_listDICOMInfo.GetNextSelectedItem(pos);		pArr = (CArray<TwoStrings, TwoStrings&>*)m_listDICOMInfo.GetItemData(nSel);		nCount = pArr->GetSize();		for (j = 0; j < nCount; j++) {			m_pstrImportUID[i] = UID2Str((*pArr)[j].strUID);			// UID啊 绝阑 版快 system time阑 荤侩秦 烙矫 UID甫 父电促			if (m_pstrImportUID[i].IsEmpty()) {				::GetSystemTimeAsFileTime(&ft);				strTemp.Format(_T("%ld.%ld"), ft.dwLowDateTime, ft.dwHighDateTime);				m_pstrImportUID[i] = strTemp;			}			m_ppImportItemList[i] = (LPITEMINFO)new BYTE[sizeof(ITEMINFO)];			m_ppImportItemList[i]->pidlFQ =	Pidl_Copy((*pArr)[j].pItemInfo->pidlFQ);			m_ppImportItemList[i]->pidlRel = Pidl_Copy((*pArr)[j].pItemInfo->pidlRel);			//(*pArr)[j].pItemInfo->pParentFolder->AddRef();			m_ppImportItemList[i++]->pParentFolder = (*pArr)[j].pItemInfo->pParentFolder;		}	}	// Registry俊 弥辟 folder甫 save茄促.	RxRegistry regRecent;	LPITEMIDLIST pidl = m_ctrlDirTree.GetCurPidl();	if (!pidl)		return;	UINT uSize = Pidl_GetSize(pidl);	LPBYTE pbyBuffer = new BYTE[uSize];	memcpy(pbyBuffer, pidl, uSize);	//LOG_MESSAGE("Set PIDL in registry.");	regRecent.SetValue("RecentImport", REG_BINARY, pbyBuffer, uSize);	delete[] pbyBuffer;	CDialog::OnOK();}// delete绰 caller啊 氓烙瘤绊 秦林绢具窃void RxLoadImportDlg::GetImportInfo(ImportInfo* II){	II->nCount = m_nImportCount;	II->ppItemList = m_ppImportItemList;	II->pstrStudyUID = m_pstrImportUID;	II->bMove = m_bMoveFile;}void RxLoadImportDlg::OnButtonSearch() {	CString strTemp;	int lTotalFileCount = 0;	// List狼 葛电 郴侩阑 瘤款促.	LPITEMINFO pTmpItem;	CArray<TwoStrings, TwoStrings&> *pArr;	int nItemCount = m_listDICOMInfo.GetItemCount();	int j, iArraySize;	for (int i = 0; i < nItemCount; i++) {		pArr = (CArray<TwoStrings, TwoStrings&>*)m_listDICOMInfo.GetItemData(i);		iArraySize = pArr->GetSize();		for (j = 0; j < iArraySize; j++) {			pTmpItem = (*pArr)[j].pItemInfo;			Pidl_Free(pTmpItem->pidlFQ);			Pidl_Free(pTmpItem->pidlRel);			if (pTmpItem->pParentFolder)				pTmpItem->pParentFolder->Release();			delete[] pTmpItem;		}		delete pArr;	}	m_listDICOMInfo.DeleteAllItems();	LPITEMINFO pItemInfo = m_ctrlDirTree.GetCurItem();	if (!pItemInfo)		return;	if(!m_bQuickSearch){		BeginWaitCursor();		TotalFilesInSubtree(pItemInfo, lTotalFileCount);		EndWaitCursor();		if (m_pWndProgress)			delete m_pWndProgress;		m_pWndProgress = new RxProgressWnd;		m_pWndProgress->GoModal(_T("Importing Progress"), TRUE, TRUE);		m_pWndProgress->SetWindowSize(0);		m_pWndProgress->SetRange(0, lTotalFileCount);	}	BeginWaitCursor();	UpdateListCtrl(pItemInfo, TRUE, m_bQuickSearch);	EndWaitCursor();	m_bCancel = FALSE;				if (m_pWndProgress) {		delete m_pWndProgress;		m_pWndProgress = NULL;	}	// Item捞 茄俺老 版快 急琶登绢 乐档废 茄促.	if (m_listDICOMInfo.GetItemCount() == 1)		m_listDICOMInfo.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);}void RxLoadImportDlg::OnCheckRecursiveQuick() {	UpdateData();	BOOL bTest = m_bQuickSearch;}void RxLoadImportDlg::OnItemchangedListDicomInfo(NMHDR* pNMHDR, LRESULT* pResult) {	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;	CButton* pButton = (CButton*)GetDlgItem(IDOK);	if (m_listDICOMInfo.GetSelectedCount() > 0)		pButton->EnableWindow(TRUE);	else		pButton->EnableWindow(FALSE);	*pResult = 0;}BOOL RxLoadImportDlg::SetToRecentImportFolder(){	LPBYTE pbyRecent = NULL;	RxRegistry regRecent;	//LOG_MESSAGE("Before query binary");	if (regRecent.QueryValueBinary("RecentImport", (char**)&pbyRecent)) {		m_ctrlDirTree.SetCurPidl((LPITEMIDLIST)pbyRecent);		delete[] pbyRecent;	}	//LOG_MESSAGE("After query binary");	return TRUE;}CString RxLoadImportDlg::UID2Str(CString strUID){	CString strRet;	int nLen = strUID.GetLength();	for (int i = 0; i < nLen; i++) {		switch (strUID[i]) {		case '"':		case '/':		case '*':		case '?':		case '|':

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -