int CALLBACK CQuer3080ImgDlg::BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData){ if(uMsg==BFFM_SELCHANGED||uMsg==BFFM_INITIALIZED) { if(uMsg==BFFM_INITIALIZED) { ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE, LPARAM(lpData)); } } return 0;}
void CQuer3080ImgDlg::OnBnClickedBtnOpen(){
Invalidate(); BROWSEINFO bi={0}; bi.hwndOwner = this->GetSafeHwnd(); bi.pidlRoot = NULL; bi.lpszTitle = _T("请选择打开路径"); bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX; bi.lpfn = BrowseCallbackProc; bi.lParam = (LPARAM)m_strPath.GetBuffer(m_strPath.GetLength()); LPITEMIDLIST pIdl; if((pIdl = SHBrowseForFolder(&bi)) != NULL) { TCHAR path[MAX_PATH]; SHGetPathFromIDList(pIdl,path); m_strTemplateInfoPath = path; m_strPath=path; BOOL blValidate=ValidateFolderName(m_strTemplateInfoPath); if (!blValidate) { AfxMessageBox(_T("文件夹不正确")); } else { m_bGetFileData=TRUE; this->SetWindowText(_T("Query3080Img_")+m_strTemplateInfoPath); ReadImgTDRData(m_strTemplateInfoPath); ReadSliceData(m_strTemplateInfoPath); m_ImgStatic.SetImgData(g_dr_data_t.get()); int nPos=GetDlgItemInt(IDC_EDT_SLICE); nPos=nPos*0.429+1; SetCTImg(nPos); SetAactiveXStatus(TRUE); ((CComboBox*)GetDlgItem(IDC_CBO_DRIMG_DEAL))->SetCurSel(0); ((CComboBox*)GetDlgItem(IDC_CBO_CTIMG_DEAL))->SetCurSel(0); } } }
BOOL CQuer3080ImgDlg::ValidateFolderName(CString strPath){ try { CStringArray sa; int nCount=String2Array(strPath,sa,_T("//"));
if (nCount<2) { return FALSE; }
CString strLastName=sa.ElementAt(nCount-1); CString strPrevName=sa.ElementAt(nCount-2);
if (strLastName.GetLength()!=6) { return FALSE; }
if (strPrevName.GetLength()!=8) { return FALSE; }
int nYear,nMonth,nDay,nHour,nMinute,nSecond;
swscanf(strLastName,_T("ddd"),&nHour,&nMinute,&nSecond); swscanf(strPrevName,_T("ddd"),&nYear,&nMonth,&nDay);
CTime ct(nYear, nMonth, nDay, nHour, nMinute, nSecond);
CString str1 = ct.Format("%Y%m%d"); CString str2 = ct.Format("%H%M%S");
if (str2==strLastName && str1==strPrevName) { return TRUE; } else { return FALSE; }
} catch (...) { return FALSE; } return TRUE;}
int CQuer3080ImgDlg::String2Array(const CString& s, CStringArray &sa, CString sSplitter) { int nLen=s.GetLength(), nLastPos, nPos; bool bContinue;
sa.RemoveAll(); nLastPos=0; do { bContinue=false; nPos = s.Find(sSplitter, nLastPos); if (-1!=nPos) { sa.Add(s.Mid(nLastPos, nPos-nLastPos)); nLastPos=nPos+1; if (nLastPos != nLen) bContinue=true; } } while (bContinue);
if (nLastPos != nLen) sa.Add(s.Mid(nLastPos, nLen-nLastPos));
return sa.GetSize(); }