ShowSelPhoto.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714
  1. // ShowSelPhoto.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ylgl.h"
  5. #include "ShowSelPhoto.h"
  6. #include "ShowPic22.h"
  7. #include "JPEG.h"
  8. #define THUMBNAIL_WIDTH 100
  9. #define THUMBNAIL_HEIGHT 90
  10. /////////////////////////////////////////////////////////////////////////////
  11. // ShowSelPhoto dialog IDC_BU Tdelall
  12. ShowSelPhoto::ShowSelPhoto(CWnd* pParent /*=NULL*/)
  13. : CDialog(ShowSelPhoto::IDD, pParent)
  14. {
  15. //{{AFX_DATA_INIT(ShowSelPhoto)
  16. // NOTE: the ClassWizard will add member initialization here
  17. //}}AFX_DATA_INIT
  18. m_bTerminate=false;
  19. m_bRunning=false;
  20. m_hThread = NULL;
  21. m_bTerminate2=false;
  22. m_bRunning2=false;
  23. m_hThread2 = NULL;
  24. }
  25. void ShowSelPhoto::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. //{{AFX_DATA_MAP(ShowSelPhoto)
  29. DDX_Control(pDX, IDC_STATIC1, m_sta1);
  30. DDX_Control(pDX, IDC_LIST4, m_List4);
  31. DDX_Control(pDX, IDC_LIST1, m_List1);
  32. DDX_Control(pDX, IDC_LIST3, m_List3);
  33. DDX_Control(pDX, IDC_LIST2, m_List2);
  34. //}}AFX_DATA_MAP
  35. }
  36. BEGIN_MESSAGE_MAP(ShowSelPhoto, CDialog)
  37. //{{AFX_MSG_MAP(ShowSelPhoto)
  38. ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
  39. ON_WM_DESTROY()
  40. ON_NOTIFY(NM_DBLCLK, IDC_LIST4, OnDblclkList4)
  41. //}}AFX_MSG_MAP
  42. END_MESSAGE_MAP()
  43. /////////////////////////////////////////////////////////////////////////////
  44. // ShowSelPhoto message handlers
  45. BOOL ShowSelPhoto::OnInitDialog()
  46. {
  47. CDialog::OnInitDialog();
  48. CRect rc;
  49. rc=m_rc;
  50. rc.right -=m_rc.Width ()*0.5;
  51. MoveWindow(rc);
  52. int hei=rc.Height ();
  53. m_sta1.GetWindowRect (rc);
  54. int hei2=rc.Height ();
  55. GetClientRect(rc);
  56. rc.bottom -=hei/2;
  57. m_List1.MoveWindow (rc);
  58. rc.top =rc.bottom+5;
  59. rc.bottom =rc.top +hei2;
  60. m_sta1.MoveWindow (rc);
  61. rc.top =rc.bottom ;
  62. rc.bottom =hei;
  63. m_List4.MoveWindow (rc);
  64. m_ImageListThumb.Create(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, ILC_COLOR24, 0, 1);
  65. m_List1.SetImageList(&m_ImageListThumb, LVSIL_NORMAL);
  66. m_ImageListThumb2.Create(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, ILC_COLOR24, 0, 1);
  67. m_List4.SetImageList(&m_ImageListThumb2, LVSIL_NORMAL);
  68. m_List2.InitStyle();
  69. m_List2.InsertColumn(0,_T("autuid"),LVCFMT_LEFT,0);
  70. m_List2.InsertColumn(1,_T("编号"),LVCFMT_LEFT,45);
  71. m_List2.InsertColumn(2,_T("商品名称"),LVCFMT_LEFT,150);
  72. m_List2.InsertColumn(3,_T("数量"),LVCFMT_LEFT,45);
  73. m_List2.InsertColumn(4,_T("照片编号"),LVCFMT_LEFT,410);
  74. m_List3.InitStyle();
  75. m_List3.InsertColumn(0,_T("autuid"),LVCFMT_LEFT,0);
  76. m_List3.InsertColumn(1,_T("编号"),LVCFMT_LEFT,45);
  77. m_List3.InsertColumn(2,_T("商品名称"),LVCFMT_LEFT,150);
  78. m_List3.InsertColumn(3,_T("价格"),LVCFMT_LEFT,45);
  79. m_List3.InsertColumn(4,_T("数量"),LVCFMT_LEFT,45);
  80. m_List3.InsertColumn(5,_T("照片编号"),LVCFMT_LEFT,365);
  81. #ifdef CHILD_VERSION
  82. CString filter="id='"+m_id+"'";
  83. #else
  84. CString filter="id='"+m_id+"' and kind<>'2'";
  85. #endif
  86. g_sendhead.code[0]=50;
  87. g_sendhead.tabcount=1;
  88. g_sendhead.bsql=0;
  89. g_pMainWnd->ProcessChatMessageRequest2(filter);if(g_bSendOK==0)return 1;
  90. CArray<CStringArray, CStringArray>sparray;
  91. DataToArray(&sparray);
  92. m_patharray1.RemoveAll ();
  93. CString str,kind;
  94. int list2pos=0;
  95. int list3pos=0;
  96. m_path=g_path1+"\\";
  97. m_path+=m_id;
  98. m_path +="\\";
  99. for(int i=0; i<sparray.GetSize (); i++)
  100. {
  101. kind=sparray.ElementAt (i).ElementAt (4);
  102. if(kind=="4")
  103. {
  104. m_List3.InsertItem(list3pos, sparray.ElementAt (i).ElementAt (7));
  105. m_List3.SetItemText(list3pos, 1, sparray.ElementAt (i).ElementAt (1));
  106. m_List3.SetItemText(list3pos, 2, sparray.ElementAt (i).ElementAt (5));
  107. m_List3.SetItemText(list3pos, 3, sparray.ElementAt (i).ElementAt (2));
  108. m_List3.SetItemText(list3pos, 4, sparray.ElementAt (i).ElementAt (3));
  109. m_List3.SetItemText(list3pos, 5, sparray.ElementAt (i).ElementAt (6));
  110. list3pos++;
  111. }
  112. else
  113. {
  114. m_List2.InsertItem(list2pos, sparray.ElementAt (i).ElementAt (7));
  115. m_List2.SetItemText(list2pos, 1, sparray.ElementAt (i).ElementAt (1));
  116. m_List2.SetItemText(list2pos, 2, sparray.ElementAt (i).ElementAt (5));
  117. m_List2.SetItemText(list2pos, 3, sparray.ElementAt (i).ElementAt (3));
  118. m_List2.SetItemText(list2pos, 4, sparray.ElementAt (i).ElementAt (6));
  119. list2pos++;
  120. }
  121. str=sparray.ElementAt (i).ElementAt (6);
  122. str.MakeLower ();
  123. GetPath(str);
  124. if(!str.IsEmpty ())
  125. str=","+str+",";
  126. if(kind=="4")
  127. m_no2array.Add (str);
  128. else
  129. m_noarray.Add (str);
  130. }
  131. LoadPhotos();
  132. return TRUE; // return TRUE unless you set the focus to a control
  133. // EXCEPTION: OCX Property Pages should return FALSE
  134. }
  135. unsigned __stdcall LoadThumbNail8(LPVOID lpParam)
  136. {
  137. ShowSelPhoto *pDlg=(ShowSelPhoto*)lpParam;
  138. CListCtrl *ListCtrl=&pDlg->m_List1;
  139. try
  140. {
  141. CImageList* pImgList=&pDlg->m_ImageListThumb;
  142. // reset our image list
  143. for(int i=0; i<pImgList->GetImageCount(); i++)
  144. pImgList->Remove(i);
  145. // remove all items from list view
  146. ListCtrl->DeleteAllItems();
  147. pImgList->SetImageCount(pDlg->m_vFileName.size());
  148. // TCHAR path[MAX_PATH];
  149. vector<CString>::iterator iter;
  150. // Set redraw to FALSE to avoid flickering during adding new items
  151. ListCtrl->SetRedraw(FALSE);
  152. int nIndex=0;
  153. CString str,spath;
  154. for(iter=pDlg->m_vFileName.begin(); iter!=pDlg->m_vFileName.end() && pDlg->m_bTerminate!=true; iter++, nIndex++)
  155. {
  156. str=*iter;
  157. str=str.Right (str.GetLength ()-str.ReverseFind ('\\')-1);
  158. str=str.Left (str.Find ('.'));
  159. str+=pDlg->GetSelName(str);
  160. ListCtrl->InsertItem(nIndex, str, nIndex);
  161. }
  162. ListCtrl->SetRedraw(TRUE);
  163. ListCtrl->Invalidate();
  164. const float fRatio=(float)THUMBNAIL_HEIGHT/THUMBNAIL_WIDTH;
  165. int XDest, YDest, nDestWidth, nDestHeight;
  166. nIndex=0;
  167. SolidBrush whitebrush(Color(255,255,255,255));
  168. Bitmap *pNULLBmp=new Bitmap(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, PixelFormat24bppRGB );
  169. Graphics graph2(pNULLBmp);
  170. graph2.Clear(Color(255,0,0,0));
  171. for(iter=pDlg->m_vFileName.begin(); iter!=pDlg->m_vFileName.end() && pDlg->m_bTerminate!=true; iter++, nIndex++)
  172. {
  173. // Load Image File
  174. Image *image=NULL;
  175. Bitmap *pBmp=NULL;
  176. str=*iter;
  177. spath=str.Left (str.ReverseFind ('\\')+1);
  178. spath+="s";
  179. spath+=str.Right (str.GetLength ()-str.ReverseFind ('\\')-1);
  180. BOOL bNullimg=0;
  181. if(::CheckFileExist (spath))
  182. ::LoadImageFromBuf (&image, spath);
  183. else if(::CheckFileExist (str))
  184. ::LoadImageFromBuf (&image, str);
  185. else
  186. {
  187. bNullimg=1;
  188. image=pNULLBmp;
  189. }
  190. if(image==NULL)continue;
  191. if(image->GetWidth()==0)
  192. continue;
  193. int orientation=GetOrientation(image);
  194. if(orientation==8)
  195. image->RotateFlip( Rotate270FlipNone );
  196. else if(orientation==6)
  197. image->RotateFlip( Rotate90FlipNone );
  198. // Calculate Rect to fit to canvas
  199. const float fImgRatio=(float)image->GetHeight()/image->GetWidth();
  200. if(fImgRatio > fRatio)
  201. {
  202. nDestWidth=THUMBNAIL_HEIGHT/fImgRatio;
  203. XDest=(THUMBNAIL_WIDTH-nDestWidth)/2;
  204. YDest=0;
  205. nDestHeight=THUMBNAIL_HEIGHT;
  206. }
  207. else
  208. {
  209. XDest=0;
  210. nDestWidth=THUMBNAIL_WIDTH;
  211. nDestHeight=THUMBNAIL_WIDTH*fImgRatio;
  212. YDest=(THUMBNAIL_HEIGHT-nDestHeight)/2;
  213. }
  214. pBmp=new Bitmap(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, PixelFormat24bppRGB );
  215. Graphics graph2(pBmp);
  216. graph2.Clear(Color(255,192,192,192));
  217. graph2.FillRectangle (&whitebrush,1, 1, THUMBNAIL_WIDTH-2, THUMBNAIL_HEIGHT-2);
  218. Graphics graph(pBmp);
  219. Rect desRect(XDest, YDest, nDestWidth, nDestHeight);
  220. // Draw Image
  221. graph.DrawImage(image, desRect, 0,0,image->GetWidth(),image->GetHeight(),UnitPixel);
  222. if( bNullimg==0)
  223. delete image;
  224. // Attach to Bitmap and Replace image in CImageList
  225. CBitmap bitmap;
  226. HBITMAP hbmp;
  227. pBmp->GetHBITMAP(Color(255,255,255,255), &hbmp);
  228. bitmap.Attach(hbmp);
  229. pImgList->Replace(nIndex, &bitmap, NULL);
  230. delete pBmp;
  231. // Redraw only a current item for removing flickering and fast speed.
  232. ListCtrl->RedrawItems(nIndex, nIndex);
  233. // Release used DC and Object
  234. }
  235. delete pNULLBmp;
  236. ListCtrl->Invalidate();
  237. pDlg->m_bRunning=false;
  238. pDlg->m_bTerminate=false;
  239. pDlg->PostMessage(WM_USER+200, 0, 0);
  240. _endthreadex( 0 );
  241. return 0;
  242. }
  243. catch(...)
  244. {
  245. ListCtrl->Invalidate();
  246. pDlg->m_bRunning=false;
  247. pDlg->m_bTerminate=false;
  248. pDlg->PostMessage(WM_USER+200, 0, 0);
  249. _endthreadex( 0 );
  250. }
  251. }
  252. unsigned __stdcall LoadThumbNail9(LPVOID lpParam)
  253. {
  254. ShowSelPhoto *pDlg=(ShowSelPhoto*)lpParam;
  255. CImageList* pImgList=&pDlg->m_ImageListThumb2;
  256. CListCtrl *ListCtrl=&pDlg->m_List4;
  257. try
  258. {
  259. // reset our image list
  260. for(int i=0; i<pImgList->GetImageCount(); i++)
  261. pImgList->Remove(i);
  262. // remove all items from list view
  263. ListCtrl->DeleteAllItems();
  264. pImgList->SetImageCount(pDlg->m_vFileName2.size());
  265. TCHAR path[MAX_PATH];
  266. vector<CString>::iterator iter;
  267. // Set redraw to FALSE to avoid flickering during adding new items
  268. ListCtrl->SetRedraw(FALSE);
  269. int nIndex=0;
  270. CString str, spath;
  271. for(iter=pDlg->m_vFileName2.begin(); iter!=pDlg->m_vFileName2.end() && pDlg->m_bTerminate2!=true; iter++, nIndex++)
  272. {
  273. str=*iter;
  274. spath.Empty ();
  275. if(str.Left (str.ReverseFind ('\\')+1)!=pDlg->m_path)
  276. {
  277. spath=str.Left (str.ReverseFind ('\\')+1);
  278. spath= spath.Right (spath.GetLength ()-pDlg->m_path.GetLength ());
  279. }
  280. str=str.Right (str.GetLength ()-str.ReverseFind ('\\')-1);
  281. str=spath+str.Left (str.GetLength ()-4);
  282. ListCtrl->InsertItem(nIndex, str, nIndex);
  283. }
  284. ListCtrl->SetRedraw(TRUE);
  285. ListCtrl->Invalidate();
  286. const float fRatio=(float)THUMBNAIL_HEIGHT/THUMBNAIL_WIDTH;
  287. int XDest, YDest, nDestWidth, nDestHeight;
  288. nIndex=0;
  289. SolidBrush whitebrush(Color(255,255,255,255));
  290. for(iter=pDlg->m_vFileName2.begin(); iter!=pDlg->m_vFileName2.end() && pDlg->m_bTerminate2!=true; iter++, nIndex++)
  291. {
  292. // Load Image File
  293. Image *image=NULL;
  294. Bitmap *pBmp=NULL;
  295. str=*iter;
  296. spath=str.Left (str.ReverseFind ('\\')+1);
  297. spath+="s";
  298. spath+=str.Right (str.GetLength ()-str.ReverseFind ('\\')-1);
  299. if(::CheckFileExist (spath))
  300. ::LoadImageFromBuf (&image, spath);
  301. else
  302. ::LoadImageFromBuf (&image, str);
  303. int orientation=GetOrientation(image);
  304. if(orientation==8)
  305. image->RotateFlip( Rotate270FlipNone );
  306. else if(orientation==6)
  307. image->RotateFlip( Rotate90FlipNone );
  308. if(image->GetWidth()==0)
  309. continue;
  310. // Calculate Rect to fit to canvas
  311. const float fImgRatio=(float)image->GetHeight()/image->GetWidth();
  312. if(fImgRatio > fRatio)
  313. {
  314. nDestWidth=THUMBNAIL_HEIGHT/fImgRatio;
  315. XDest=(THUMBNAIL_WIDTH-nDestWidth)/2;
  316. YDest=0;
  317. nDestHeight=THUMBNAIL_HEIGHT;
  318. }
  319. else
  320. {
  321. XDest=0;
  322. nDestWidth=THUMBNAIL_WIDTH;
  323. nDestHeight=THUMBNAIL_WIDTH*fImgRatio;
  324. YDest=(THUMBNAIL_HEIGHT-nDestHeight)/2;
  325. }
  326. pBmp=new Bitmap(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, PixelFormat24bppRGB );
  327. Graphics graph2(pBmp);
  328. graph2.Clear(Color(255,192,192,192));
  329. graph2.FillRectangle (&whitebrush,1, 1, THUMBNAIL_WIDTH-2, THUMBNAIL_HEIGHT-2);
  330. Graphics graph(pBmp);
  331. Rect desRect(XDest, YDest, nDestWidth, nDestHeight);
  332. // Draw Image
  333. graph.DrawImage(image, desRect, 0,0,image->GetWidth(),image->GetHeight(),UnitPixel);
  334. delete image;
  335. // Attach to Bitmap and Replace image in CImageList
  336. CBitmap bitmap;
  337. HBITMAP hbmp;
  338. pBmp->GetHBITMAP(Color(255,255,255,255), &hbmp);
  339. bitmap.Attach(hbmp);
  340. pImgList->Replace(nIndex, &bitmap, NULL);
  341. delete pBmp;
  342. // Redraw only a current item for removing flickering and fast speed.
  343. ListCtrl->RedrawItems(nIndex, nIndex);
  344. // Release used DC and Object
  345. }
  346. ListCtrl->Invalidate();
  347. pDlg->m_bRunning2=false;
  348. pDlg->m_bTerminate2=false;
  349. _endthreadex( 0 );
  350. return 0;
  351. }
  352. catch(...)
  353. {
  354. ListCtrl->Invalidate();
  355. pDlg->m_bRunning2=false;
  356. pDlg->m_bTerminate2=false;
  357. _endthreadex( 0 );
  358. }
  359. }
  360. void ShowSelPhoto::LoadThumbImages()
  361. {
  362. TerminateThread();
  363. m_hThread = (HANDLE)_beginthreadex(NULL,0, LoadThumbNail8,(LPVOID)this,0/* CREATE_SUSPENDED*/,&m_dwThreadID);
  364. m_bRunning=true;
  365. }
  366. BOOL ShowSelPhoto::TerminateThread()
  367. {
  368. if ( !m_bRunning )
  369. return TRUE;
  370. m_bTerminate=true;
  371. for( ; ; )
  372. {
  373. if ( ::WaitForSingleObject(m_hThread, 0) == WAIT_OBJECT_0 )
  374. break;
  375. MSG msg;
  376. while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
  377. {
  378. if (!AfxGetApp()->PumpMessage())
  379. break;
  380. }
  381. }
  382. ::CloseHandle(m_hThread);
  383. return TRUE;
  384. }
  385. void ShowSelPhoto::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
  386. {
  387. // TODO: Add your control notification handler code here
  388. POSITION pos;
  389. pos=m_List1.GetFirstSelectedItemPosition();
  390. if(pos==NULL)
  391. {
  392. return;
  393. }
  394. int iItem=m_List1.GetNextSelectedItem(pos);
  395. ShowPic22 dlg;
  396. dlg.m_pos=iItem;
  397. dlg.m_pPathArray=&m_patharray1;
  398. dlg.DoModal ();
  399. *pResult = 0;
  400. }
  401. void ShowSelPhoto::OnDestroy()
  402. {
  403. TerminateThread();TerminateThread2();
  404. CDialog::OnDestroy();
  405. // TODO: Add your message handler code here
  406. }
  407. void ShowSelPhoto::LoadPhotos()
  408. {
  409. if(m_bRunning)return;
  410. CStringArray *pArray=&m_patharray1;
  411. m_vFileName.clear();
  412. int i = 0;
  413. for( i=0; i<pArray->GetSize (); i++)
  414. {
  415. CString filePath=pArray->ElementAt (i);
  416. filePath.MakeLower();
  417. m_vFileName.push_back(filePath);
  418. }
  419. LoadThumbImages();
  420. /////////////
  421. m_patharray2.RemoveAll ();
  422. m_path.MakeLower ();
  423. CStringArray dirarray;
  424. CString str;
  425. if(1)
  426. {
  427. using namespace helper_coffs;
  428. ffsco o;
  429. o.dirs(1);
  430. o.find(LPCSTR(m_path), LPCSTR("*.*"));
  431. ffsco::typeT coo;
  432. ffsco::typeT::iterator it;
  433. coo = o.co_dir();
  434. for (it = coo.begin();coo.end() != it;it ++)
  435. {
  436. str=(*it).c_str();
  437. if(FindArray(&dirarray, str)==-1)
  438. {
  439. dirarray.Add (str);
  440. }
  441. }
  442. }
  443. if(1)
  444. {
  445. for( i=0; i<dirarray.GetSize (); i++)
  446. {
  447. using namespace helper_coffs;
  448. ffsco o;
  449. o.dirs(0);
  450. o.find(LPCSTR(dirarray.ElementAt (i)), LPCSTR("*.jpg"));
  451. ffsco::typeT coo;
  452. ffsco::typeT::iterator it;
  453. coo = o.co_file();
  454. for (it = coo.begin();coo.end() != it;it ++)
  455. {
  456. str=(*it).c_str();
  457. if(str.GetAt (str.ReverseFind ('\\')+1)=='s')continue;
  458. if(str.GetAt (str.ReverseFind ('\\')+1)=='m')continue;
  459. str.MakeLower ();
  460. m_patharray2.Add (str);
  461. }
  462. }
  463. }
  464. if(m_bRunning2)return;
  465. pArray=&m_patharray2;
  466. m_vFileName2.clear();
  467. for( i=0; i<pArray->GetSize (); i++)
  468. {
  469. CString filePath=pArray->ElementAt (i);
  470. filePath.MakeLower();
  471. m_vFileName2.push_back(filePath);
  472. }
  473. TerminateThread2();
  474. m_hThread2 = (HANDLE)_beginthreadex(NULL,0, LoadThumbNail9,(LPVOID)this,0/* CREATE_SUSPENDED*/,&m_dwThreadID2);
  475. m_bRunning2=true;
  476. }
  477. extern CString GetPathFromNo(CString dir, CString no, CStringArray *pArray);
  478. void ShowSelPhoto::GetPath(CString str)
  479. {
  480. if(m_DirArrayBuf.GetSize ()==0)
  481. {
  482. CString dir=m_path;
  483. dir.TrimRight('\\');
  484. dir+="\\";
  485. CString temp;
  486. using namespace helper_coffs;
  487. ffsco o;
  488. o.dirs(1);
  489. o.find(LPCSTR(dir), LPCSTR("*.*"));
  490. ffsco::typeT coo;
  491. ffsco::typeT::iterator it;
  492. coo = o.co_dir();
  493. for (it = coo.begin();
  494. coo.end() != it;
  495. it ++)
  496. {
  497. temp=(*it).c_str();
  498. if(::FindArray (&m_DirArrayBuf, temp)==-1 && temp!=dir)
  499. {
  500. m_DirArrayBuf.Add (temp);
  501. }
  502. }
  503. }
  504. str.TrimLeft (",");
  505. str.TrimRight (",");
  506. if(str.IsEmpty ())return;
  507. int pos=str.Find (',');
  508. CString path,path2;
  509. while(pos!=-1)
  510. {
  511. path=GetPathFromNo(m_path, str.Left (pos), &m_DirArrayBuf);//+".jpg";
  512. path2=path;
  513. path2.Replace ("客户原片", "修好的片");
  514. int pos1=path2.Find (m_id);
  515. pos1+=m_id.GetLength ();
  516. int pos2=path2.ReverseFind ('\\');
  517. path2=path2.Left (pos1)+path2.Right (path2.GetLength ()-pos2);
  518. if(::PathFileExists (path2))
  519. path=path2;
  520. if(::FindArray(&m_patharray1, path)==-1)// && ::FindArray(&m_patharray1, &path)!=-1)
  521. {
  522. m_patharray1.Add (path);
  523. }
  524. str=str.Right (str.GetLength ()-pos-1);
  525. pos=str.Find (',');
  526. }
  527. path=GetPathFromNo(m_path, str, &m_DirArrayBuf);//+".jpg";
  528. path2=path;
  529. path2.Replace ("客户原片", "修好的片");
  530. int pos1=path2.Find (m_id);
  531. pos1+=m_id.GetLength ();
  532. int pos2=path2.ReverseFind ('\\');
  533. path2=path2.Left (pos1)+path2.Right (path2.GetLength ()-pos2);
  534. if(::PathFileExists (path2))
  535. path=path2;
  536. if(::FindArray(&m_patharray1, path)==-1)// && ::FindArray(&m_patharray1, &path)!=-1)
  537. m_patharray1.Add (path);
  538. }
  539. CString ShowSelPhoto::GetSelName(CString name)
  540. {
  541. CString ret;
  542. name=","+name+",";
  543. int i = 0;
  544. for( i=0; i<m_List2.GetItemCount (); i++)
  545. {
  546. if(m_noarray.ElementAt (i).Find (name)!=-1)
  547. {
  548. ret+=m_List2.GetItemText (i, 2);
  549. ret+="\r\n";
  550. }
  551. }
  552. for( i=0; i<m_List3.GetItemCount (); i++)
  553. {
  554. if(m_no2array.ElementAt (i).Find (name)!=-1)
  555. {
  556. ret+=m_List3.GetItemText (i, 2);
  557. ret+="\r\n";
  558. }
  559. }
  560. if(!ret.IsEmpty ())
  561. {
  562. ret="\r\n"+ret;
  563. ret.TrimRight ("\r\n");
  564. }
  565. return ret;
  566. }
  567. BOOL ShowSelPhoto::TerminateThread2()
  568. {
  569. if ( !m_bRunning2 )
  570. return TRUE;
  571. m_bTerminate2=true;
  572. for( ; ; )
  573. {
  574. if ( ::WaitForSingleObject(m_hThread2, 0) == WAIT_OBJECT_0 )
  575. break;
  576. MSG msg;
  577. while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
  578. {
  579. if (!AfxGetApp()->PumpMessage())
  580. break;
  581. }
  582. }
  583. ::CloseHandle(m_hThread2);
  584. return TRUE;
  585. }
  586. void ShowSelPhoto::OnDblclkList4(NMHDR* pNMHDR, LRESULT* pResult)
  587. {
  588. // TODO: Add your control notification handler code here
  589. POSITION pos;
  590. pos=m_List4.GetFirstSelectedItemPosition();
  591. if(pos==NULL)
  592. {
  593. return;
  594. }
  595. int iItem=m_List4.GetNextSelectedItem(pos);
  596. ShowPic22 dlg;
  597. dlg.m_pos=iItem;
  598. dlg.m_pPathArray=&m_patharray2;
  599. dlg.DoModal ();
  600. *pResult = 0;
  601. }