📄 selectfolderdlg.cpp
字号:
// 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 + -