ShowSelPhoto.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  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. for(int i=0; i<pArray->GetSize (); i++)
  413. {
  414. CString filePath=pArray->ElementAt (i);
  415. filePath.MakeLower();
  416. m_vFileName.push_back(filePath);
  417. }
  418. LoadThumbImages();
  419. /////////////
  420. m_patharray2.RemoveAll ();
  421. m_path.MakeLower ();
  422. CStringArray dirarray;
  423. CString str;
  424. if(1)
  425. {
  426. using namespace helper_coffs;
  427. ffsco o;
  428. o.dirs(1);
  429. o.find(LPCSTR(m_path), LPCSTR("*.*"));
  430. ffsco::typeT coo;
  431. ffsco::typeT::iterator it;
  432. coo = o.co_dir();
  433. for (it = coo.begin();
  434. coo.end() != it;
  435. it ++)
  436. {
  437. str=(*it).c_str();
  438. if(FindArray(&dirarray, str)==-1)
  439. {
  440. dirarray.Add (str);
  441. }
  442. }
  443. }
  444. if(1)
  445. {
  446. for(int i=0; i<dirarray.GetSize (); i++)
  447. {
  448. using namespace helper_coffs;
  449. ffsco o;
  450. o.dirs(0);
  451. o.find(LPCSTR(dirarray.ElementAt (i)), LPCSTR("*.jpg"));
  452. ffsco::typeT coo;
  453. ffsco::typeT::iterator it;
  454. coo = o.co_file();
  455. for (it = coo.begin();
  456. coo.end() != it;
  457. it ++)
  458. {
  459. str=(*it).c_str();
  460. if(str.GetAt (str.ReverseFind ('\\')+1)=='s')continue;
  461. if(str.GetAt (str.ReverseFind ('\\')+1)=='m')continue;
  462. str.MakeLower ();
  463. m_patharray2.Add (str);
  464. }
  465. }
  466. }
  467. if(m_bRunning2)return;
  468. pArray=&m_patharray2;
  469. m_vFileName2.clear();
  470. for( i=0; i<pArray->GetSize (); i++)
  471. {
  472. CString filePath=pArray->ElementAt (i);
  473. filePath.MakeLower();
  474. m_vFileName2.push_back(filePath);
  475. }
  476. TerminateThread2();
  477. m_hThread2 = (HANDLE)_beginthreadex(NULL,0, LoadThumbNail9,(LPVOID)this,0/* CREATE_SUSPENDED*/,&m_dwThreadID2);
  478. m_bRunning2=true;
  479. }
  480. extern CString GetPathFromNo(CString dir, CString no, CStringArray *pArray);
  481. void ShowSelPhoto::GetPath(CString str)
  482. {
  483. if(m_DirArrayBuf.GetSize ()==0)
  484. {
  485. CString dir=m_path;
  486. dir.TrimRight('\\');
  487. dir+="\\";
  488. CString temp;
  489. using namespace helper_coffs;
  490. ffsco o;
  491. o.dirs(1);
  492. o.find(LPCSTR(dir), LPCSTR("*.*"));
  493. ffsco::typeT coo;
  494. ffsco::typeT::iterator it;
  495. coo = o.co_dir();
  496. for (it = coo.begin();
  497. coo.end() != it;
  498. it ++)
  499. {
  500. temp=(*it).c_str();
  501. if(::FindArray (&m_DirArrayBuf, temp)==-1 && temp!=dir)
  502. {
  503. m_DirArrayBuf.Add (temp);
  504. }
  505. }
  506. }
  507. str.TrimLeft (",");
  508. str.TrimRight (",");
  509. if(str.IsEmpty ())return;
  510. int pos=str.Find (',');
  511. CString path,path2;
  512. while(pos!=-1)
  513. {
  514. path=GetPathFromNo(m_path, str.Left (pos), &m_DirArrayBuf);//+".jpg";
  515. path2=path;
  516. path2.Replace ("客户原片", "修好的片");
  517. int pos1=path2.Find (m_id);
  518. pos1+=m_id.GetLength ();
  519. int pos2=path2.ReverseFind ('\\');
  520. path2=path2.Left (pos1)+path2.Right (path2.GetLength ()-pos2);
  521. if(::PathFileExists (path2))
  522. path=path2;
  523. if(::FindArray(&m_patharray1, path)==-1)// && ::FindArray(&m_patharray1, &path)!=-1)
  524. {
  525. m_patharray1.Add (path);
  526. }
  527. str=str.Right (str.GetLength ()-pos-1);
  528. pos=str.Find (',');
  529. }
  530. path=GetPathFromNo(m_path, str, &m_DirArrayBuf);//+".jpg";
  531. path2=path;
  532. path2.Replace ("客户原片", "修好的片");
  533. int pos1=path2.Find (m_id);
  534. pos1+=m_id.GetLength ();
  535. int pos2=path2.ReverseFind ('\\');
  536. path2=path2.Left (pos1)+path2.Right (path2.GetLength ()-pos2);
  537. if(::PathFileExists (path2))
  538. path=path2;
  539. if(::FindArray(&m_patharray1, path)==-1)// && ::FindArray(&m_patharray1, &path)!=-1)
  540. m_patharray1.Add (path);
  541. }
  542. CString ShowSelPhoto::GetSelName(CString name)
  543. {
  544. CString ret;
  545. name=","+name+",";
  546. for(int i=0; i<m_List2.GetItemCount (); i++)
  547. {
  548. if(m_noarray.ElementAt (i).Find (name)!=-1)
  549. {
  550. ret+=m_List2.GetItemText (i, 2);
  551. ret+="\r\n";
  552. }
  553. }
  554. for( i=0; i<m_List3.GetItemCount (); i++)
  555. {
  556. if(m_no2array.ElementAt (i).Find (name)!=-1)
  557. {
  558. ret+=m_List3.GetItemText (i, 2);
  559. ret+="\r\n";
  560. }
  561. }
  562. if(!ret.IsEmpty ())
  563. {
  564. ret="\r\n"+ret;
  565. ret.TrimRight ("\r\n");
  566. }
  567. return ret;
  568. }
  569. BOOL ShowSelPhoto::TerminateThread2()
  570. {
  571. if ( !m_bRunning2 )
  572. return TRUE;
  573. m_bTerminate2=true;
  574. for( ; ; )
  575. {
  576. if ( ::WaitForSingleObject(m_hThread2, 0) == WAIT_OBJECT_0 )
  577. break;
  578. MSG msg;
  579. while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
  580. {
  581. if (!AfxGetApp()->PumpMessage())
  582. break;
  583. }
  584. }
  585. ::CloseHandle(m_hThread2);
  586. return TRUE;
  587. }
  588. void ShowSelPhoto::OnDblclkList4(NMHDR* pNMHDR, LRESULT* pResult)
  589. {
  590. // TODO: Add your control notification handler code here
  591. POSITION pos;
  592. pos=m_List4.GetFirstSelectedItemPosition();
  593. if(pos==NULL)
  594. {
  595. return;
  596. }
  597. int iItem=m_List4.GetNextSelectedItem(pos);
  598. ShowPic22 dlg;
  599. dlg.m_pos=iItem;
  600. dlg.m_pPathArray=&m_patharray2;
  601. dlg.DoModal ();
  602. *pResult = 0;
  603. }