📄 selectfolderdlg.cpp
字号:
case ':': case '[': case ']': break; default: strRet += strUID[i]; break; } } return strRet;}void RxLoadImportDlg::OnSelchangedTreeFolder(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; DWORD dwAttribs; SHFILEINFO sfi; TCHAR szPath[MAX_PATH]; CString strFolder(""); LPITEMINFO pItemInfo = (LPITEMINFO)pNMTreeView->itemNew.lParam; dwAttribs = SFGAO_FILESYSTEM | SFGAO_FOLDER; if (SHGetFileInfo((LPCTSTR)pItemInfo->pidlFQ, dwAttribs, &sfi, sizeof(sfi), SHGFI_PIDL | SHGFI_ATTRIBUTES)) { if (sfi.dwAttributes & SFGAO_FILESYSTEM) { if (SHGetPathFromIDList(pItemInfo->pidlFQ, szPath)) strFolder = szPath; } } CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_FOLDER); pStatic->SetWindowText(strFolder); if (strFolder.Right(1) != "\\" && !strFolder.IsEmpty()) strFolder += "\\"; m_strCurSelFolder = strFolder; // CD-ROM老 版快 Move file阑 disable茄促. CString strDrive; if (!m_strCurSelFolder.IsEmpty()) { strDrive = m_strCurSelFolder.Left(3); CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_MOVE_FILES); if (::GetDriveType(strDrive) == DRIVE_CDROM) pButton->EnableWindow(FALSE); else pButton->EnableWindow(TRUE); } CButton *pButtonQuick = (CButton*)GetDlgItem(IDC_CHECK_RECURSIVE_QUICK); if (strFolder.IsEmpty()) { pButtonQuick->EnableWindow(FALSE); return; } else { pButtonQuick->EnableWindow(TRUE); } // 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(); // Dialog狼 郴侩阑 啊廉柯促 UpdateData(TRUE); //LOG_MESSAGE("Before update list control in dialog"); if (pItemInfo && !strFolder.IsEmpty()) { BeginWaitCursor(); UpdateListCtrl(pItemInfo, m_bRecursive, TRUE); EndWaitCursor(); } //LOG_MESSAGE("After update list control in dialog"); // Item捞 茄俺老 版快 急琶登绢 乐档废 茄促. if (m_listDICOMInfo.GetItemCount() == 1) m_listDICOMInfo.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED); //眠啊等何盒 场 *pResult = 0;}void RxLoadImportDlg::UpdateListCtrl(LPITEMINFO pItemCur, BOOL bRecursive, BOOL bQuick){ int i, j, nItemCount, nCol, nCount, nID; CString strFileVal; CString strDicomFile; CArray<TwoStrings, TwoStrings&> *pArr; TwoStrings tsTemp; RxDicomObject* pDcm; BOOL bBreak; CString strValue, strTemp; int itype; IShellFolder *psfCurFolder = NULL; LPITEMIDLIST pidlCurFQ = NULL; int iThresholdCount = 0; if (pItemCur && pItemCur->pParentFolder) { pItemCur->pParentFolder->BindToObject(pItemCur->pidlRel, NULL, IID_IShellFolder, (LPVOID*)&psfCurFolder); pidlCurFQ = Pidl_Copy(pItemCur->pidlFQ); } else { SHGetDesktopFolder(&psfCurFolder); if (pItemCur) pidlCurFQ = Pidl_Copy(pItemCur->pidlFQ); } pDcm = new RxDicomObject; if (m_pWndProgress) m_pWndProgress->SetText(_T("Searching..")); // 颇老甸阑 八祸 LPENUMIDLIST pEnum; if (SUCCEEDED(psfCurFolder->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &pEnum))) { LPITEMIDLIST pidlTemp; DWORD dwFetched = 1; //enumerate the item's PIDLs while (SUCCEEDED(pEnum->Next(1, &pidlTemp, &dwFetched)) && dwFetched) { DWORD dwAttr; LPITEMIDLIST pidlFQ; LPITEMINFO pItem; TCHAR szPath[MAX_PATH]; if (m_pWndProgress && m_pWndProgress->Cancelled()) { delete m_pWndProgress; m_pWndProgress = NULL; m_bCancel = TRUE; break; } else if (!m_pWndProgress && m_bCancel ==TRUE) break; else if (m_pWndProgress){ m_pWndProgress->StepIt(); m_pWndProgress->PeekAndPump(); } dwAttr = SFGAO_FILESYSTEM | SFGAO_FOLDER; psfCurFolder->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp, &dwAttr); if (dwAttr & SFGAO_FILESYSTEM) { if ((dwAttr & SFGAO_FOLDER) && bRecursive) { psfCurFolder->AddRef(); pItem = (LPITEMINFO)new BYTE[sizeof(ITEMINFO)]; pItem->pidlRel = pidlTemp; pItem->pidlFQ = Pidl_Concatenate(pidlCurFQ, pidlTemp); pItem->pParentFolder = psfCurFolder; UpdateListCtrl(pItem, bRecursive, bQuick); Pidl_Free(pItem->pidlFQ); Pidl_Free(pItem->pidlRel); // this may be NULL if this is the root item if (pItem->pParentFolder) pItem->pParentFolder->Release(); delete[] pItem; } else if ((!(dwAttr & SFGAO_FOLDER)) && (iThresholdCount <= 5)) { //bQuick 捞 芭窿捞搁 公炼扒 捣促. pidlFQ = Pidl_Concatenate(pidlCurFQ, pidlTemp); if (SHGetPathFromIDList(pidlFQ, szPath)) { if (bQuick) iThresholdCount++; strDicomFile = szPath; strFileVal = strDicomFile.Right(strDicomFile.GetLength() - strDicomFile.ReverseFind('\\') - 1); //LOG_MESSAGE("Before load head in dialog"); if(!pDcm->LoadHeader(strDicomFile)) continue; //LOG_MESSAGE("After load head in dialog"); // ListCtrl俊 Study UID啊 绝栏搁 眠啊茄促. //LOG_MESSAGE("Check if it is in list"); nItemCount = m_listDICOMInfo.GetItemCount(); bBreak = FALSE; for (i = 0; i < nItemCount; i++) { pArr = (CArray<TwoStrings, TwoStrings&>*)m_listDICOMInfo.GetItemData(i); nCount = pArr->GetSize(); pDcm->GetDicomInfo(DI_STUDYUID, &strValue, &itype); for (j = 0; j < nCount; j++) { if (!((*pArr)[j].strUID.Compare(strValue))) { bBreak = TRUE; break; } } if (bBreak) break; } // 酒流 list俊 绝栏搁 insert if (nItemCount == i) { //LOG_MESSAGE("Before inserting item into list"); nCol = 1; pDcm->GetDicomInfo(DI_PATIENTNAME, &strValue, &itype); m_listDICOMInfo.InsertItem(nItemCount, strValue); pDcm->GetDicomInfo(DI_PATIENTID, &strValue, &itype); m_listDICOMInfo.SetItemText(nItemCount, nCol++, strValue); pDcm->GetDicomInfo(DI_EXAMDATE, &strValue, &itype); m_listDICOMInfo.SetItemText(nItemCount, nCol++, strValue); pDcm->GetDicomInfo(DI_SEX, &strValue, &itype); m_listDICOMInfo.SetItemText(nItemCount, nCol++, strValue); pDcm->GetDicomInfo(DI_MODALITY, &strValue, &itype); m_listDICOMInfo.SetItemText(nItemCount, nCol++, strValue); pArr = new CArray<TwoStrings, TwoStrings&>; pDcm->GetDicomInfo(DI_STUDYUID,&strValue,&itype); tsTemp.strUID = strValue; pItem = (LPITEMINFO)new BYTE[sizeof(ITEMINFO)]; pItem->pidlRel = Pidl_Copy(pItemCur->pidlRel); pItem->pidlFQ = Pidl_Copy(pItemCur->pidlFQ); if (pItemCur->pParentFolder) pItemCur->pParentFolder->AddRef(); pItem->pParentFolder = pItemCur->pParentFolder; tsTemp.pItemInfo = pItem; pArr->Add(tsTemp); m_listDICOMInfo.SetItemData(nItemCount, (DWORD)pArr); //LOG_MESSAGE("After inserting item into list"); } else { // Study UID绰 乐绰单 folder啊 绝绰 版快 nID = i; bBreak = FALSE; for (i = 0; i < nItemCount; i++) { pArr = (CArray<TwoStrings, TwoStrings&>*)m_listDICOMInfo.GetItemData(i); nCount = pArr->GetSize(); for (j = 0; j < nCount; j++) { if (!Pidl_Compare(pItemCur->pidlFQ, (*pArr)[j].pItemInfo->pidlFQ, 1)) { bBreak = TRUE; break; } } if (bBreak) break; } // UID绰 乐绰单 folder啊 绝阑 版快 if (nItemCount == i) { nCol = 1; pArr = (CArray<TwoStrings, TwoStrings&>*)m_listDICOMInfo.GetItemData(nID); pDcm->GetDicomInfo(DI_STUDYUID, &strValue, &itype); tsTemp.strUID = strValue; pItem = (LPITEMINFO)new BYTE[sizeof(ITEMINFO)]; pItem->pidlRel = Pidl_Copy(pItemCur->pidlRel); pItem->pidlFQ = Pidl_Copy(pItemCur->pidlFQ); pItem->pParentFolder = pItemCur->pParentFolder; pItemCur->pParentFolder->AddRef(); tsTemp.pItemInfo = pItem; pArr->Add(tsTemp); } //LOG_MESSAGE("Check done"); } } Pidl_Free(pidlFQ); } } dwFetched = 0; } pEnum->Release(); } if (psfCurFolder) { psfCurFolder->Release(); //psfCurFolder = NULL; Pidl_Free(pidlCurFQ); pidlCurFQ = NULL; } delete pDcm;}void RxLoadImportDlg::OnColumnclickListFolder(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; int nSortingColumn = pNMListView->iSubItem; m_listDICOMInfo.InvertSortOrder(nSortingColumn); RxSort sortColumn(&m_listDICOMInfo, nSortingColumn); sortColumn.Sort(m_listDICOMInfo.GetSortOrder(nSortingColumn), (RxSort::EDataType)m_listDICOMInfo.GetSortType(nSortingColumn)); *pResult = 0;}void RxLoadImportDlg::OnCancel() { // OnDestroy俊辑 皋葛府绰 瘤快瘤父 // Reference count绰 咯扁辑 皑家矫糯 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; if (pItemInfo->pParentFolder) pItemInfo->pParentFolder->Release(); } } CDialog::OnCancel();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -