ENRIT/View/ViewScanImage.cpp
@@ -35,6 +35,9 @@
   m_IV2M = NULL;
   m_pHardware = NULL;
   m_pGlassData = NULL;   
   m_nCurrentFolderIndex = 0;
   m_bIsBatchProcessing = FALSE;
}
CViewScanImage::~CViewScanImage()
@@ -160,6 +163,8 @@
   ON_EVENT(CViewScanImage, IDC_BTN_PROC, DISPID_CLICK, CViewScanImage::OnBnClickedBtnProc, VTS_NONE)
   ON_EVENT(CViewScanImage, IDC_BTN_LOAD_ALL, DISPID_CLICK, CViewScanImage::OnBnClickedLoadAll, VTS_NONE)
   ON_EVENT(CViewScanImage, IDC_SAVE_ALL, DISPID_CLICK, CViewScanImage::OnBnClickedSaveAll, VTS_NONE)
   ON_EVENT(CViewScanImage, IDC_BTN_START_BATCH, DISPID_CLICK, CViewScanImage::OnBtnStartBatch, VTS_NONE)
   ON_EVENT(CViewScanImage, IDC_BTN_STOP_BATCH, DISPID_CLICK, CViewScanImage::OnBtnStopBatch, VTS_NONE)
END_EVENTSINK_MAP()
@@ -345,6 +350,18 @@
      m_frameImg[nIndex].ViewUpdate();
   }
   return 1;
}
LRESULT CViewScanImage::OnBatchProcessNext(WPARAM wParam, LPARAM lParam)
{
   if (!m_bIsBatchProcessing) {
      return 0;
   }
   m_nCurrentFolderIndex++;
   ProcessNextFolder();
   return 0;
}
void CViewScanImage::SetRecipe(CHardwareSettings *pHW)
@@ -636,7 +653,6 @@
   scrollInfoH.nTrackPos   = 64;
   
   double dZoom = m_frameImg[0].GetZoomData();
   scrollInfoV.nPage   = m_frameImg[0].m_WndRect.Height();
   scrollInfoH.nPage   = (int)(m_frameImg[0].m_WndRect.Width() / dZoom);   
@@ -1043,6 +1059,23 @@
void CViewScanImage::OnBnClickedLoadAll()  {ManualThreadStart(M_CMD_IMG_LOAD_ALL,-1);}
void CViewScanImage::OnBnClickedSaveAll()  {ManualThreadStart(M_CMD_IMG_SAVE_ALL,-1);}
void CViewScanImage::OnBtnStartBatch()
{
   // 启动批处理
   CFolderPickerDialog dlg(NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT, this, 0);
   if (dlg.DoModal() == IDOK) {
      CString strFolderPath = dlg.GetPathName();
      m_bIsBatchProcessing = TRUE;
      StartBatchProcess(strFolderPath);
   }
}
void CViewScanImage::OnBtnStopBatch()
{
   // 停止批处理
   m_bIsBatchProcessing = FALSE;
}
BOOL CViewScanImage::ManualThreadStart(int nCmd,int nIndex /*= -1*/)
{
   if (m_pManualProcess) {
@@ -1306,6 +1339,7 @@
      }
      // 执行处理线程
      m_nIndex = -1;
      switch (m_nShowSelect)
      {
      case 0:
@@ -1321,6 +1355,47 @@
   }
}
void CViewScanImage::StartBatchProcess(const CString& strRootFolder)
{
   m_arrFolderList.RemoveAll();
   // 搜索所有子文件夹
   CFileFind finder;
   CString strSearchPath = strRootFolder + _T("\\*.*");
   BOOL bWorking = finder.FindFile(strSearchPath);
   while (bWorking) {
      bWorking = finder.FindNextFile();
      // 排除 . 和 .. 以及非文件夹
      if (finder.IsDots() || !finder.IsDirectory()) {
         continue;
      }
      m_arrFolderList.Add(finder.GetFilePath());
   }
   finder.Close();
   // 从第一个开始处理
   m_nCurrentFolderIndex = 0;
   ProcessNextFolder();
}
void CViewScanImage::ProcessNextFolder()
{
   if (!m_bIsBatchProcessing) {
      return;
   }
   if (m_nCurrentFolderIndex < m_arrFolderList.GetSize()) {
      CString strFolder = m_arrFolderList[m_nCurrentFolderIndex];
      LoadAndProcessImages(strFolder);
   }
   else {
      m_arrFolderList.RemoveAll();
      m_bIsBatchProcessing = FALSE;
   }
}
UINT CViewScanImage::ManualProcessAll(LPVOID pParam)
{
   CViewScanImage *pDlg = (CViewScanImage*)pParam;