ShowPic3.cpp 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021
  1. // ShowPic3.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ylgl.h"
  5. #include "ShowPic3.h"
  6. #include "ShowPic22.h"
  7. #include "JPEG.h"
  8. #include "MyLock.h"
  9. #define THUMBNAIL_WIDTH 100
  10. #define THUMBNAIL_HEIGHT 90
  11. ShowPic3::ShowPic3(CWnd* pParent /*=NULL*/) : CDialog(ShowPic3::IDD, pParent)
  12. {
  13. m_bTerminate = false;
  14. m_bRunning = false;
  15. m_hThread = NULL;
  16. }
  17. void ShowPic3::DoDataExchange(CDataExchange* pDX)
  18. {
  19. CDialog::DoDataExchange(pDX);
  20. //{{AFX_DATA_MAP(ShowPic3)
  21. DDX_Control(pDX, IDC_LIST2, m_List2);
  22. DDX_Control(pDX, IDC_LIST1, m_List1);
  23. //}}AFX_DATA_MAP
  24. DDX_Control(pDX, IDC_COMBO1, m_combobox);
  25. }
  26. BEGIN_MESSAGE_MAP(ShowPic3, CDialog)
  27. //{{AFX_MSG_MAP(ShowPic3)
  28. ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
  29. ON_WM_DESTROY()
  30. ON_BN_CLICKED(IDC_BUTdelall, OnBUTdelall)
  31. ON_BN_CLICKED(IDC_BUTdel, OnBUTdel)
  32. ON_LBN_SELCHANGE(IDC_LIST2, OnSelchangeList2)
  33. ON_BN_CLICKED(IDC_BTNshow1, OnBTNshow1)
  34. ON_BN_CLICKED(IDC_BTNshow2, OnBTNshow2)
  35. ON_BN_CLICKED(IDC_BTNshow3, OnBTNshow3)
  36. ON_BN_CLICKED(IDC_BTNshow4, OnBTNshow4)
  37. ON_BN_CLICKED(IDC_BUTdel1, OnBUTdel1)
  38. ON_BN_CLICKED(IDC_BUTdel2, OnBUTdel2)
  39. ON_BN_CLICKED(IDC_BUTdel3, OnBUTdel3)
  40. ON_BN_CLICKED(IDC_BUTdel4, OnBUTdel4)
  41. //}}AFX_MSG_MAP
  42. ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1)
  43. ON_BN_CLICKED(Btn_NextOne, OnBnClickedNextone)
  44. ON_MESSAGE(OWNER_MSG_SHOWPHOTO, ShowPhoto2Found)
  45. END_MESSAGE_MAP()
  46. /////////////////////////////////////////////////////////////////////////////
  47. // ShowPic3 message handlers
  48. BOOL ShowPic3::OnInitDialog()
  49. {
  50. CDialog::OnInitDialog();
  51. CRect rc, rc2;
  52. GetWindowRect(rc2);
  53. ::MoveWindow(m_hWnd, g_rc.left, g_rc.top, g_rc.Width(), g_rc.Height(), TRUE);
  54. GetClientRect(rc);
  55. m_List2.GetWindowRect(rc2);
  56. ScreenToClient(rc2);
  57. int dt = rc2.left;
  58. rc2.bottom = rc.bottom - dt;
  59. m_List2.MoveWindow(rc2);
  60. m_List1.GetWindowRect(rc2);
  61. ScreenToClient(rc2);
  62. rc2.bottom = rc.bottom - dt;
  63. rc2.right = rc.right - dt;
  64. m_List1.MoveWindow(rc2);
  65. #if JEFF_TEST_ON
  66. CString strFilters = _T("[status3] = 'OK'");
  67. g_sendhead.bsql = 0;
  68. g_sendhead.code[0] = 217; // case 217:dindan表;
  69. g_sendhead.tabcount = 1;
  70. g_pMainWnd->ProcessChatMessageRequest2(strFilters);
  71. #else
  72. g_sendhead.bsql = 0;
  73. g_sendhead.code[0] = 217; // case 217:dindan表;
  74. g_sendhead.tabcount = 1;
  75. g_pMainWnd->ProcessChatMessageRequest2(1);
  76. #endif
  77. if (g_bSendOK == 0)
  78. {
  79. CDialog::OnCancel();
  80. return 0;
  81. }
  82. DataToArray(&g_List1array);
  83. LoadPhotos();// Jeff.获取客户原片里的所有订单文件夹名称;
  84. CString str;
  85. for (int i = 0; i < g_List1array.GetSize(); i++)
  86. {
  87. str = g_List1array.ElementAt(i).ElementAt(0); // Jeff.nIndex==0,为订单号id;
  88. if (FindArray(&m_dirarray1, str) == -1)
  89. {
  90. if (FindArray(&m_dirarray2, str) == -1)
  91. {
  92. if (FindArray(&m_dirarray3, str) == -1)
  93. {
  94. if (FindArray(&m_dirarray4, str) == -1)
  95. {
  96. continue;
  97. }
  98. }
  99. }
  100. }
  101. str += "\r\n";
  102. str += g_List1array.ElementAt(i).ElementAt(1); // Jeff.nIndex==1,为订单客户1;
  103. str += g_List1array.ElementAt(i).ElementAt(2); // Jeff.nIndex==2,为订单客户2;
  104. m_strArrayName.Add(str);
  105. m_combobox.AddString(g_List1array.ElementAt(i).ElementAt(1) + g_List1array.ElementAt(i).ElementAt(2));
  106. if (m_List2.GetCount() % 2)
  107. m_List2.AddEntry(str, g_gridcol1, m_List2.GetCount());
  108. else
  109. m_List2.AddEntry(str, g_gridcol2, m_List2.GetCount());
  110. }
  111. m_List2.Invalidate();
  112. m_ImageListThumb.Create(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, ILC_COLOR24, 0, 1);
  113. m_List1.SetImageList(&m_ImageListThumb, LVSIL_NORMAL);
  114. return TRUE;
  115. }
  116. /************************************************************************/
  117. /*
  118. 显示相片时,相片路径订单号以上的字符串去除,只留下景点名;
  119. */
  120. /************************************************************************/
  121. DWORD ShowPic3::LoadThumbNail20(LPVOID lpParam)
  122. {
  123. try
  124. {
  125. ShowPic3 *pDlg = (ShowPic3*)lpParam;
  126. CListCtrl *ListCtrl = &pDlg->m_List1;
  127. CImageList* pImgList = &pDlg->m_ImageListThumb;
  128. for (int i = 0; i < pImgList->GetImageCount(); i++)
  129. pImgList->Remove(i);
  130. ListCtrl->DeleteAllItems();
  131. ListCtrl->Invalidate();
  132. pImgList->SetImageCount(pDlg->m_vFileName.GetSize());
  133. TCHAR path[MAX_PATH];
  134. vector<CString>::iterator iter;
  135. // Set redraw to FALSE to avoid flickering during adding new items
  136. ListCtrl->SetRedraw(FALSE);
  137. int nIndex = 0;
  138. INT xIndex = 0;
  139. for (nIndex = 0;!pDlg->m_bTerminate && nIndex < pDlg->m_vFileName.GetSize(); nIndex++)
  140. {
  141. CString str, spath; // 这两个变量放在for外面,会有内存泄漏,但在for内部就不会有;
  142. #ifdef USE_KERNEL_DLL
  143. str = pDlg->m_vFileName.ElementAt(nIndex);
  144. xIndex = str.Find(pDlg->m_strOrderNumber);
  145. if ( xIndex != -1 )
  146. {
  147. str = str.Mid( xIndex + pDlg->m_strOrderNumber.GetLength() + 1);
  148. xIndex = str.ReverseFind(_T('.'));
  149. if ( xIndex != -1 )
  150. str = str.Left(xIndex);
  151. }
  152. #else
  153. str = *iter;
  154. spath.Empty();
  155. if (str.Left(str.ReverseFind('\\') + 1) != pDlg->m_path)
  156. {
  157. spath = str.Left(str.ReverseFind('\\') + 1);
  158. spath = spath.Right(spath.GetLength() - pDlg->m_path.GetLength());
  159. }
  160. str = str.Right(str.GetLength() - str.ReverseFind('\\') - 1);
  161. str = spath + str.Left(str.GetLength() - 4);
  162. #endif
  163. ListCtrl->InsertItem(nIndex, str, nIndex);
  164. }
  165. if ( pDlg->m_bTerminate )
  166. {
  167. pDlg->m_bRunning = false;
  168. pDlg->m_bTerminate = false;
  169. return 0;
  170. }
  171. ListCtrl->SetRedraw(TRUE);
  172. ListCtrl->Invalidate();
  173. const float fRatio = (float)THUMBNAIL_HEIGHT / THUMBNAIL_WIDTH;
  174. int XDest, YDest, nDestWidth, nDestHeight;
  175. nIndex = 0;
  176. SolidBrush whitebrush(Color(255, 255, 255, 255));
  177. for ( nIndex = 0; !pDlg->m_bTerminate && nIndex < pDlg->m_vFileName.GetSize(); nIndex++ )
  178. {
  179. CString str, spath;
  180. // Load Image File
  181. Image *image = NULL;
  182. Bitmap *pBmp = NULL;
  183. //str = *iter;
  184. str = pDlg->m_vFileName.ElementAt(nIndex);
  185. spath = str.Left(str.ReverseFind('\\') + 1);
  186. spath += "s";
  187. spath += str.Right(str.GetLength() - str.ReverseFind('\\') - 1);
  188. if (PathFileExists(spath))
  189. ::LoadImageFromBuf(&image, spath);
  190. else
  191. {
  192. str.MakeLower();
  193. if (str.Right(3) != "jpg")continue;
  194. ::LoadImageFromBuf(&image, str);
  195. }
  196. if (image == NULL)continue;
  197. int orientation = GetOrientation(image);
  198. if (orientation == 8)
  199. image->RotateFlip(Rotate270FlipNone);
  200. else if (orientation == 6)
  201. image->RotateFlip(Rotate90FlipNone);
  202. if (image->GetWidth() == 0)
  203. continue;
  204. // Calculate Rect to fit to canvas
  205. const float fImgRatio = (float)image->GetHeight() / image->GetWidth();
  206. if (fImgRatio > fRatio)
  207. {
  208. nDestWidth = THUMBNAIL_HEIGHT / fImgRatio;
  209. XDest = (THUMBNAIL_WIDTH - nDestWidth) / 2;
  210. YDest = 0;
  211. nDestHeight = THUMBNAIL_HEIGHT;
  212. }
  213. else
  214. {
  215. XDest = 0;
  216. nDestWidth = THUMBNAIL_WIDTH;
  217. nDestHeight = THUMBNAIL_WIDTH*fImgRatio;
  218. YDest = (THUMBNAIL_HEIGHT - nDestHeight) / 2;
  219. }
  220. pBmp = new Bitmap(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, PixelFormat24bppRGB);
  221. Graphics graph2(pBmp);
  222. graph2.Clear(Color(255, 192, 192, 192));
  223. graph2.FillRectangle(&whitebrush, 1, 1, THUMBNAIL_WIDTH - 2, THUMBNAIL_HEIGHT - 2);
  224. Graphics graph(pBmp);
  225. Rect desRect(XDest, YDest, nDestWidth, nDestHeight);
  226. // Draw Image
  227. graph.DrawImage(image, desRect, 0, 0, image->GetWidth(), image->GetHeight(), UnitPixel);
  228. delete image;
  229. // Attach to Bitmap and Replace image in CImageList
  230. CBitmap bitmap;
  231. HBITMAP hbmp;
  232. pBmp->GetHBITMAP(Color(255, 255, 255, 255), &hbmp);
  233. bitmap.Attach(hbmp);
  234. pImgList->Replace(nIndex, &bitmap, NULL);
  235. delete pBmp;
  236. // Redraw only a current item for removing flickering and fast speed.
  237. ListCtrl->RedrawItems(nIndex, nIndex);
  238. // Release used DC and Object
  239. }
  240. if ( !pDlg->m_bTerminate )ListCtrl->Invalidate();
  241. pDlg->m_bRunning = false;
  242. pDlg->m_bTerminate = false;
  243. return 0;
  244. }
  245. catch (...)
  246. {
  247. }
  248. return 0;
  249. }
  250. void ShowPic3::LoadThumbImages()
  251. {
  252. if ( TerminateThread() )
  253. {
  254. m_hThread = CreateThread(NULL, 0, LoadThumbNail20, this, 0, NULL);
  255. CloseHandle(m_hThread);
  256. m_hThread = NULL;
  257. m_bRunning = true;
  258. }
  259. }
  260. BOOL ShowPic3::TerminateThread()
  261. {
  262. #ifdef USE_KERNEL_DLL
  263. // 线程未运行,返回TRUE;
  264. if (!m_bRunning) return TRUE;
  265. // 标记线程正在关闭;
  266. m_bTerminate = TRUE;
  267. // 小憩,呆线程结束;
  268. Sleep(100);
  269. return FALSE;
  270. #else
  271. if (!m_bRunning)
  272. return TRUE;
  273. m_bTerminate = true;
  274. for (;;)
  275. {
  276. if (::WaitForSingleObject(m_hThread, 0) == WAIT_OBJECT_0)
  277. break;
  278. MSG msg;
  279. while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
  280. {
  281. if (!AfxGetApp()->PumpMessage())
  282. break;
  283. }
  284. }
  285. ::CloseHandle(m_hThread);
  286. return TRUE;
  287. #endif
  288. }
  289. void ShowPic3::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
  290. {
  291. POSITION pos;
  292. pos = m_List1.GetFirstSelectedItemPosition();
  293. if (pos == NULL)
  294. {
  295. return;
  296. }
  297. int iItem = m_List1.GetNextSelectedItem(pos);
  298. ShowPic22 dlg;
  299. dlg.m_nCurImgPos = iItem;
  300. dlg.m_AryOfImgPath = &m_patharray1;
  301. dlg.DoModal();
  302. *pResult = 0;
  303. }
  304. void ShowPic3::OnDestroy()
  305. {
  306. TerminateThread();
  307. //m_vFileName.clear();
  308. m_vFileName.RemoveAll();
  309. CDialog::OnDestroy();
  310. }
  311. void ShowPic3::LoadPhotos()
  312. {
  313. CString str;
  314. #ifdef USE_KERNEL_DLL
  315. HGLOBAL hMemery;
  316. DWORD dwMemSize = 0;
  317. if ( g_pIMGProcess == NULL )
  318. return;
  319. hMemery = g_pIMGProcess->GetBranchAllOrderDirectory(OImgtype, g_domain.IsEmpty() ? g_branchname : g_domain, dwMemSize);
  320. if ( hMemery )
  321. {
  322. BYTE *pData = (BYTE*)GlobalLock(hMemery);
  323. CMemFile mf;
  324. mf.Attach(pData, dwMemSize);
  325. CArchive ar(&mf, CArchive::load);
  326. CStringArray Arypath;
  327. Arypath.Serialize(ar);
  328. ar.Close();
  329. mf.Detach();
  330. GlobalUnlock(hMemery);
  331. GlobalFree(hMemery);
  332. INT nCount = Arypath.GetSize();
  333. for ( int i = 0; i < nCount; i++ )
  334. {
  335. str = Arypath.ElementAt(i);
  336. str.TrimRight(_T("\\"));
  337. str = str.Mid(str.ReverseFind(_T('\\'))+1);
  338. m_dirarray1.Add(str);
  339. }
  340. }
  341. #else
  342. if (1)
  343. {
  344. // printf("Jeff:g_path1=%s\n\n",g_path1);//Jeff.获取客户原片里的所有订单文件夹名称;
  345. using namespace helper_coffs;
  346. ffsco o;
  347. o.dirs(0);
  348. o.find(LPCSTR(g_path1), LPCSTR("*.*"));
  349. ffsco::typeT coo;
  350. ffsco::typeT::iterator it;
  351. coo = o.co_dir();
  352. for (it = coo.begin(); coo.end() != it; it++)
  353. {
  354. str = (*it).c_str();
  355. if (str == g_path1 + "\\")continue;
  356. str.TrimRight("\\");
  357. str = str.Right(str.GetLength() - str.ReverseFind('\\') - 1);
  358. // printf("Jeff:str=%s\n\n",str);
  359. m_dirarray1.Add(str);
  360. }
  361. }
  362. #endif
  363. return;
  364. }
  365. void ShowPic3::OnBUTdel()
  366. {
  367. }
  368. void ShowPic3::OnSelchangeList2()
  369. {
  370. UpdateData();
  371. int pos = m_List2.GetCurSel();
  372. if (pos == -1)return;
  373. CString str;
  374. m_List2.GetText(pos, str);
  375. pos = str.Find("\r\n");
  376. if (pos == -1)return;;
  377. m_strOrderNumber = str.Left(pos);
  378. m_strOrderNumber.MakeLower();
  379. // printf("Jeff:欲显示的订单号=%s\n\n",m_strOrderNumber);
  380. ShowPhoto1();
  381. if (m_patharray1.GetSize() == 0)OnBTNshow2();
  382. if (m_patharray1.GetSize() == 0)OnBTNshow3();
  383. if (m_patharray1.GetSize() == 0)OnBTNshow4();
  384. }
  385. void ShowPic3::ShowPhoto1() // 查看原片;
  386. {
  387. if (m_strOrderNumber == _T(""))
  388. {
  389. AfxMessageBox(_T("请先选中客人!"), MB_ICONINFORMATION); return;
  390. }
  391. #ifdef USE_KERNEL_DLL
  392. if (m_bRunning)
  393. AfxMessageBox(_T("亲,慢点儿,我快运行不过来了!"), MB_ICONINFORMATION);
  394. ShowOrderImg(OImgtype);
  395. #else
  396. CString str;
  397. m_path = g_path1 + "\\" + m_strOrderNumber + "\\";
  398. m_patharray1.RemoveAll();
  399. if (1)
  400. {
  401. using namespace helper_coffs;
  402. ffsco o;
  403. o.dirs(1);
  404. o.find(LPCSTR(m_path), LPCSTR("*.jpg"));
  405. ffsco::typeT coo;
  406. ffsco::typeT::iterator it;
  407. coo = o.co_file();
  408. for (it = coo.begin(); coo.end() != it; it++)
  409. {
  410. str = (*it).c_str();
  411. if (str.GetAt(str.ReverseFind('\\') + 1) == 's')continue;
  412. if (str.GetAt(str.ReverseFind('\\') + 1) == 'm')continue;
  413. str.MakeLower();
  414. m_patharray1.Add(str);
  415. }
  416. }
  417. if (m_bRunning)return;
  418. CStringArray *pArray = &m_patharray1;
  419. m_vFileName.clear();
  420. for (int i = 0; i < pArray->GetSize(); i++)
  421. {
  422. CString filePath = pArray->ElementAt(i);
  423. filePath.MakeLower();
  424. m_vFileName.push_back(filePath);
  425. }
  426. LoadThumbImages();
  427. #endif
  428. }
  429. void ShowPic3::ShowPhoto2() // 查看初修片;
  430. {
  431. #ifdef USE_KERNEL_DLL
  432. WriteTextLog(_T("修"));
  433. if (m_bRunning)
  434. AfxMessageBox(_T("亲,慢点儿,我快运行不过来了!"), MB_ICONINFORMATION);
  435. ShowOrderImg(EImgtype);
  436. #else
  437. if (m_strOrderNumber == "")
  438. {
  439. AfxMessageBox("请先选中客人!", MB_ICONINFORMATION); return;
  440. }
  441. CString str;
  442. m_path = g_path2 + "\\" + m_strOrderNumber + "\\";
  443. m_patharray1.RemoveAll();
  444. if (1)
  445. {
  446. using namespace helper_coffs;
  447. ffsco o;
  448. o.dirs(1);
  449. o.find(LPCSTR(m_path), LPCSTR("*.jpg"));
  450. ffsco::typeT coo;
  451. ffsco::typeT::iterator it;
  452. coo = o.co_file();
  453. for (it = coo.begin(); coo.end() != it; it++)
  454. {
  455. str = (*it).c_str();
  456. if (str.GetAt(str.ReverseFind('\\') + 1) == 's')continue;
  457. if (str.GetAt(str.ReverseFind('\\') + 1) == 'm')continue;
  458. str.MakeLower();
  459. m_patharray1.Add(str);
  460. }
  461. }
  462. if (m_bRunning)return;
  463. CStringArray *pArray = &m_patharray1;
  464. m_vFileName.clear();
  465. for (int i = 0; i < pArray->GetSize(); i++)
  466. {
  467. CString filePath = pArray->ElementAt(i);
  468. filePath.MakeLower();
  469. m_vFileName.push_back(filePath);
  470. }
  471. LoadThumbImages();
  472. #endif
  473. }
  474. void ShowPic3::ShowPhoto3() // 查看精修片;
  475. {
  476. #ifdef USE_KERNEL_DLL
  477. if (m_bRunning)
  478. AfxMessageBox(_T("亲,慢点儿,我快运行不过来了!"), MB_ICONINFORMATION);
  479. ShowOrderImg(FImgtype);
  480. #else
  481. if (m_strOrderNumber == "")
  482. {
  483. AfxMessageBox("请先选中客人!", MB_ICONINFORMATION); return;
  484. }
  485. CString str;
  486. m_path = g_path3 + "\\" + m_strOrderNumber + "\\";
  487. m_patharray1.RemoveAll();
  488. if (1)
  489. {
  490. using namespace helper_coffs;
  491. ffsco o;
  492. o.dirs(1);
  493. o.find(LPCSTR(m_path), LPCSTR("*.jpg"));
  494. ffsco::typeT coo;
  495. ffsco::typeT::iterator it;
  496. coo = o.co_file();
  497. for (it = coo.begin(); coo.end() != it; it++)
  498. {
  499. str = (*it).c_str();
  500. if (str.GetAt(str.ReverseFind('\\') + 1) == 's')continue;
  501. if (str.GetAt(str.ReverseFind('\\') + 1) == 'm')continue;
  502. str.MakeLower();
  503. m_patharray1.Add(str);
  504. }
  505. }
  506. if (m_bRunning)return;
  507. CStringArray *pArray = &m_patharray1;
  508. m_vFileName.clear();
  509. for (int i = 0; i < pArray->GetSize(); i++)
  510. {
  511. CString filePath = pArray->ElementAt(i);
  512. filePath.MakeLower();
  513. m_vFileName.push_back(filePath);
  514. }
  515. LoadThumbImages();
  516. #endif
  517. }
  518. void ShowPic3::ShowPhoto4() // 查看设计片;
  519. {
  520. #ifdef USE_KERNEL_DLL
  521. if (m_bRunning)
  522. AfxMessageBox(_T("亲,慢点儿,我快运行不过来了!"), MB_ICONINFORMATION);
  523. ShowOrderImg(DImgtype);
  524. #else
  525. if (m_strOrderNumber == "")
  526. {
  527. AfxMessageBox("请先选中客人!", MB_ICONINFORMATION); return;
  528. }
  529. CString str;
  530. m_path = g_path4 + "\\" + m_strOrderNumber + "\\";
  531. m_patharray1.RemoveAll();
  532. if (1)
  533. {
  534. using namespace helper_coffs;
  535. ffsco o;
  536. o.dirs(1);
  537. o.find(LPCSTR(m_path), LPCSTR("*.jpg"));
  538. ffsco::typeT coo;
  539. ffsco::typeT::iterator it;
  540. coo = o.co_file();
  541. for (it = coo.begin(); coo.end() != it; it++)
  542. {
  543. str = (*it).c_str();
  544. if (str.GetAt(str.ReverseFind('\\') + 1) == 's')continue;
  545. if (str.GetAt(str.ReverseFind('\\') + 1) == 'm')continue;
  546. str.MakeLower();
  547. m_patharray1.Add(str);
  548. }
  549. }
  550. if (m_bRunning)return;
  551. CStringArray *pArray = &m_patharray1;
  552. m_vFileName.clear();
  553. for (int i = 0; i < pArray->GetSize(); i++)
  554. {
  555. CString filePath = pArray->ElementAt(i);
  556. filePath.MakeLower();
  557. m_vFileName.push_back(filePath);
  558. }
  559. LoadThumbImages();
  560. #endif
  561. }
  562. void ShowPic3::OnBTNshow1()
  563. {
  564. ShowPhoto1();
  565. }
  566. void ShowPic3::OnBTNshow2()
  567. {
  568. ShowPhoto2();
  569. }
  570. void ShowPic3::OnBTNshow3()
  571. {
  572. ShowPhoto3();
  573. }
  574. void ShowPic3::OnBTNshow4()
  575. {
  576. ShowPhoto4();
  577. }
  578. void ShowPic3::OnBUTdelall() // 全部删除;
  579. {
  580. if (m_strOrderNumber == _T(""))
  581. {
  582. AfxMessageBox("请先选中您要删除的客人!", MB_ICONINFORMATION); return;
  583. }
  584. if (AfxMessageBox("删除后将无法恢复, 确认删除吗?", MB_YESNO | MB_ICONSTOP) != IDYES)return;
  585. WriteLog(_T("客照删除"), _T(" 客照管理中心:") + m_strOrderNumber + _T(":全部相片被删除"));
  586. #ifdef USE_KERNEL_DLL
  587. CStringArray AryOrderpath;
  588. GetOrderpathByOrderNum(OImgtype, g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname), m_strOrderNumber, AryOrderpath);
  589. GetOrderpathByOrderNum(EImgtype, g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname), m_strOrderNumber, AryOrderpath);
  590. GetOrderpathByOrderNum(FImgtype, g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname), m_strOrderNumber, AryOrderpath);
  591. GetOrderpathByOrderNum(DImgtype, g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname), m_strOrderNumber, AryOrderpath);
  592. for ( int i = 0; i < AryOrderpath.GetSize(); i++ )
  593. {
  594. DeleteDirectory(AryOrderpath.ElementAt(i));
  595. }
  596. OnBTNshow1();
  597. #else
  598. DeleteDirectory(g_path1 + "\\" + m_strOrderNumber + "\\"); // 递归删除订单原片;
  599. DeleteDirectory(g_path2 + "\\" + m_strOrderNumber + "\\"); // 递归删除订单初修;
  600. DeleteDirectory(g_path3 + "\\" + m_strOrderNumber + "\\"); // 递归删除订单精修;
  601. DeleteDirectory(g_path4 + "\\" + m_strOrderNumber + "\\"); // 递归删除订单设计;
  602. OnBTNshow1();
  603. #endif
  604. }
  605. void ShowPic3::OnBUTdel1() // 原片删除按钮;
  606. {
  607. if (m_strOrderNumber == "")
  608. {
  609. AfxMessageBox("请先选中您要删除的客人!", MB_ICONINFORMATION); return;
  610. }
  611. if (AfxMessageBox("删除后将无法恢复, 确认删除吗?", MB_YESNO | MB_ICONSTOP) != IDYES)return;
  612. WriteLog(_T("原片删除"), _T(" 客照管理中心:") + m_strOrderNumber + _T(":原片被删除"));
  613. #ifdef USE_KERNEL_DLL
  614. CStringArray AryOrderpath;
  615. GetOrderpathByOrderNum(OImgtype, g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname), m_strOrderNumber, AryOrderpath);
  616. for ( int i = 0; i < AryOrderpath.GetSize(); i++ )
  617. {
  618. DeleteDirectory(AryOrderpath.ElementAt(i));
  619. }
  620. #else
  621. DeleteDirectory(g_path1 + "\\" + m_strOrderNumber + "\\"); // 递归删除订单原片;
  622. #endif
  623. OnBTNshow1();
  624. }
  625. void ShowPic3::OnBUTdel2() // 初修删除按钮;
  626. {
  627. if (m_strOrderNumber == "")
  628. {
  629. AfxMessageBox("请先选中您要删除的客人!", MB_ICONINFORMATION); return;
  630. }
  631. if (AfxMessageBox("删除后将无法恢复, 确认删除吗?", MB_YESNO | MB_ICONSTOP) != IDYES)return;
  632. WriteLog(_T("初修删除"), _T(" 客照管理中心:") + m_strOrderNumber + _T(":初修片被删除"));
  633. #ifdef USE_KERNEL_DLL
  634. CStringArray AryOrderpath;
  635. GetOrderpathByOrderNum(EImgtype, g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname), m_strOrderNumber, AryOrderpath);
  636. for ( int i = 0; i < AryOrderpath.GetSize(); i++ )
  637. {
  638. DeleteDirectory(AryOrderpath.ElementAt(i));
  639. }
  640. #else
  641. DeleteDirectory(g_path2 + "\\" + m_strOrderNumber + "\\"); // 递归删除订单初修;
  642. #endif
  643. OnBTNshow2();
  644. }
  645. void ShowPic3::OnBUTdel3() // 精修删除按钮;
  646. {
  647. if (m_strOrderNumber == "")
  648. {
  649. AfxMessageBox("请先选中您要删除的客人!", MB_ICONINFORMATION); return;
  650. }
  651. if (AfxMessageBox("删除后将无法恢复, 确认删除吗?", MB_YESNO | MB_ICONSTOP) != IDYES)return;
  652. WriteLog(_T("精修删除"), _T(" 客照管理中心:") + m_strOrderNumber + _T(":精修片被删除"));
  653. #ifdef USE_KERNEL_DLL
  654. CStringArray AryOrderpath;
  655. GetOrderpathByOrderNum(FImgtype, g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname), m_strOrderNumber, AryOrderpath);
  656. for ( int i = 0; i < AryOrderpath.GetSize(); i++ )
  657. {
  658. DeleteDirectory(AryOrderpath.ElementAt(i));
  659. }
  660. #else
  661. DeleteDirectory(g_path4 + "\\" + m_strOrderNumber + "\\"); // 递归删除订单精修;
  662. #endif
  663. OnBTNshow3();
  664. }
  665. void ShowPic3::OnBUTdel4() // 设计片删除按钮;
  666. {
  667. if (m_strOrderNumber == "")
  668. {
  669. AfxMessageBox("请先选中您要删除的客人!", MB_ICONINFORMATION); return;
  670. }
  671. if (AfxMessageBox("删除后将无法恢复, 确认删除吗?", MB_YESNO | MB_ICONSTOP) != IDYES)return;
  672. WriteLog(_T("设计片删除"), _T(" 客照管理中心:") + m_strOrderNumber + _T(":设计片被删除"));
  673. #ifdef USE_KERNEL_DLL
  674. CStringArray AryOrderpath;
  675. GetOrderpathByOrderNum(DImgtype, g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname), m_strOrderNumber, AryOrderpath);
  676. for ( int i = 0; i < AryOrderpath.GetSize(); i++ )
  677. {
  678. DeleteDirectory(AryOrderpath.ElementAt(i));
  679. }
  680. #else
  681. DeleteDirectory(g_path3 + "\\" + m_strOrderNumber + "\\"); // 递归删除订单设计;
  682. #endif
  683. OnBTNshow4();
  684. }
  685. void ShowPic3::OnCbnSelchangeCombo1()
  686. {
  687. static int nIndex = 0;
  688. if (nIndex)
  689. m_List2.SetSel(nIndex, FALSE);
  690. int i = 0;
  691. int nSelCount = m_List2.GetSelCount();
  692. for (i = 0; i < nSelCount; i++)//去除还处于选择状态的项;
  693. {
  694. int nSelItem;
  695. m_List2.GetSelItems(nSelCount, &nSelItem);
  696. m_List2.SetSel(nSelItem, FALSE);
  697. }
  698. int nPos = m_combobox.GetCurSel();
  699. CString strName;
  700. //m_combobox.GetWindowText(strName);
  701. m_combobox.GetLBText(nPos, strName);
  702. // printf("Jeff:****当前查找内容=%s\n\n",strName);
  703. int nSize = m_strArrayName.GetSize();
  704. for (i = 0; i < nSize; i++)
  705. {
  706. CString str = m_strArrayName.ElementAt(i);
  707. if (str.Find(strName) != -1)
  708. {
  709. // printf("Jeff:****当前查找内容=%s\n\n",str);
  710. //nIndex = m_List2.SelectString(-1,str);
  711. nIndex = i;
  712. if (nIndex == LB_ERR)
  713. {
  714. break;
  715. }
  716. m_List2.SetSel(nIndex, TRUE);
  717. PostMessage(OWNER_MSG_SHOWPHOTO, nIndex);
  718. break;
  719. }
  720. }
  721. }
  722. void ShowPic3::OnBnClickedNextone()
  723. {
  724. static int nIndex = 0;
  725. static CString strOld = "";
  726. m_List2.SetSel(nIndex - 1, FALSE);
  727. int i = 0;
  728. int nSelCount = m_List2.GetSelCount();
  729. for (i = 0; i < nSelCount; i++)//去除还处于选择状态的项;
  730. {
  731. int nSelItem;
  732. m_List2.GetSelItems(nSelCount, &nSelItem);
  733. m_List2.SetSel(nSelItem, FALSE);
  734. }
  735. CString strFind = "";
  736. m_combobox.GetWindowText(strFind);
  737. if ( strFind.IsEmpty() )
  738. {
  739. return;
  740. }
  741. if (strOld != strFind)
  742. {
  743. strOld = strFind;
  744. nIndex = 0;
  745. }
  746. // printf("Jeff:当前查找内容=%s\n\n",strFind);
  747. CString str;
  748. BOOL bFind = FALSE;
  749. int nSize = m_strArrayName.GetSize();
  750. for (i = nIndex; i < nSize; i++)
  751. {
  752. str = m_strArrayName.ElementAt(i);
  753. // printf("Jeff:匹配内容=%s\n\n",str);
  754. if (str.Find(strFind) != -1)
  755. {
  756. nIndex = i;
  757. // printf("Jeff:nIndex=%d,找到内容=%s\n\n",i,str);
  758. bFind = TRUE;
  759. break;
  760. }
  761. }
  762. if (bFind == FALSE)
  763. {
  764. nIndex = 0;
  765. AfxMessageBox("未找到查找匹配的内容,将再次从头开始查找");
  766. }
  767. else
  768. {
  769. m_List2.SetSel(nIndex++, TRUE);
  770. PostMessage(OWNER_MSG_SHOWPHOTO, -1);
  771. }
  772. }
  773. #ifdef VC60
  774. void ShowPic3::ShowPhoto2Found(WPARAM wParam, LPARAM lParam)
  775. {
  776. UpdateData();
  777. int nPos = m_List2.GetCurSel();
  778. if (wParam != -1)
  779. nPos = wParam;
  780. if (nPos == -1) return;
  781. CString str;
  782. m_List2.GetText(nPos, str);
  783. nPos = str.Find("\r\n");
  784. if (nPos == -1)return;;
  785. m_strOrderNumber = str.Left(nPos);
  786. // printf("Jeff:欲显示的订单号=%s\n\n",m_strOrderNumber);
  787. ShowPhoto1();
  788. if (m_patharray1.GetSize() == 0)OnBTNshow2();
  789. if (m_patharray1.GetSize() == 0)OnBTNshow3();
  790. if (m_patharray1.GetSize() == 0)OnBTNshow4();
  791. }
  792. #else
  793. LRESULT ShowPic3::ShowPhoto2Found(WPARAM wParam, LPARAM lParam)
  794. {
  795. UpdateData();
  796. int nPos = m_List2.GetCurSel();
  797. if (wParam != -1)
  798. nPos = wParam;
  799. if (nPos == -1) return 0;
  800. CString str;
  801. m_List2.GetText(nPos, str);
  802. nPos = str.Find("\r\n");
  803. if (nPos == -1)return 0;
  804. m_strOrderNumber = str.Left(nPos);
  805. // printf("Jeff:欲显示的订单号=%s\n\n",m_strOrderNumber);
  806. ShowPhoto1();
  807. if (m_patharray1.GetSize() == 0)OnBTNshow2();
  808. if (m_patharray1.GetSize() == 0)OnBTNshow3();
  809. if (m_patharray1.GetSize() == 0)OnBTNshow4();
  810. return 0;
  811. }
  812. #endif
  813. #ifdef USE_KERNEL_DLL
  814. void ShowPic3::ShowOrderImg(IN CONST INT& nImgType)
  815. {
  816. CString str = _T("");
  817. DWORD dwMemSize = 0;
  818. m_patharray1.RemoveAll();
  819. //m_vFileName.clear();
  820. m_vFileName.RemoveAll();
  821. CString strBranchId = g_branchname.IsEmpty() ? g_domain : GetDomainFromBranch(g_branchname);
  822. ImgLoadOrderpathInterface *pOrderLoader = NULL;
  823. if ( g_pIMGProcess == NULL )
  824. return ;
  825. g_pIMGProcess->QueryInterface(IID_ImgLoadOrderpathInterface,(void**)&pOrderLoader);
  826. if ( pOrderLoader )
  827. {
  828. pOrderLoader->Release();
  829. HGLOBAL hMemery = pOrderLoader->LoadOrderImages( nImgType, strBranchId, m_strOrderNumber, _T("*.jpg|*.jpeg"), dwMemSize);
  830. if ( hMemery )
  831. {
  832. BYTE *pData = (BYTE*)GlobalLock(hMemery);
  833. if ( pData == NULL )
  834. {
  835. GlobalUnlock(hMemery);
  836. GlobalFree(hMemery);
  837. return ;
  838. }
  839. CMemFile mf;
  840. mf.Attach(pData, dwMemSize);
  841. CArchive ar(&mf, CArchive::load);
  842. CStringArray Arypath;
  843. Arypath.Serialize(ar);
  844. ar.Close();
  845. mf.Detach();
  846. GlobalUnlock(hMemery);
  847. GlobalFree(hMemery);
  848. INT i = 0;
  849. INT nCount = Arypath.GetSize();
  850. for ( i = 0; i < nCount; i++ )
  851. {
  852. str = Arypath.ElementAt(i);
  853. if (str.Mid(str.ReverseFind(_T('\\')) + 1) == _T("ok")) continue;
  854. if (str.Mid(str.ReverseFind(_T('\\')) + 1) == _T("modifytime")) continue;
  855. if (str.GetAt(str.ReverseFind('\\') + 1) == 's')continue;
  856. if (str.GetAt(str.ReverseFind('\\') + 1) == 'm')continue;
  857. if (str.ReverseFind(_T('.')) == -1 ) continue;
  858. str.MakeLower();
  859. m_patharray1.Add(str);
  860. }
  861. Arypath.RemoveAll();
  862. if ( m_bRunning )
  863. {
  864. return;
  865. }
  866. CStringArray *pArray = &m_patharray1;
  867. nCount = pArray->GetSize();
  868. for ( i = 0; i < nCount; i++)
  869. {
  870. CString filePath = pArray->ElementAt(i);
  871. filePath.MakeLower();
  872. m_vFileName.Add(filePath);
  873. }
  874. }
  875. }
  876. // LoadThumbImages存在CString内存泄漏;
  877. if (m_vFileName.GetSize())
  878. {
  879. LoadThumbImages();
  880. }
  881. else
  882. {
  883. for (int i = 0; i < m_ImageListThumb.GetImageCount(); i++)
  884. m_ImageListThumb.Remove(i);
  885. m_List1.DeleteAllItems();
  886. m_List1.Invalidate();
  887. }
  888. }
  889. #endif
  890. void ShowPic3::OnOK()
  891. {
  892. // TODO: 在此添加专用代码和/或调用基类
  893. OnBnClickedNextone();
  894. }