// ChoosePhotoSkin2.cpp : implementation file // #include "stdafx.h" #include "ChoosePhotoSkin2.h" #include "YLGL.h" #include "./helper/ffsco.h" #include ".\MenuBarXP\MenuXP.h" #include "ChoosePhotoSkin3.h" #include "ShowPic22.h" #include "ClientRequirement.h" #include "MyLock.h" #include "ComparePhoto.h" #include "ReplaceDesignNo.h" #include "Login2.h" #include "TimeOutDlg.h" #include "ShowEffect.h" #include "SelBrunDevice.h" #include "ProductChooseFilter.h" #include "NewFolderDlg.h" #include "NetShareInfo.h" #include "ShowMsg3.h" using namespace helper_coffs; #ifdef _DEBUG //#define new DEBUG_NEW (如果出现new时传多个参数会出错) #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif using namespace helper_coffs; extern int GetOrientation(Image *image); extern HCURSOR g_cursorhand; ///////////////////////////////////////////////////////////////////////////// // ChoosePhotoSkin2 message handlers extern void SizeToContent(HWND hwnd, Image *img); //mode //0 全部 //1 选中 //2 未选 //3 删除 //4 入册 //5 入底 ///////////////////////////////////////////////////////////////////////////// // ChoosePhotoSkin2 dialog IDC_EDITzs ChoosePhotoSkin2::ChoosePhotoSkin2(CWnd* pParent /*=NULL*/) : ChoosePhotoBase(ChoosePhotoSkin2::IDD, pParent) { m_time4 = g_date; g_pMainWnd->GetSkin(); m_strStatusOfChoosePhoto = _T("未选"); m_pCurrSelFolder = NULL; m_OpenFolder = NULL; m_pFolderImg = NULL; m_Runingmode = 0; m_bHide = atoi(g_cominfoarray.ElementAt(0).ElementAt(59)); } ChoosePhotoSkin2::ChoosePhotoSkin2(DWORD id, CWnd* pParent) : ChoosePhotoBase(id, pParent) { m_time4 = g_date; g_pMainWnd->GetSkin(); m_strStatusOfChoosePhoto = _T("未选"); m_pCurrSelFolder = NULL; m_OpenFolder = NULL; m_pFolderImg = NULL; m_Runingmode = 0; m_bHide = atoi(g_cominfoarray.ElementAt(0).ElementAt(59)); } void ChoosePhotoSkin2::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(ChoosePhotoSkin2) DDX_Control(pDX, IDC_COMBO1, m_combo1); DDX_Control(pDX, IDC_LIST3, m_List3); DDX_Control(pDX, IDC_LIST2, m_List2); DDX_Control(pDX, IDC_LIST1, m_List1); DDX_Text(pDX, IDC_EDITname1, m_name1); DDX_Text(pDX, IDC_EDITname2, m_name2); DDX_Text(pDX, IDC_EDITtime4, m_time4); DDX_Text(pDX, IDC_EDITwaiter3, m_waiter3); DDX_Text(pDX, IDC_EDITzs, m_takezs); DDX_Text(pDX, IDC_EDITzs2, m_taoxizs); DDX_Text(pDX, IDC_EDITzs3, m_choosezs); DDX_Text(pDX, IDC_EDITmoney3, m_money3); DDX_Text(pDX, IDC_EDITid, m_strOrderNumber); DDX_Text(pDX, IDC_EDITbz3, m_bz3); //}}AFX_DATA_MAP} } BEGIN_MESSAGE_MAP(ChoosePhotoSkin2, CDialog) //{{AFX_MSG_MAP(ChoosePhotoSkin2) ON_WM_PAINT() ON_WM_DESTROY() ON_WM_ERASEBKGND() ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1) ON_WM_CLOSE() ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRclickList1) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1) ON_WM_TIMER() //}}AFX_MSG_MAP ON_MESSAGE(WM_USER + 1101, OnBtnClick) ON_COMMAND_RANGE(IDM_MENUsp1 - 1, IDM_MENUsp1 + 200, OnCommandMenu) ON_COMMAND(IDM_NEWFOLDER, OnNewFolder) ON_COMMAND(IDM_DELFOLDER, OnDelFolder) ON_COMMAND(IDM_OPENFOLDER, OnOpenFolder) ON_COMMAND(IDM_RETURNMAINDIR, OnReturnMainDir) ON_MESSAGE(WM_USER + 200, UpdateTakeZS) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // ChoosePhotoSkin2 message handlers BOOL ChoosePhotoSkin2::OnInitDialog() //初始化选片*看设计 { ChoosePhotoBase::OnInitDialog(); //加载相片和文件夹icon; LoadImageFromRes(&m_pHideImg, MAKEINTRESOURCE(IDR_JPG5), _T("JPG")); if(m_pHideImg == NULL) { MessageBox(_T("加载图标失败")); return FALSE; } LoadImageFromRes(&m_pFolderImg, MAKEINTRESOURCE(IDR_JPG14), _T("JPG")); if(m_pFolderImg == NULL) { MessageBox(_T("加载图标失败")); return FALSE; } // 1.加载lia皮肤信息; g_bInSkin = 1; m_ticks = ::GetTickCount(); if (g_cursorhand == NULL) g_cursorhand = AfxGetApp()->LoadCursor(IDC_CURSORHAND); BYTE *pData = NULL; BYTE *pDataBegin; //printf("Jeff:loadLia路径:%s\n\n",g_mainpath+"\\skin\\"+m_liapath);//Jeff Printf; if (!LoadLia(g_mainpath + _T("\\skin\\") + m_liapath, &pData, &pDataBegin, &m_pBk, m_hWnd)) { EndDialog(0); return false; } //初始化按钮和位置 //printf("Jeff:g_resdata2.nPicCount=%d\n\n",g_resdata2.nPicCount); // Jeff Printf,这个nPicCount好像一直是15; for (int i = 0; i < g_resdata2.nPicCount; i++) { g_resdata2.rect[i].left *= g_fscalex; g_resdata2.rect[i].right *= g_fscalex; g_resdata2.rect[i].top *= g_fscaley; g_resdata2.rect[i].bottom *= g_fscaley; if (i == 8) g_resdata2.rect[i] = g_resdata2.rect[2]; else if (i == 9) g_resdata2.rect[i] = g_resdata2.rect[3]; else if (i == 10) g_resdata2.rect[i] = g_resdata2.rect[1]; if (g_resdata2.nPicBmpCount[i]) { MyBmpButton2 *pic = new MyBmpButton2; m_picarray.Add((DWORD)pic); CRect rc = g_resdata2.rect[i]; CString str; str.Format(_T("%d"), i + 1); pic->Create(str, WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, rc, this, i + 100); pic->m_bmpcount = g_resdata2.nPicBmpCount[i]; pic->ReadBmp(&pData, NULL, this); #ifdef SZWNS_VERSION//深圳维纳斯 if(i==3 && m_mode2==0) { Image *img=NULL; LoadImageFromRes(&img, MAKEINTRESOURCE(IDR_JPG6), _T("JPG")); delete pic->m_bmp; pic->m_bmp=img->Clone(); delete img; img=NULL; LoadImageFromRes(&img, MAKEINTRESOURCE(IDR_JPG7), _T("JPG")); delete pic->m_bmpfocus; pic->m_bmpfocus=img->Clone(); delete img; img=NULL; LoadImageFromRes(&img, MAKEINTRESOURCE(IDR_JPG8), _T("JPG")); delete pic->m_bmpfocused; pic->m_bmpfocused=img->Clone(); delete img; } #endif//SZWNS_VERSION } else m_picarray.Add(NULL); m_rcarray.Add(g_resdata2.rect[i]); } delete[]pDataBegin; //初始化按钮位置; if (atoi(g_cominfoarray.ElementAt(0).ElementAt(86))) { ((MyBmpButton2*)m_picarray.ElementAt(3))->ShowWindow(SW_HIDE); CRect rc, rc2; ((MyBmpButton2*)m_picarray.ElementAt(3))->GetWindowRect(rc); ((MyBmpButton2*)m_picarray.ElementAt(1))->GetWindowRect(rc2); int dtx = rc.right - rc2.right; ScreenToClient(rc2); rc2.left += dtx; rc2.right += dtx; ((MyBmpButton2*)m_picarray.ElementAt(1))->MoveWindow(rc2); ((MyBmpButton2*)m_picarray.ElementAt(0))->GetWindowRect(rc2); ScreenToClient(rc2); rc2.left += dtx; rc2.right += dtx; ((MyBmpButton2*)m_picarray.ElementAt(0))->MoveWindow(rc2); } if (1)//m_mode2==0) { ((MyBmpButton2*)m_picarray.ElementAt(7))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(8))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(9))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(10))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(11))->ShowWindow(SW_HIDE); } else { ((MyBmpButton2*)m_picarray.ElementAt(7))->EnableWindow(0); ((MyBmpButton2*)m_picarray.ElementAt(0))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(1))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(2))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(3))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(11))->ShowWindow(SW_HIDE); if (IsHasRights2new(37) == 0) { ((MyBmpButton2*)m_picarray.ElementAt(8))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(9))->ShowWindow(SW_HIDE); } } { CRect rc, rc2; ((MyBmpButton2*)m_picarray.ElementAt(5))->GetWindowRect(rc); ((MyBmpButton2*)m_picarray.ElementAt(4))->GetWindowRect(rc2); int dtx = rc.right - rc2.right; rc2 = rc; // if(atoi(g_cominfoarray.ElementAt(0).ElementAt(86))==0) { float scale = 0.9; dtx *= scale; int wid = rc2.Width()*scale; int hei = rc2.Height()*scale; int dty = rc2.Height() - hei; dty /= 2; rc2.left = rc2.right - wid; rc2.top += dty; rc2.bottom = rc2.top + hei; } ScreenToClient(rc2); ((MyBmpButton2*)m_picarray.ElementAt(5))->MoveWindow(rc2); rc2.left -= dtx; rc2.right -= dtx; ((MyBmpButton2*)m_picarray.ElementAt(4))->MoveWindow(rc2); rc2.left -= dtx; rc2.right -= dtx; ((MyBmpButton2*)m_picarray.ElementAt(14))->MoveWindow(rc2); rc2.left -= dtx; rc2.right -= dtx; ((MyBmpButton2*)m_picarray.ElementAt(2))->MoveWindow(rc2); if (atoi(g_cominfoarray.ElementAt(0).ElementAt(86)) == 0) { rc2.left -= dtx; rc2.right -= dtx; ((MyBmpButton2*)m_picarray.ElementAt(3))->MoveWindow(rc2); } rc2.left -= dtx; rc2.right -= dtx; ((MyBmpButton2*)m_picarray.ElementAt(12))->MoveWindow(rc2); rc2.left -= dtx; rc2.right -= dtx; ((MyBmpButton2*)m_picarray.ElementAt(13))->MoveWindow(rc2); rc2.left -= dtx; rc2.right -= dtx; ((MyBmpButton2*)m_picarray.ElementAt(1))->MoveWindow(rc2); rc2.left -= dtx; rc2.right -= dtx; ((MyBmpButton2*)m_picarray.ElementAt(0))->MoveWindow(rc2); } #ifndef MNLS_VERSION//mnls ((MyBmpButton2*)m_picarray.ElementAt(7))->ShowWindow(SW_HIDE); ((MyBmpButton2*)m_picarray.ElementAt(7))->EnableWindow(0); Graphics graph(m_pBk); Image *img = NULL; ::LoadImageFromBuf(&img, g_mainpath + _T("\\图片\\标题-选片.jpg")); if (img) { if (img->GetWidth() == 2000) { graph.SetSmoothingMode(SmoothingModeHighQuality); graph.DrawImage(img, 0, 0); } delete img; } #endif//MNLS_VERSION //初始化列表位置; CRect listrc = m_rcarray.ElementAt(6); { CRect rc; GetClientRect(rc); rc.top = listrc.top; m_List1.MoveWindow(rc); } //创建图标列表控件; m_ImageListThumb.Create(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, ILC_COLOR24, 0, 1); m_List1.SetImageList(&m_ImageListThumb, LVSIL_NORMAL); m_List2.InitStyle(); m_List2.InsertColumn(0, _T("编号"), LVCFMT_LEFT, 45); m_List2.InsertColumn(1, _T("商品名称"), LVCFMT_LEFT, 150); m_List2.InsertColumn(2, _T("数量"), LVCFMT_LEFT, 45); m_List3.InitStyle(); m_List3.InsertColumn(0, _T("autoid"), LVCFMT_LEFT, 0); m_List3.InsertColumn(1, _T("编号"), LVCFMT_LEFT, 45); m_List3.InsertColumn(2, _T("商品名称"), LVCFMT_LEFT, 150); m_List3.InsertColumn(3, _T("价格"), LVCFMT_LEFT, 45); m_List3.InsertColumn(4, _T("数量"), LVCFMT_LEFT, 45); #ifdef LKAY_VERSION m_List3.InsertColumn(5,_T("P数"),LVCFMT_LEFT,55); m_List3.InsertColumn(6,_T("张数"),LVCFMT_LEFT,55); m_List3.InsertColumn(7,_T("照片编号"),LVCFMT_LEFT,365); #else m_List3.InsertColumn(5, _T("照片编号"), LVCFMT_LEFT, 365); // 2015.11.13 保存列表添加多一列商品备注选项; m_List3.InsertColumn(6, _T("备注"), LVCFMT_LEFT, 300); #endif//LKAY_VERSION ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 以上均为界面布局; // 下面的代码才是数据处理; CString path, str; { #if USE_SHARE_FLORD LoadSelectPhotos(); #else //选择此次拍摄名称DLG(如:拍摄景点) GetTXName(&m_strOrderNumber, 1, m_bGrowthTX, m_seltxname); // HC:缓存,checkHC检查在本机是否存在缓存的相片; if (IsThereACacheImg()) // (一般返回0)这一步是查看C:\WINDOWS\System32\有没有lyfz的文件夹,以及该文件夹下是否有订单号文件夹和相片; m_bFromLocal = 1; //printf("Jeff:m_AllPhotoPath.GetSize()=%d\n\n",m_AllPhotoPath.GetSize());// Jeff Printf; if (m_AllPhotoPath.GetSize() == 0) // m_AllPhotoPath:查看全部相片. { if (IsPhoto2Exist())//如果订单文件夹存在; { SelBrunDevice dlg; dlg.m_mode = 0; if (dlg.DoModal() == IDOK) // m_nChoosePhotoType =0:修片; =1原片 =2:原片+修片 m_nChoosePhotoType = dlg.m_sel; else m_nChoosePhotoType = 1; } else AfxMessageBox(_T("温馨提示:\r\n未找到初修片,将使用原片选片"), MB_ICONINFORMATION); CString path2 = _T(""); m_path = g_path1 + _T("\\"); m_path += m_strOrderNumber; m_path += _T("\\"); if(!IsShareFolderExist(m_path)) AfxMessageBox(_T("温馨提示:\r\n未找到") + m_path, MB_ICONINFORMATION); if (m_seltxname != "" && m_seltxname != _T("全部")) { m_path += m_seltxname; m_path += _T("\\"); } if (m_nChoosePhotoType == 1) // 选片:选择修片文件夹; { m_path = g_path2 + _T("\\"); m_path += m_strOrderNumber; m_path += _T("\\"); if(!IsShareFolderExist(m_path)) AfxMessageBox(_T("温馨提示:\r\n未找到") + m_path, MB_ICONINFORMATION); #if JEFF_TEST_ON // 成长套系选择修好的片时需要; [3/25/2015 lyfz] if (m_seltxname != "" && m_seltxname != _T("全部")) { m_path += m_seltxname; m_path += _T("\\"); } #endif//JEFF_TEST_ON } //获取所有相片 GetAllPhotoPath(m_path, m_AllPhotoPath); if (m_nChoosePhotoType != 2) // Jeff:如果不是只查看原片 ,只有初修片里才有多种效果; //if (m_nChoosePhotoType != 0) // Jeff:如果不是只查看原片; {//多种修好的效果 CString path2; path2 = g_path2 + _T("\\"); path2 += m_strOrderNumber; path2 += _T("\\"); //printf("Jeff:****paht2=%s\n\n",path2);//Jeff Printf;path2="修好的片" ffsco o; o.dirs(0); o.find(LPCSTR(path2), LPCSTR("*.jpg")); ffsco::typeT coo; ffsco::typeT::iterator it; coo = o.co_file(); for (it = coo.begin(); coo.end() != it; it++) { path = (*it).c_str(); if (path.GetAt(path.ReverseFind('\\') + 1) != 's' && path.GetAt(path.ReverseFind('\\') + 1) != 'm') { path.MakeLower(); path2 = path.Right(path.GetLength() - path.ReverseFind('\\') - 1); if (path2.Find(_T("-")) != -1) { #if JEFF_TEST_ON if(PathFileExists(path)) m_AllPhotoPath.Add(path); #else m_AllPhotoPath.Add(path); #endif//JEFF_TEST_ON } } } } } #endif//USE_SHARE_FLORD if (m_AllPhotoPath.GetSize() && atoi(g_cominfoarray.ElementAt(0).ElementAt(61))) { int size = m_AllPhotoPath.GetSize() - 1; CString sTemp; int nPos; for (int i = 0; i < size; i++) { nPos = rand() % (size - i); sTemp = m_AllPhotoPath.ElementAt(size - i); m_AllPhotoPath.SetAt(size - i, m_AllPhotoPath.ElementAt(nPos)); m_AllPhotoPath.SetAt(nPos, sTemp); } } } // 开始选片;读取数据; GetData(); //是否已选过; if (m_checkstatus == "OK") { if (atoi(g_cominfoarray.ElementAt(0).ElementAt(85)) && IsHasRights2new(20) == 0) { Login2 dlg; if (dlg.DoModal() != IDOK) { MyBmpButton2 *btn = ((MyBmpButton2*)m_picarray.ElementAt(4)); btn->m_bmpdisable = btn->m_bmp->Clone(); Graphics graph(btn->m_bmpdisable); CPoint pt1, pt2, pt3; pt1.x = 0; pt1.y = 0; pt2.x = btn->m_bmp->GetWidth(); pt2.y = 0; pt3.x = 0; pt3.y = btn->m_bmp->GetHeight(); //目标位置 Point destinationPoints[] = { Point(pt1.x, pt1.y), // destination for upper-left point of original Point(pt2.x, pt2.y), // destination for upper-right point of original Point(pt3.x, pt3.y) }; // destination for lower-left point of original //颜色 ColorMatrix colorMatrix = \ {0.33f, 0.33f, 0.33f, 0.0f, 0.0f, 0.33f, 0.33f, 0.33f, 0.0f, 0.0f, 0.33f, 0.33f, 0.33f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; ImageAttributes imageAtt; imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault, ColorAdjustTypeBitmap); graph.DrawImage(btn->m_bmp, destinationPoints, 3, 0, 0, btn->m_bmp->GetWidth(), btn->m_bmp->GetHeight(), UnitPixel, &imageAtt); btn->EnableWindow(0); m_bCanSave = 0; // CDialog::OnCancel (); // return 1; } else if (IsHasRightsnew2(20, dlg.m_rights) == 0) { MyBmpButton2 *btn = ((MyBmpButton2*)m_picarray.ElementAt(4)); btn->m_bmpdisable = btn->m_bmp->Clone(); Graphics graph(btn->m_bmpdisable); CPoint pt1, pt2, pt3; pt1.x = 0; pt1.y = 0; pt2.x = btn->m_bmp->GetWidth(); pt2.y = 0; pt3.x = 0; pt3.y = btn->m_bmp->GetHeight(); Point destinationPoints[] = { Point(pt1.x, pt1.y), // destination for upper-left point of original Point(pt2.x, pt2.y), // destination for upper-right point of original Point(pt3.x, pt3.y) }; // destination for lower-left point of original ColorMatrix colorMatrix = \ {0.33f, 0.33f, 0.33f, 0.0f, 0.0f, 0.33f, 0.33f, 0.33f, 0.0f, 0.0f, 0.33f, 0.33f, 0.33f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; ImageAttributes imageAtt; imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault, ColorAdjustTypeBitmap); graph.DrawImage(btn->m_bmp, destinationPoints, 3, 0, 0, btn->m_bmp->GetWidth(), btn->m_bmp->GetHeight(), UnitPixel, &imageAtt); btn->EnableWindow(0); m_bCanSave = 0; // CDialog::OnCancel (); // return 1; } } } // 记录要删除的相片; RecordDeletedPhotos(&m_delphotos, m_DelPhotoPath); // 加载文件夹; LoadFolder(); //在界面上显示图片; LoadPhotos(); if (atoi(g_cominfoarray.ElementAt(0).ElementAt(95)) || g_cominfoarray.ElementAt(0).ElementAt(95) == _T("")) { int timer1 = atoi(g_cominfoarray.ElementAt(0).ElementAt(96)); m_timer = atoi(g_cominfoarray.ElementAt(0).ElementAt(97)); if (timer1 == 0) timer1 = 60; if (m_timer == 0) m_timer = 20; SetTimer(1, timer1 * 60000, NULL); } return false; } void ChoosePhotoSkin2::OnPaint() { try { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here if (m_pBk == NULL) { return; } CRect rc; GetClientRect(rc); Graphics graph(dc.GetSafeHdc()); Rect destinationRect(0, 0, rc.Width(), rc.Height()); int width = m_pBk->GetWidth(); int height = m_pBk->GetHeight(); graph.SetSmoothingMode(SmoothingModeHighQuality); graph.DrawImage(m_pBk, destinationRect, 0, 0, width, height, UnitPixel); // Do not call CDialog::OnPaint() for painting messages } catch (...) { } } void ChoosePhotoSkin2::OnDestroy() { try { TerminateThread(); if (m_pBk)delete m_pBk; MyBmpButton2 *pic = NULL; for (int i = 0; i < m_picarray.GetSize(); i++) { pic = (MyBmpButton2*)m_picarray.ElementAt(i); if (pic) { pic->DestroyWindow(); delete pic; } } m_picarray.RemoveAll(); if (m_selphotownd.GetSafeHwnd()) { m_selphotownd.DestroyWindow(); } if (m_selphotownd2.GetSafeHwnd()) { m_selphotownd2.DestroyWindow(); } //清除资源的路径 ClearResData(); ClearFolder(); if(m_pHideImg) delete m_pHideImg; if(m_pFolderImg) delete m_pFolderImg; CDialog::OnDestroy(); } catch (...) { } } #ifdef VC60 void ChoosePhotoSkin2::OnBtnClick(WPARAM wParam, LPARAM lParam) { // WM_USER + 1101 // F5按键,显示删除相片 int id = lParam; id -= 99; switch (id) { case 1: // 查看全部相片按钮事件; case 2: // 查看选中的相片按钮事件; case 4: // F5查看删除的相片; { if (m_SelectCategory == id - 1 && m_SelectCategory != 1) return; m_SelectCategory = id - 1; if(INDX_SEL == m_SelectCategory) OnSelPhoto(); LoadPhotos(); } break; case 3://查看未选按钮事件; { m_SelectCategory = INDX_NOSEL; m_sChooseFilter = _T(""); UpdateChooseZS(); GetNoSelPhoto(); LoadPhotos(); } break; case 13: // 查看入册相片按钮事件; GetAlbumPhoto(); LoadPhotos(); break; case 14: // 查看入底相片按钮事件; GetDiskPhoto(); LoadPhotos(); break; case 15: // 效果图按钮事件; { ShowEffectDlg dlg; if(m_OpenFolder) dlg.m_pPhotopatharray = this->GetCurArray(0, m_OpenFolder); else dlg.m_pPhotopatharray = this->GetCurArray(m_SelectCategory); dlg.DoModal(); } break; case 5: // 保存按钮事件; OnButton4(); break; case 6: // 关闭按钮事件 ; if (m_bModify && m_bCanSave) { ShowMsg3 dlg; dlg.m_strMsg = _T("提醒, 选片修改未保存, 是否保存后再退出?"); // if (AfxMessageBox(_T("提醒, 选片修改未保存, 是否保存后再退出?"), MB_YESNO | MB_ICONINFORMATION) == IDYES) if(dlg.DoModal() == IDOK) { OnButton4(); if (m_bSaveFail) { AfxMessageBox(_T("连接服务器失败, 保存失败, 您可以在本机上重新进入选片恢复到选中状态!")); CDialog::OnCancel(); return; } return; } else { CString savepath = _T(""); savepath.Format("%s\\%s.dat", g_mainpath, m_strOrderNumber); ::DeleteFile(savepath); // 删除*.dat文件; } } CDialog::OnCancel(); break; case 11: if (m_selphotownd.GetSafeHwnd() == NULL) { m_selphotownd.m_id = m_strOrderNumber; m_selphotownd.m_rc = m_rcarray.ElementAt(6); m_selphotownd.Create(IDD_DLGShowSelPhoto, this); } m_selphotownd.ShowWindow(1); break; } } #else LRESULT ChoosePhotoSkin2::OnBtnClick(WPARAM wParam, LPARAM lParam) { // WM_USER + 1101 // F5按键,显示删除相片 int id = lParam; id -= 99; switch (id) { case 1: // 查看全部相片按钮事件; case 2: // 查看选中的相片按钮事件; case 4: // F5查看删除的相片; { if (m_SelectCategory == id - 1 && m_SelectCategory != 1) return 0; m_SelectCategory = id - 1; if(INDX_SEL == m_SelectCategory) OnSelPhoto(); LoadPhotos(); } break; case 3://查看未选按钮事件; { m_SelectCategory = INDX_NOSEL; m_sChooseFilter = _T(""); UpdateChooseZS(); GetNoSelPhoto(); LoadPhotos(); } break; case 13: // 查看入册相片按钮事件; GetAlbumPhoto(); LoadPhotos(); break; case 14: // 查看入底相片按钮事件; GetDiskPhoto(); LoadPhotos(); break; case 15: // 效果图按钮事件; { ShowEffectDlg dlg; if(m_OpenFolder) dlg.m_pPhotopatharray = this->GetCurArray(0, m_OpenFolder); else dlg.m_pPhotopatharray = this->GetCurArray(m_SelectCategory); dlg.DoModal(); } break; case 5: // 保存按钮事件; OnButton4(); break; case 6: // 关闭按钮事件 ; if (m_bModify && m_bCanSave) { ShowMsg3 dlg; dlg.m_strMsg = _T("提醒, 选片修改未保存, 是否保存后再退出?"); // if (AfxMessageBox(_T("提醒, 选片修改未保存, 是否保存后再退出?"), MB_YESNO | MB_ICONINFORMATION) == IDYES) if(dlg.DoModal() == IDOK) { OnButton4(); if (m_bSaveFail) { AfxMessageBox(_T("连接服务器失败, 保存失败, 您可以在本机上重新进入选片恢复到选中状态!")); CDialog::OnCancel(); return 0; } return 0; } else { CString savepath = _T(""); savepath.Format("%s\\%s.dat", g_mainpath, m_strOrderNumber); ::DeleteFile(savepath); // 删除*.dat文件; } } CDialog::OnCancel(); break; case 11: if (m_selphotownd.GetSafeHwnd() == NULL) { m_selphotownd.m_id = m_strOrderNumber; m_selphotownd.m_rc = m_rcarray.ElementAt(6); m_selphotownd.Create(IDD_DLGShowSelPhoto, this); } m_selphotownd.ShowWindow(1); break; } return 0; } #endif BOOL ChoosePhotoSkin2::OnEraseBkgnd(CDC* pDC) { return 1; } BEGIN_EVENTSINK_MAP(ChoosePhotoSkin2, CDialog) ON_EVENT(ChoosePhotoSkin2, 100, 150 /* FSCommand */, OnFSCommandShockwaveflash1, VTS_BSTR VTS_BSTR) END_EVENTSINK_MAP() void ChoosePhotoSkin2::OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args) { } //------------------------------------------------------------------ // 函数:OnDblclkList1 // 描述:处理双击和回车时的图片显示效果;与函数名本身的表达意义不一致,导致歧义! // 参数: // 返回: //------------------------------------------------------------------ void ChoosePhotoSkin2::OnDblclkList1() { // 1.从双击中的列表项中获取相片名; POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) return; int iItem = m_List1.GetNextSelectedItem(pos); #if JEFF_TEST_OFF // 双击列表根本就不做不到多选多击,双击只会选中一个,故GetNextSelectedItem(pos)后,pos=NULL // 但是这个函数的作用并不是跟函数名一致,有其他地方用到。 #else // 这一块代码是用于处理回车键; int nFolderNum = m_vFolder.size(); if(m_OpenFolder == NULL) { //双击文件夹; if(iItem < nFolderNum) { m_pCurrSelFolder = FindForderFromIndx(iItem); if(m_pCurrSelFolder) { //打开文件夹; m_OpenFolder = m_pCurrSelFolder; if(m_SelectCategory == INDX_INTOALBUM) GetAlbumPhoto(); else if(m_SelectCategory == INDX_ENTRYPHASSE) GetDiskPhoto(); else if(m_SelectCategory == INDX_SEL) UpdateChooseZS(); else if(m_SelectCategory == INDX_NOSEL) { m_sChooseFilter = _T(""); UpdateChooseZS(); GetNoSelPhoto(); } LoadPhotos(); } return; } else { iItem = iItem - nFolderNum; } } CArrayposarray; posarray.Add(iItem); // 获取剩下的图片位置; while (pos) { int iItem = m_List1.GetNextSelectedItem(pos); posarray.Add(iItem); if (posarray.GetSize() > 3) break; } if (posarray.GetSize() >= 2) { CStringArray* pPtahArray = NULL; if(m_OpenFolder) { nFolderNum = 0; pPtahArray = GetCurArray(0, m_OpenFolder); } else pPtahArray = GetCurArray(m_SelectCategory); CComparePhoto dlg; dlg.m_path1 = pPtahArray->ElementAt(posarray.ElementAt(0) - nFolderNum); dlg.m_path2 = pPtahArray->ElementAt(posarray.ElementAt(1) - nFolderNum); if (posarray.GetSize() > 2) dlg.m_path3 = pPtahArray->ElementAt(posarray.ElementAt(2) - nFolderNum); if (posarray.GetSize() > 3) dlg.m_path4 = pPtahArray->ElementAt(posarray.ElementAt(3) - nFolderNum); dlg.DoModal(); return; } #endif //JEFF_TEST_OFF m_showpichwd = NULL; // 双击小图查看大图; ShowPic22 dlg; dlg.m_pParent = this; dlg.m_nCurImgPos = iItem; CStringArray* pArray = NULL; if(m_OpenFolder) pArray = GetCurArray(m_SelectCategory, m_OpenFolder); else pArray = GetCurArray(m_SelectCategory); if(pArray == NULL) return; //100为设定使用m图 if (atoi(g_cominfoarray.ElementAt(0).ElementAt(100))) { CStringArray saCurrentImagePath; // 当前列表相片; CStringArray arraymsize; // 对应的"m"相片路径; saCurrentImagePath.Copy(*pArray); for (int i = 0; i < saCurrentImagePath.GetSize(); i++) { CString str = saCurrentImagePath.ElementAt(i); CString spath = str.Left(str.ReverseFind('\\') + 1); spath += "m"; spath += str.Right(str.GetLength() - str.ReverseFind('\\') - 1); if (::PathFileExists(spath)) arraymsize.Add(spath); else arraymsize.Add(str); } dlg.m_AryOfImgPath = &arraymsize; dlg.m_pPathArrayBigsize = &saCurrentImagePath; dlg.DoModal(); } else { dlg.m_AryOfImgPath = pArray; dlg.DoModal(); } m_showpichwd = NULL; } void ChoosePhotoSkin2::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) // 双击图片列表! { OnDblclkList1(); *pResult = 0; } /************************************************************************/ /* 函数: GetData 描述: 选片模式 参数: 返回: 注意: */ /************************************************************************/ BOOL ChoosePhotoSkin2::GetData()//选片模式; { m_List2.DeleteAllItems(); m_List3.DeleteAllItems(); m_noarray.RemoveAll(); m_no2array.RemoveAll(); m_oldsparray.RemoveAll(); CString filter = _T(""); //选片 #ifdef CHILD_VERSION filter = "id='" + m_strOrderNumber + "';id='" + m_strOrderNumber + "';;id='" + m_strOrderNumber + "'"; if (m_seltxname != "" && m_seltxname != "全部") filter = "id='" + m_strOrderNumber + "' and growthtxname='" + m_seltxname + "';id='" + m_strOrderNumber + "';;id='" + m_strOrderNumber + "'"; #else filter = "id='" + m_strOrderNumber + "' and kind<>'2';id='" + m_strOrderNumber + "';;id='" + m_strOrderNumber + "'"; #endif //CHILD_VERSION //订单号、商品编号、商品价格、订单商品数量、商品类型、商品名称、选片选中相片名、自增id、选设计选中相片名; g_sendhead.code[0] = 50; // dindansp; g_sendhead.code[1] = 11; // dindan g_sendhead.code[2] = 4; // shangpin g_sendhead.code[3] = 182; // dindansp3 g_sendhead.tabcount = 4; g_sendhead.bsql = 0; g_pMainWnd->ProcessChatMessageRequest2(filter); if (g_bSendOK == 0) return 0; CArray sparray; //dindansp表;//订单号、商品编号、商品价格、订单商品数量、商品类型、商品名称、选片选中相片名、自增id、选设计选中相片名; DataToArray(&sparray, &g_List1array, &m_sparray, &m_oldsparray); m_SelPhotoPath.RemoveAll(); CString str(_T("")), kind(_T("")); int nchoosezs = 0; int list2pos = 0; int list3pos = 0; CString savepath; savepath.Format(_T("%s\\%s.dat"), g_mainpath, m_strOrderNumber); CString stm1 = GetModifyTime2(savepath); CTime tm1 = CTime::GetCurrentTime(); tm1 -= CTimeSpan(2, 0, 0, 0); CString stm2 = tm1.Format(_T("%Y%m%d")); BOOL bLoadHistory = 0; if (PathFileExists(savepath) && stm1 > stm2) { if (AfxMessageBox(_T("提醒:请谨慎操作\r\n上次选片未正常退出, 是否还原到上次选片状态?"), MB_YESNO | MB_ICONINFORMATION) == IDYES) bLoadHistory = 1; } int i = 0; if (bLoadHistory) { //还原到上次选片状态 CArray List1array; //读取数据 CFile fp; fp.Open(savepath, CFile::modeRead); DWORD nMessageLen = fp.GetLength(); BYTE *szChatMessage = new BYTE[nMessageLen]; fp.Read(szChatMessage, nMessageLen); fp.Close(); int count = 0; memcpy(&count, szChatMessage + (nMessageLen - sizeof(int)), sizeof(int)); CMemFile memfile; memfile.Attach(szChatMessage, nMessageLen); CArchive ar(&memfile, CArchive::load); List1array.SetSize(count); for ( i = 0; i < List1array.GetSize(); i++) List1array.ElementAt(i).Serialize(ar); ar.Close(); memfile.Detach(); delete[]szChatMessage; list2pos = 0; list3pos = 0; for (i = 0; i < List1array.GetSize(); i++) { if (0)//List1array.ElementAt (i).GetSize ()==6) { kind = "0"; m_List2.InsertItem(list2pos, List1array.ElementAt(i).ElementAt(1)); m_List2.SetItemText(list2pos, 1, List1array.ElementAt(i).ElementAt(2)); m_List2.SetItemText(list2pos, 2, List1array.ElementAt(i).ElementAt(3)); m_List2.SetItemText(list2pos, 3, List1array.ElementAt(i).ElementAt(4)); m_List2.SetItemText(list2pos, 4, List1array.ElementAt(i).ElementAt(5)); str = List1array.ElementAt(i).ElementAt(5); list2pos++; } else { kind = "4"; m_List3.InsertItem(list3pos, List1array.ElementAt(i).ElementAt(1)); m_List3.SetItemText(list3pos, 1, List1array.ElementAt(i).ElementAt(2)); m_List3.SetItemText(list3pos, 2, List1array.ElementAt(i).ElementAt(3)); m_List3.SetItemText(list3pos, 3, List1array.ElementAt(i).ElementAt(4)); m_List3.SetItemText(list3pos, 4, List1array.ElementAt(i).ElementAt(5)); m_List3.SetItemText(list3pos, 5, List1array.ElementAt(i).ElementAt(6)); m_List3.SetItemText(list3pos, 6, List1array.ElementAt(i).ElementAt(9)); #ifdef LKAY_VERSION m_List3.SetItemText(list3pos, 6, List1array.ElementAt (i).ElementAt (7)); m_List3.SetItemText(list3pos, 7, List1array.ElementAt (i).ElementAt (8)); str=List1array.ElementAt (i).ElementAt (8); #else str = List1array.ElementAt(i).ElementAt(6); #endif //#ifdef LKAY_VERSION list3pos++; } nchoosezs += GetZS(str); GetPathAddToSel(str); if (!str.IsEmpty()) { #ifdef USE_SEP_VEB str = SEPS_VEB + str + SEPS_VEB; #else str = SEPS_CMA + str + SEPS_CMA; #endif //#ifdef USE_SEP_VEB } str.MakeLower(); if (kind == _T("4")) m_no2array.Add(str); else m_noarray.Add(str); } } else { for ( i = 0; i < sparray.GetSize(); i++) { kind = _T("4");//sparray.ElementAt (i).ElementAt (4); if (kind == _T("4")) { m_List3.InsertItem(list3pos, sparray.ElementAt(i).ElementAt(7)); // dindansp表autoid; m_List3.SetItemText(list3pos, 1, sparray.ElementAt(i).ElementAt(1)); // 商品编号; m_List3.SetItemText(list3pos, 2, sparray.ElementAt(i).ElementAt(5)); // 商品名称; m_List3.SetItemText(list3pos, 3, sparray.ElementAt(i).ElementAt(2)); // 商品价格; m_List3.SetItemText(list3pos, 4, sparray.ElementAt(i).ElementAt(3)); // 商品数量; #ifdef LKAY_VERSION m_List3.SetItemText(list3pos, 5, sparray.ElementAt (i).ElementAt (9)); // m_List3.SetItemText(list3pos, 6, sparray.ElementAt (i).ElementAt (10)); m_List3.SetItemText(list3pos, 7, sparray.ElementAt (i).ElementAt (6)); #else m_List3.SetItemText(list3pos, 5, sparray.ElementAt(i).ElementAt(6)); // 选片时选中的相片名; m_List3.SetItemText(list3pos, 6, sparray.ElementAt(i).ElementAt(9)); // 商品备注; #endif list3pos++; } else { OutputDebugString(_T("\n 选片 #######################m_List2####################### \n")); m_List2.InsertItem(list2pos, sparray.ElementAt(i).ElementAt(7)); // dindansp表autoid; m_List2.SetItemText(list2pos, 1, sparray.ElementAt(i).ElementAt(1)); // 商品编号; m_List2.SetItemText(list2pos, 2, sparray.ElementAt(i).ElementAt(5)); // 商品名称; m_List2.SetItemText(list2pos, 3, sparray.ElementAt(i).ElementAt(3)); // 商品数量; m_List2.SetItemText(list2pos, 4, sparray.ElementAt(i).ElementAt(6)); // 选片时选中的相片名; list2pos++; } str = sparray.ElementAt(i).ElementAt(6); str.MakeLower(); nchoosezs += GetZS(str); // 获取no或no2字段中包含的相片名数量; GetPathAddToSel(str); if (!str.IsEmpty()) { #ifdef USE_SEP_VEB str = SEPS_VEB + str + SEPS_VEB; #else str = SEPS_CMA + str + SEPS_CMA; #endif //#ifdef USE_SEP_VEB } if (kind == _T("4")) m_no2array.Add(str); else m_noarray.Add(str); } // 入册; CheckForAlbum(); // 入底; CheckForDisk(); } // g_List1array -> dindan表; if (g_List1array.GetSize()) { m_name1 = g_List1array.ElementAt(0).ElementAt(4); m_name2 = g_List1array.ElementAt(0).ElementAt(5); m_phone1 = g_List1array.ElementAt(0).ElementAt(61); m_phone2 = g_List1array.ElementAt(0).ElementAt(62); if (!m_name1.IsEmpty()) { #ifdef USE_SEP_VEB m_name = m_name1 + SEPS_VEB; #else m_name = m_name1 + SEPS_CMA; #endif //#ifdef USE_SEP_VEB } m_name += m_name2; #ifdef USE_SEP_VEB m_name.TrimRight(SEPS_VEB); #else m_name.TrimRight(SEPS_CMA); #endif //#ifdef USE_SEP_VEB m_waiter3 = g_user.name; m_taoxizs = g_List1array.ElementAt(0).ElementAt(9); m_time5 = g_List1array.ElementAt(0).ElementAt(22); m_takezs = g_List1array.ElementAt(0).ElementAt(23); m_choosezs = g_List1array.ElementAt(0).ElementAt(24); m_money3 = g_List1array.ElementAt(0).ElementAt(3); m_oldmoney3 = m_money3; m_bz3 = g_List1array.ElementAt(0).ElementAt(39); m_bz4 = g_List1array.ElementAt(0).ElementAt(75); m_delphotos = g_List1array.ElementAt(0).ElementAt(53); // Jeff开始选片时,获取dindan表的字段delphotos.读取正常; if ( m_delphotos.GetAt(0) != SEPC_VEB || m_delphotos.GetAt(m_delphotos.GetLength() -1) != SEPC_VEB ) { m_delphotos.TrimLeft(SEPC_VEB); m_delphotos.TrimRight(SEPC_VEB); m_delphotos = SEPS_VEB + m_delphotos + SEPS_VEB; } m_time6 = g_List1array.ElementAt(0).ElementAt(48); m_time5old = m_time5; m_time6old = m_time6; taoxiname = g_List1array.ElementAt(0).ElementAt(7); m_taoxijiage = g_List1array.ElementAt(0).ElementAt(8); m_waiter1 = g_List1array.ElementAt(0).ElementAt(34); m_waiter2 = g_List1array.ElementAt(0).ElementAt(35); m_clothescount = g_List1array.ElementAt(0).ElementAt(26); ren = g_List1array.ElementAt(0).ElementAt(14); m_size = g_List1array.ElementAt(0).ElementAt(60); m_checkstatus = g_List1array.ElementAt(0).ElementAt(32); UpdateData(false); } else { m_name1 = _T(""); m_name2 = _T(""); m_waiter3 = _T(""); m_taoxizs = _T(""); m_time5 = _T(""); m_takezs = _T(""); m_choosezs = _T(""); m_money3 = ""; m_bz3 = _T(""); m_bz4 = _T(""); UpdateData(false); } return 1; } void ChoosePhotoSkin2::OnClose() { /* if (m_bModify) { ShowMsg3 dlg; dlg.m_strMsg = _T("提醒, 选片修改未保存, 是否保存后再退出?"); if(dlg.DoModal() == IDOK) OnButton4(); } */ CDialog::OnClose(); } BOOL ChoosePhotoSkin2::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_LBUTTONDOWN) { g_bNeedDrawParent = 2; if (0) {//list3 CPoint pt; CRect rc, rc2; ::GetCursorPos(&pt); m_List3.GetWindowRect(rc2); if (rc2.PtInRect(pt) == 0) return CDialog::PreTranslateMessage(pMsg); SetTimer(3, 300, NULL); } } else if (0)//pMsg->message==WM_LBUTTONDBLCLK) { {//list1 CPoint pt; CRect rc, rc2; ::GetCursorPos(&pt); m_List2.GetWindowRect(rc2); if (rc2.PtInRect(pt)) return 1; } {//list3 CPoint pt; CRect rc, rc2; ::GetCursorPos(&pt); m_List3.GetWindowRect(rc2); if (rc2.PtInRect(pt) == 0)return CDialog::PreTranslateMessage(pMsg); pt.x -= rc2.left; pt.y -= rc2.top; int iItem = m_List3.GetItemCount() - 1; if (iItem < 0) { m_List3.GetHeaderCtrl()->GetItemRect(0, rc); int hei = rc.Height(); rc.top += hei; rc.bottom += hei; if (rc.PtInRect(pt)) { m_List3.InsertItem(m_List3.GetItemCount(), ""); } } else { m_List3.GetSubItemRect(iItem, 0, LVIR_BOUNDS, rc); int hei = rc.Height(); rc.top += hei; rc.bottom += hei; if (rc.PtInRect(pt)) { if (m_List3.GetItemText(iItem, 1).IsEmpty() && m_List3.GetItemText(iItem, 2).IsEmpty()) return CDialog::PreTranslateMessage(pMsg); m_List3.InsertItem(m_List3.GetItemCount(), ""); } POSITION pos; pos = m_List3.GetFirstSelectedItemPosition(); if (pos) { iItem = m_List3.GetNextSelectedItem(pos); m_List3.GetSubItemRect(iItem, 4, LVIR_BOUNDS, rc); if (rc.PtInRect(pt))return 1; } } } } else if (pMsg->message == WM_KEYDOWN) { if (m_showpichwd)return 1; switch (pMsg->wParam) { case VK_DELETE: { OnDel(); //更新绘制; DrawInterface(); // LoadPhotos(); } return 1; case VK_RETURN: OnDblclkList1(); return 1; case VK_F4: if (atoi(g_cominfoarray.ElementAt(0).ElementAt(62))) { if (m_SelectCategory == INDX_SEL) UpdateChooseZS(); SortArray(); } return 1; case VK_F5: if (atoi(g_cominfoarray.ElementAt(0).ElementAt(86))) { OnBtnClick(0, 99 + 4); } /* if(m_mode2==0)return 1; { ReplaceDesignNo dlg; dlg.m_id=this->m_id ; dlg.DoModal (); }*/ return 1; case VK_F1: { if (m_selphotownd2.GetSafeHwnd() == NULL) { m_selphotownd2.m_id = m_strOrderNumber; m_selphotownd2.m_bGrowthTX = m_bGrowthTX; m_selphotownd2.m_seltxname = m_seltxname; m_selphotownd2.m_rc = m_rcarray.ElementAt(6); m_selphotownd2.Create(IDD_DLGShowSelPhoto2, this); } m_selphotownd2.ShowWindow(1); } return 1; case VK_F2: //缩略图 if (atoi(g_cominfoarray.ElementAt(0).ElementAt(60))) { m_bHide = !m_bHide; LoadPhotos(); } return 1; case VK_BACK: //返回上层 { m_pCurrSelFolder = m_OpenFolder = NULL; if (m_SelectCategory == INDX_SEL) UpdateChooseZS(); else if(m_SelectCategory == INDX_NOSEL) { m_sChooseFilter = _T(""); UpdateChooseZS(); GetNoSelPhoto(); } LoadPhotos(); } return 1; case VK_ESCAPE: { return TRUE; } break; } } else if(pMsg->message == WM_LBUTTONUP) { CDialog::PreTranslateMessage(pMsg); if(m_OpenFolder == NULL && m_vFolder.size() && m_SelectCategory != INDX_DEL) { printf("\t拖动相片\n"); //选片模式; POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) return FALSE; int iItem = m_List1.GetDragSelIndex(); if(iItem == -1) return FALSE; CStringArray *pArray = GetCurArray(m_SelectCategory); m_pCurrSelFolder = FindForderFromIndx(iItem); if(m_pCurrSelFolder && pArray) { //获取选中的相片; vector vMoveFile; CDWordArray* pDWArr = m_List1.GetDragIndexes(); if(pDWArr) { for ( int i = pDWArr->GetSize() - 1; i > -1; i-- ) { if( (*pDWArr)[i] < m_vFolder.size() ) continue; vMoveFile.push_back(pArray->ElementAt((*pDWArr)[i] - m_vFolder.size())); pArray->RemoveAt((*pDWArr)[i] - m_vFolder.size()); } } if(vMoveFile.size() > 0) { //移动选中的相片; if(MoveFileMainToSub(vMoveFile, m_pCurrSelFolder)) { if ( m_SelectCategory != INDX_ALL && m_SelectCategory != INDX_DEL ) {// 从全部里移除被移动到文件夹的相片; pArray = GetCurArray(INDX_ALL, NULL); vector::iterator iter = vMoveFile.begin(); for ( ; iter != vMoveFile.end(); iter++ ) { for ( int n = 0; n < pArray->GetSize(); n++ ) { if ( iter->CompareNoCase(pArray->ElementAt(n)) == 0 ) { pArray->RemoveAt(n); break; } } } } } } LoadPhotos(); } } return TRUE; } return CDialog::PreTranslateMessage(pMsg); } void ChoosePhotoSkin2::OnRclickList1() // 右键List列表; { if (m_bRunning) return; CMenuXP *pPopup = NULL; POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { // 新建/返回文件夹菜单; if(m_OpenFolder) ShowFolderMenu(IDM_RETURNMAINDIR, _T("返回上层")); else ShowFolderMenu(IDM_NEWFOLDER, _T("新建文件夹")); return; } int iItem = m_List1.GetNextSelectedItem(pos); printf(_T("\t选中第%d个项\n"),iItem); CString path = _T(""); CStringArray* pArray = NULL; // 选片才对文件夹处理; if(m_OpenFolder == NULL) { int nsize = m_vFolder.size(); if(iItem < nsize) { // 获取选中的文件夹图标; m_pCurrSelFolder = FindForderFromIndx(iItem); if(m_pCurrSelFolder) { // 显示删除文件夹菜单; vector vdata; vdata.push_back(SMenuBtnData(IDM_OPENFOLDER, _T("打开文件夹"))); vdata.push_back(SMenuBtnData(IDM_DELFOLDER, _T("删除文件夹"))); ShowFolderMenu(vdata); return; } } else iItem = iItem - nsize; pArray = GetCurArray(m_SelectCategory); } else pArray = GetCurArray(INDX_ALL, m_OpenFolder); path = pArray->ElementAt(iItem); //path//打印出相片完整路径名; printf("[%d]对应文件路径:\n \t%s\n", iItem + m_vFolder.size(), path); // 右键看设计模式; path = path.Right(path.GetLength() - path.ReverseFind('\\') - 1); path = path.Left(path.ReverseFind('.')); #ifdef USE_SEP_VEB path = SEPS_VEB + path + SEPS_VEB; // #else path = SEPS_CMA + path + SEPS_CMA; // #endif //#ifdef USE_SEP_VEB // TODO: Add your control notification handler code here // 1.创建菜单对象; pPopup = new CMenuXP; pPopup->CYBUTTONMARGIN = 3; // 1.0.按钮范围0~3; 4个菜单; pPopup->CreatePopupMenu(); // 1.1.弹出式菜单; pPopup->SetMenuStyle(CMenuXP::STYLE_XP);// 1.2.弹出菜单样式; // Jeff:m_List2有三列头:编号、商品名称、商品数量; // 计算菜单最大字符长度; int i = 0; int maxleng = 1; CString name, no; int count = 0; for ( i = 0; i < m_List2.GetItemCount(); i++) { // name商品名称; name = m_List2.GetItemText(i, 2); //no = m_noarray.ElementAt(i); maxleng = max(maxleng, name.GetLength()); } count = i; for (; i < count + m_no2array.GetSize(); i++) { name = m_List3.GetItemText(i - count, 2); maxleng = max(maxleng, name.GetLength()); } maxleng += 3; // m_List2有三列头:编号、商品名称、商品数量; CString scount = _T(""); name = no = _T(""); count = 0; for ( i = 0; i < m_List2.GetItemCount(); i++) { printf("ChoosePhotoSkin2::m_List2有记录\n"); // name商品名称; name = m_List2.GetItemText(i, 2); //填充长度; FillLength(name, maxleng); // Jeff,no里为商品名称选中的相片; no = m_noarray.ElementAt(i); GetSelCountFromName(no, scount); //添加菜单项; pPopup->AppendODMenu2(0, new CMenuXPText(IDM_MENUsp1 + i, name + scount, NULL));// 2.使用AppendODMenu2添加子菜单项; //绑定事件ID if (no.Find(path) != -1) { pPopup->CheckMenuItem(IDM_MENUsp1 + i, MF_BYCOMMAND | MF_CHECKED); } } count = i; for (; i < count + m_no2array.GetSize(); i++) { name = m_List3.GetItemText(i - count, 2); FillLength(name, maxleng); no = m_no2array.ElementAt(i - count); GetSelCountFromName(no, scount); pPopup->AppendODMenu2(0, new CMenuXPText(IDM_MENUsp1 + i, name + scount, NULL)); if (no.Find(path) != -1) {// 未选中; printf("\t商品:[%s],\n\t当前相片[%s]\n\t 关联相片:[%s]\n",name, path, no); pPopup->CheckMenuItem(IDM_MENUsp1 + i, MF_BYCOMMAND | MF_CHECKED); } else {// 选中; // 当单击中菜单时,与当前状态相反; } } pPopup->AppendODMenu2(0, new CMenuXPText(32794, _T("修改要求"), NULL)); //获取当前鼠标位置; CPoint pt; ::GetCursorPos(&pt); // 3.使用TrackPopupMenu,正常弹出菜单; pPopup->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this, 0); delete pPopup; } void ChoosePhotoSkin2::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) { if (m_showpichwd) return; OnRclickList1(); *pResult = 0; } /************************************************************************/ /* 函数: ShowFolderMenu 描述: 显示文件夹菜单; 参数: 返回: 1成功, 0失败 注意: */ /************************************************************************/ int ChoosePhotoSkin2::ShowFolderMenu(const int nID, const LPCTSTR pName) { if(pName == NULL) { MessageBox(_T("弹出菜单失败")); return 0; } CMenuXP *pPopup = new CMenuXP; pPopup->CYBUTTONMARGIN = 3; // 1.0.按钮范围0~3; 4个菜单; pPopup->CreatePopupMenu(); // 1.1.弹出式菜单; pPopup->SetMenuStyle(CMenuXP::STYLE_XP); // 1.2.弹出菜单样式; pPopup->AppendODMenu2(0, new CMenuXPText(nID, pName, NULL)); //获取当前鼠标位置; CPoint pt; ::GetCursorPos(&pt); // 3.使用TrackPopupMenu,正常弹出菜单; pPopup->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this, 0); delete pPopup; return 1; } /************************************************************************/ /* 函数: ShowFolderMenu 描述: 显示文件夹菜单; 参数: 返回: 1成功, 0失败 注意: */ /************************************************************************/ int ChoosePhotoSkin2::ShowFolderMenu(vector& vdata) { if(vdata.size() == 0) { MessageBox(_T("弹出菜单失败")); return 0; } CMenuXP *pPopup = new CMenuXP; pPopup->CYBUTTONMARGIN = 3; // 1.0.按钮范围0~3; 4个菜单; pPopup->CreatePopupMenu(); // 1.1.弹出式菜单; pPopup->SetMenuStyle(CMenuXP::STYLE_XP); // 1.2.弹出菜单样式; vector::iterator iter = vdata.begin(); for(;iter != vdata.end();) { pPopup->AppendODMenu2(0, new CMenuXPText(iter->nID, iter->strBtnName, NULL)); ++iter; } //获取当前鼠标位置 CPoint pt; ::GetCursorPos(&pt); // 3.使用TrackPopupMenu,正常弹出菜单; pPopup->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this, 0); delete pPopup; return 1; } // /************************************************************************/ /* 函数: OnCommandMenu 描述: 弹出菜单处理; 参数: UINT nID 事件ID 返回: 注意: */ /************************************************************************/ void ChoosePhotoSkin2::OnCommandMenu(UINT nID) { printf("\n\nChoosePhotoSkin2::OnCommandMenu#############################################:\n"); if (32794 == nID) { //修改要求; POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { return; } int iItem = m_List1.GetNextSelectedItem(pos); if(m_OpenFolder == NULL) iItem = iItem - m_vFolder.size(); CStringArray *pArray = GetCurArray(m_SelectCategory); CString path = pArray->ElementAt(iItem); path = path.Right(path.GetLength() - path.ReverseFind('\\') - 1); path = path.Left(path.Find('.')); if (m_bz4.GetLength() > 4080) { AfxMessageBox(_T("备注太长,可在保存界面选中备注内容,按Delete键清除")); return; } UpdateData(); CClientRequirement dlg; dlg.m_no = _T("当前照片:") + path; CString header, left, right, cur; header = path + ":"; int pos2 = m_bz4.Find(header); if (pos2 != -1) { left = m_bz4.Left(pos2); m_bz4 = m_bz4.Right(m_bz4.GetLength() - pos2); pos2 = m_bz4.Find(" "); if (pos2 != -1) { cur = m_bz4.Left(pos2); int pos3 = cur.Find(":"); if (pos3 != -1) cur = cur.Right(cur.GetLength() - pos3 - 1); right = m_bz4.Right(m_bz4.GetLength() - pos2 - 2); } } else left = m_bz4; dlg.m_bz2 = cur; dlg.m_bSave = 0; dlg.m_nMode = 2; if (dlg.DoModal() == IDOK) { // m_bz3=dlg.m_bz2 ; dlg.m_bz2.TrimLeft(); dlg.m_bz2.TrimRight(); if (dlg.m_bz2 != "") cur = header + dlg.m_bz2 + " "; else cur = _T(""); m_bz4 = left + cur + right; UpdateData(false); } else { if (cur != "") m_bz4 = left + header + cur + " " + right; else m_bz4 = left + right; } return; } ////////////////////////////////////////////////////////////////////////// // 产品菜单项; POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { return; } CString temp; m_combo1.ResetContent(); int aa = 0; while (pos) { aa++; CStringArray* pArray = NULL; CString path = _T(""); int iItem = m_List1.GetNextSelectedItem(pos); if(m_OpenFolder) pArray = GetCurArray(m_SelectCategory, m_OpenFolder); else { if(iItem >= m_vFolder.size()) iItem = iItem - m_vFolder.size(); else return; pArray = GetCurArray(m_SelectCategory); } if(pArray == NULL) break; path = pArray->ElementAt(iItem); path = path.Right(path.GetLength() - path.ReverseFind('\\') - 1); path = path.Left(path.ReverseFind('.')); #ifdef USE_SEP_VEB path = SEPS_VEB + path + SEPS_VEB; #else path = SEPS_CMA + path + SEPS_CMA; #endif //#ifdef USE_SEP_VEB int idpos = nID - IDM_MENUsp1; BOOL bSel = 0; //选中还是取消; if (idpos < m_noarray.GetSize()) { CString no = m_noarray.ElementAt(idpos); if (no.Find(path) != -1) { int pos = no.Find(path); no.Delete(pos, path.GetLength() - 1); } else if (no.GetLength() > 4000) { AfxMessageBox(_T("编号太长,选择失败!"), MB_ICONSTOP); return; } else { bSel = 1; #ifdef USE_SEP_VEB no.TrimRight(SEPS_VEB); #else no.TrimRight(SEPS_CMA); #endif //#ifdef USE_SEP_VEB no += path; } #ifdef USE_SEP_VEB no.TrimLeft(SEPS_VEB); no.TrimRight(SEPS_VEB); #else no.TrimLeft(SEPS_CMA); no.TrimRight(SEPS_CMA); #endif //#ifdef USE_SEP_VEB m_List2.SetItemText(idpos, 4, no); printf("%s | %s ", path, bSel ? "选中" : "取消选中"); if (no.IsEmpty()) m_noarray.SetAt(idpos, no); else { #ifdef USE_SEP_VEB m_noarray.SetAt(idpos, SEPS_VEB + no + SEPS_VEB); #else m_noarray.SetAt(idpos, SEPS_CMA + no + SEPS_CMA); #endif //#ifdef USE_SEP_VEB } printf("%s %d:%s\n\n", m_List3.GetItemText(idpos, 2), idpos, m_noarray.ElementAt(idpos)); } else { idpos -= m_noarray.GetSize(); CString no = m_no2array.ElementAt(idpos); if (no.Find(path) != -1) { int pos = no.Find(path); no.Delete(pos, path.GetLength() - 1); } else if (no.GetLength() > 4000) { AfxMessageBox(_T("编号太长,选择失败!"), MB_ICONSTOP); return; } else { bSel = 1; #ifdef USE_SEP_VEB no.TrimRight(SEPS_VEB); #else no.TrimRight(SEPS_CMA); #endif //#ifdef USE_SEP_VEB no += path; } #ifdef USE_SEP_VEB no.TrimLeft(SEPS_VEB); no.TrimRight(SEPS_VEB); #else no.TrimLeft(SEPS_CMA); no.TrimRight(SEPS_CMA); #endif //#ifdef USE_SEP_VEB #ifdef LKAY_VERSION m_List3.SetItemText (idpos, 7, no); #else m_List3.SetItemText(idpos, 5, no); #endif //#ifdef LKAY_VERSION printf("%s | %s ", path, bSel ? "选中" : "取消选中"); if (no.IsEmpty()) m_no2array.SetAt(idpos, no); else { #ifdef USE_SEP_VEB m_no2array.SetAt(idpos, SEPS_VEB + no + SEPS_VEB); #else m_no2array.SetAt(idpos, SEPS_CMA + no + SEPS_CMA); #endif //#ifdef USE_SEP_VEB } printf("%s %d:%s\n\n", m_List3.GetItemText(idpos, 2), idpos, m_no2array.ElementAt(idpos)); } m_bModify = 1; if (bSel == 0 && m_SelectCategory == INDX_SEL && IsSelPhoto(path) == 0) {// 取消选中;已选界面; temp.Format("%d", iItem); m_combo1.AddString(temp); continue; } else if (bSel == 1 && m_SelectCategory == INDX_NOSEL) {// 选中;未选界面; temp.Format("%d", iItem); m_combo1.AddString(temp); continue; } else if (bSel == 1 && m_SelectCategory == INDX_DEL) {// 选中;删除界面; temp.Format("%d", iItem); m_combo1.AddString(temp); continue; } else if (bSel == 0 && m_SelectCategory == INDX_INTOALBUM && IsSelAlbumPhoto(path) == 0) {// 取消选中;入册界面; temp.Format("%d", iItem); m_combo1.AddString(temp); continue; } else if (bSel == 0 && m_SelectCategory == INDX_ENTRYPHASSE && IsSelDiskPhoto(path) == 0) {// 取消选中;入底界面; temp.Format("%d", iItem); m_combo1.AddString(temp); continue; } ///////////////////////// CString no; no = pArray->ElementAt(iItem); no = no.Right(no.GetLength() - no.ReverseFind('\\') - 1); no = no.Left(no.ReverseFind('.')); no += GetSelName(no); if(!m_OpenFolder) iItem = iItem + m_vFolder.size(); m_List1.SetItemText(iItem, 0, no); printf("选中项:%d\n", iItem); } // 从m_combo1尾部开始导出; CArrayposarray; for (int i = m_combo1.GetCount() - 1; i >= 0; i--) { m_combo1.GetLBText(i, temp); posarray.Add(atoi(temp)); } SortArray2(posarray); if (posarray.GetSize()) { CStringArray* pArray = NULL; int folderNum = 0; if(m_OpenFolder) { pArray = GetCurArray(m_SelectCategory, m_OpenFolder); } else { folderNum = m_vFolder.size(); pArray = GetCurArray(m_SelectCategory); } if (m_SelectCategory == INDX_SEL) {// 当前界面:已选; CStringArray* pNolSelArray = NULL; if(m_OpenFolder) pNolSelArray = GetCurArray(INDX_NOSEL, m_OpenFolder); else pNolSelArray = GetCurArray(INDX_NOSEL); for (int i = 0; i < posarray.GetSize(); i++) { // 从已选中移除取消选中的项; if ( m_List1.GetItemCount() <= posarray.ElementAt(i) + folderNum) printf("\t当前界面m_List1.GetItemCount个数少于选中个数,严重错误[越界]\n"); printf("\t当前要删除的Item索引=%d\n", posarray.ElementAt(i) + folderNum); m_List1.DeleteItem(posarray.ElementAt(i) + folderNum); // 将取消选中的项添加到未选中; pNolSelArray->Add(pArray->ElementAt(posarray.ElementAt(i) - folderNum)); // 移除取消选中的项; if ( pArray->GetSize() <= posarray.ElementAt(i) - folderNum) printf("\t当前界面pArray.GetSize个数少于选中个数,严重错误[越界]\n"); pArray->RemoveAt(posarray.ElementAt(i) - folderNum); // 多选的状态下,如果不是从尾部开始RemoveAt可能会产生错误; } if (m_showpichwd) ::SendMessage(m_showpichwd, WM_CLOSE, 0, 0); } else if (m_SelectCategory == INDX_NOSEL) {// 当前界面:未选; for (int i = 0; i < posarray.GetSize(); i++) { // 从已选中移除取消选中的项; if ( m_List1.GetItemCount() <= posarray.ElementAt(i) + folderNum) printf("\t当前界面m_List1.GetItemCount个数少于选中个数,严重错误[越界]\n"); printf("\t当前要删除的Item索引=%d\n", posarray.ElementAt(i) + folderNum); m_List1.DeleteItem(posarray.ElementAt(i) + folderNum); if ( pArray->GetSize() <= posarray.ElementAt(i) - folderNum) printf("\t当前界面pArray.GetSize个数少于选中个数,严重错误[越界]\n"); pArray->RemoveAt(posarray.ElementAt(i) - folderNum); } if (m_showpichwd) ::SendMessage(m_showpichwd, WM_CLOSE, 0, 0); } else if (m_SelectCategory == INDX_DEL) {// 当前界面:删除; CString strDelNo = _T(""); CStringArray* pAllArray = NULL; if(m_OpenFolder) pAllArray = GetCurArray(INDX_ALL, m_OpenFolder); else pAllArray = GetCurArray(INDX_ALL); for (int i = 0; i < posarray.GetSize(); i++) { if ( m_List1.GetItemCount() <= posarray.ElementAt(i) + folderNum) printf("\t当前界面m_List1.GetItemCount个数少于选中个数,严重错误[越界]\n"); printf("\t当前要删除的Item索引=%d\n", posarray.ElementAt(i) + folderNum); // 获取要被删除的相片编号; strDelNo = SEPS_VEB + m_List1.GetItemText(posarray.ElementAt(i) + folderNum,0) + SEPS_VEB; if ( m_delphotos.Find(strDelNo) != -1 ) { int nDelPos = m_delphotos.Find(strDelNo); m_delphotos.Delete(nDelPos, strDelNo.GetLength() - 1); printf("\t当前删除的相片编号:[%s] \n\t剩余删除列表:%s\n", strDelNo, m_delphotos); } else { printf("错误:要删除的相片编号[%s]未在删除列表中[%s]\n", strDelNo, m_delphotos); } m_List1.DeleteItem(posarray.ElementAt(i) + folderNum); pAllArray->Add(pArray->ElementAt(posarray.ElementAt(i))); if ( pArray->GetSize() <= posarray.ElementAt(i) - folderNum) printf("\t当前界面pArray.GetSize个数少于选中个数,严重错误[越界]\n"); pArray->RemoveAt(posarray.ElementAt(i)); } if (m_showpichwd) ::SendMessage(m_showpichwd, WM_CLOSE, 0, 0); } else if (m_SelectCategory == INDX_INTOALBUM) {// 当前界面:入册; for (int i = 0; i < posarray.GetSize(); i++) { if ( m_List1.GetItemCount() <= posarray.ElementAt(i) + folderNum) printf("\t当前界面m_List1.GetItemCount个数少于选中个数,严重错误[越界]\n"); printf("\t当前要删除的Item索引=%d\n", posarray.ElementAt(i) + folderNum); m_List1.DeleteItem(posarray.ElementAt(i) + folderNum); if ( pArray->GetSize() <= posarray.ElementAt(i) - folderNum) printf("\t当前界面pArray.GetSize个数少于选中个数,严重错误[越界]\n"); pArray->RemoveAt(posarray.ElementAt(i) - folderNum); } if (m_showpichwd) ::SendMessage(m_showpichwd, WM_CLOSE, 0, 0); } else if (m_SelectCategory == INDX_ENTRYPHASSE) {// 当前界面:入底; for (int i = 0; i < posarray.GetSize(); i++) { if ( m_List1.GetItemCount() <= posarray.ElementAt(i) + folderNum) printf("\t当前界面m_List1.GetItemCount个数少于选中个数,严重错误[越界]\n"); printf("\t当前要删除的Item索引=%d\n", posarray.ElementAt(i) + folderNum); m_List1.DeleteItem(posarray.ElementAt(i) + folderNum); if ( pArray->GetSize() <= posarray.ElementAt(i) - folderNum) printf("\t当前界面pArray.GetSize个数少于选中个数,严重错误[越界]\n"); pArray->RemoveAt(posarray.ElementAt(i) - folderNum); } if (m_showpichwd) ::SendMessage(m_showpichwd, WM_CLOSE, 0, 0); } } CString strFile = m_strOrderNumber + _T(".dat"); Save(g_mainpath, strFile); DrawInterface(); if (m_showpichwd) ::SendMessage(m_showpichwd, WM_USER + 200, 0, 0); } VOID ChoosePhotoSkin2::OnNewFolder() { //新建文件夹 CNewFolderDlg dlg; dlg.m_pVFolder = &m_vFolder; if(dlg.DoModal() != IDOK) return ; m_bModify = 1; AddFolder(dlg.m_strFolderName); LoadPhotos(); return ; } VOID ChoosePhotoSkin2::OnDelFolder() { if(AfxMessageBox(_T("是否删除选中的文件夹!"), MB_YESNO | MB_ICONINFORMATION) == IDNO) return ; //删除文件夹 if(m_pCurrSelFolder) { //相片由子移到主 MoveFileSubToMain(m_pCurrSelFolder); DelFolderFromName(m_pCurrSelFolder->strName); m_pCurrSelFolder = NULL; LoadPhotos(); } return; } VOID ChoosePhotoSkin2::OnOpenFolder() { printf("IDM_OPENFOLDER\n"); //打开文件夹 m_OpenFolder = m_pCurrSelFolder; if(m_SelectCategory == INDX_INTOALBUM) GetAlbumPhoto(); else if(m_SelectCategory == INDX_ENTRYPHASSE) GetDiskPhoto(); LoadPhotos(); } VOID ChoosePhotoSkin2::OnReturnMainDir() { //返回上层 m_pCurrSelFolder = m_OpenFolder = NULL; if (m_SelectCategory == INDX_SEL) UpdateChooseZS(); else if(m_SelectCategory == INDX_NOSEL) { m_sChooseFilter = _T(""); UpdateChooseZS(); GetNoSelPhoto(); } LoadPhotos(); } long ChoosePhotoSkin2::UpdateTakeZS(WPARAM inWParam, LPARAM inLParam) { if (m_SelectCategory == INDX_ALL && m_List1.GetItemCount() > atoi(m_takezs)) { UpdateData(); m_takezs.Format("%d", m_List1.GetItemCount()); UpdateData(false); } //绘制 DrawInterface(); return 1; } /************************************************************************/ /* 函数: UpdateChooseZS 描述: 更新选中相片 参数: 返回: 注意: */ /************************************************************************/ void ChoosePhotoSkin2::UpdateChooseZS() { int i = 0; CString str = _T(""); CStringArray* pSelArr = NULL; CStringArray* pAllArr = NULL; if(m_OpenFolder) pSelArr = GetCurArray(INDX_SEL, m_OpenFolder); else pSelArr = GetCurArray(INDX_SEL); if(m_OpenFolder) pAllArr = GetCurArray(INDX_ALL, m_OpenFolder); else pAllArr = GetCurArray(INDX_ALL); pSelArr->RemoveAll(); if (m_sChooseFilter != _T("") && m_sChooseFilter != _T("全部")) { for ( i = 0; i < m_List3.GetItemCount(); i++) { if (m_List3.GetItemText(i, 2) != m_sChooseFilter) continue; str = m_no2array.ElementAt(i); GetPathAddToSel(pSelArr, str, pAllArr); } return; } for ( i = 0; i < m_noarray.GetSize(); i++) { str = m_noarray.ElementAt(i); GetPathAddToSel(pSelArr, str, pAllArr); } for (i = 0; i < m_no2array.GetSize(); i++) { str = m_no2array.ElementAt(i); GetPathAddToSel(pSelArr, str, pAllArr); } } // 保存按钮; void ChoosePhotoSkin2::OnButton4()// 保存按钮; { UpdateData(); if (m_SelectCategory != INDX_SEL) CalChooseZS(&m_SelPhotoPath, &m_AllPhotoPath); CString zs = m_taoxizs; int pos = zs.Find("\\"); if (pos != -1) zs = zs.Left(pos); CStringArray* parr = NULL; CStringArray* pAllArr = NULL; int nSelCount = 0; vector::iterator iter = m_vFolder.begin(); while(iter != m_vFolder.end()) { SFolderInfo* p = (*iter); if(p != NULL) { pAllArr = GetCurArray(INDX_ALL, p); parr = GetCurArray(INDX_SEL, p); CalChooseZS(parr, pAllArr); nSelCount += parr->GetSize(); } ++iter; } nSelCount += m_SelPhotoPath.GetSize(); m_choosezs.Format("%d", max(0, nSelCount - atoi(zs))); m_bSaveFail = 0; ChoosePhotoSkin3 dlg; dlg.m_strStatusOfChoosePhoto = m_strStatusOfChoosePhoto; // Jeff 传选片状态; dlg.m_pParent = this; dlg.DoModal(); if (dlg.m_bSave) m_bModify = 0; if (dlg.m_bPushedSave == 0 && dlg.m_bSaveFail == 0) { CString savepath = _T(""); savepath.Format("%s\\%s.dat", g_mainpath, m_strOrderNumber); ::DeleteFile(savepath); // 删除*.dat文件; } m_bSaveFail = dlg.m_bSaveFail; if (dlg.m_bExit) { m_bModify = 0; CDialog::OnCancel(); } } // 删除相片; BOOL ChoosePhotoSkin2::OnDel() // 删除相片; { // printf("Jeff:m_mode=%d,m_mode2=%d.\n\n",m_mode,m_mode2);//Jeff Printf if (m_SelectCategory == INDX_SEL) {// 当前界面:选中界面; AfxMessageBox(_T("选中照片不能删除, 请先取消选中状态!"), MB_ICONINFORMATION); return 0; } else if (m_SelectCategory == INDX_DEL) {// 当前界面:删除; return 0; } POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) return 0; if (m_bRunning) return 0; CStringArray* pArray = NULL; CString strDelPhotoName = _T(""); CString strSelPhotoPath = _T(""); int nFolderNum = m_vFolder.size(); int iItem = m_List1.GetNextSelectedItem(pos); int nItemIdx = iItem; //选片模式; if(m_OpenFolder == NULL) { pArray = GetCurArray(m_SelectCategory); if(nItemIdx < m_vFolder.size()) { //删除选取文件夹; if(AfxMessageBox(_T("是否删除选中的文件夹!"), MB_YESNO | MB_ICONINFORMATION) == IDNO) return 0; m_pCurrSelFolder = FindForderFromIndx(iItem); if(m_pCurrSelFolder) { m_bModify = 1; //相片由子移到主; MoveFileSubToMain(m_pCurrSelFolder); DelFolderFromName(m_pCurrSelFolder->strName); m_pCurrSelFolder = NULL; LoadPhotos(); } return 0; } else nItemIdx = nItemIdx - m_vFolder.size(); } else pArray = GetCurArray(INDX_ALL, m_OpenFolder); strSelPhotoPath = pArray->ElementAt(nItemIdx); strDelPhotoName = strSelPhotoPath; if(strDelPhotoName == _T("") || pArray == NULL) return 0; strDelPhotoName = strDelPhotoName.Right(strDelPhotoName.GetLength() - strDelPhotoName.ReverseFind('\\') - 1); strDelPhotoName = strDelPhotoName.Left(strDelPhotoName.Find('.')); if (IsSelPhoto(SEPS_VEB + strDelPhotoName + SEPS_VEB)) { AfxMessageBox(_T("选中的照片不能删除, 请先取消选中状态!"), MB_ICONINFORMATION); return 0; } if (AfxMessageBox(_T("是否删除此照片?"), MB_YESNO | MB_ICONINFORMATION) != IDYES) return 0; printf("\t要删除的相片编号:%s\n", strDelPhotoName); // 将要删除的相片添加到删除数组里; #if JEFF_TEST_ON if(PathFileExists(strSelPhotoPath)) m_DelPhotoPath.Add(strSelPhotoPath); #else m_DelPhotoPath.Add(strSelPhotoPath); #endif //#if JEFF_TEST_ON if ( m_delphotos.Find(SEPS_VEB + strDelPhotoName + SEPS_VEB) != -1) { printf("\t错误,相片编号:%s 已在删除列表中\n", strDelPhotoName); } else {// 将要删除的相片编号添加进去; m_delphotos.TrimRight(SEPS_VEB); m_delphotos += SEPS_VEB + strDelPhotoName + SEPS_VEB; } for(int i = 0; i < pArray->GetSize(); i++) { //字符串比较相同=0; if(strSelPhotoPath.CollateNoCase(pArray->ElementAt(i)) == 0) { pArray->RemoveAt(i); m_List1.DeleteItem(iItem); break; } } if(m_SelectCategory == INDX_NOSEL) DelPhotoFromName(m_AllPhotoPath, strDelPhotoName); m_bModify = 1; //设置默认选项; if(iItem >= pArray->GetSize()) iItem = 0; m_List1.SetItemState(iItem, LVIS_SELECTED, LVIS_SELECTED); return 1; } void ChoosePhotoSkin2::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; } void ChoosePhotoSkin2::OnTimer(UINT nIDEvent) { if (nIDEvent == 1) { KillTimer(nIDEvent); if (m_showpichwd) ::SendMessage(m_showpichwd, WM_USER + 200, 1, 0); TimeOutDlg dlg; dlg.m_ticks = m_ticks; dlg.DoModal(); SetTimer(2, m_timer * 60000, NULL); } else if (nIDEvent == 2) // 定时器触发超时密码对话框; { KillTimer(nIDEvent); if (m_showpichwd) ::SendMessage(m_showpichwd, WM_USER + 200, 1, 0); TimeOutDlg dlg; dlg.m_ticks = m_ticks; dlg.DoModal(); SetTimer(2, m_timer * 60000, NULL); } else if (nIDEvent == 3) { KillTimer(nIDEvent); //SetSPName3(); } } /************************************************************************/ /* 函数: LoadPhotos 描述: 加载图片 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::LoadPhotos() { TerminateThread(); //清除资源的路径; ClearResData(); DWORD tm1(0), tm2(0); tm1 = GetTickCount(); //选片; CStringArray *pArray = NULL; if(!m_OpenFolder) {//在主目录; //添加文件夹名; vector::iterator iter = m_vFolder.begin(); for(;iter != m_vFolder.end();) { SFolderInfo* p = (*iter); if(p != NULL) { SResData* pRes = new SResData(); pRes->nType = (int)TYPE_FOLDER; //转为小写; p->strName.MakeLower(); pRes->strName = p->strName; m_vResData.push_back(pRes); } ++iter; } pArray = GetCurArray(m_SelectCategory); } else pArray = GetCurArray(m_SelectCategory, m_OpenFolder); if(pArray == NULL) return; for (int i = 0; i < pArray->GetSize(); i++) { CString filePath = pArray->ElementAt(i); if(filePath == _T("")) continue; SResData* pRes = new SResData(); pRes->nType = (int)TYPE_ICON; //转为小写; filePath.MakeLower(); pRes->strFilePath = filePath; m_vResData.push_back(pRes); } tm2 = GetTickCount(); printf(_T("绘制图片的准备时间:%dms\n"), (tm2-tm1)); //创建绘画线程LoadThumbNail3; LoadThumbImages(); } /************************************************************************/ /* 函数: GetNoSelPhoto 描述: 未选中的相片 参数: 返回: 注意: */ /************************************************************************/ void ChoosePhotoSkin2::GetNoSelPhoto() { CStringArray* pNoSelArr = NULL; CStringArray* pAllArr = NULL; CStringArray* pSelArr = NULL; if(m_OpenFolder) { pNoSelArr = GetCurArray(INDX_NOSEL, m_OpenFolder); pAllArr = GetCurArray(INDX_ALL, m_OpenFolder); pSelArr = GetCurArray(INDX_SEL, m_OpenFolder); } else { pNoSelArr = GetCurArray(INDX_NOSEL); pAllArr = GetCurArray(INDX_ALL); pSelArr = GetCurArray(INDX_SEL); } if(pNoSelArr == NULL || pAllArr == NULL || pSelArr == NULL) return; pNoSelArr->RemoveAll(); CString str1(_T("")), str2(_T("")); for (int i = 0; i < pAllArr->GetSize(); i++) { BOOL bFind = 0; for (int j = 0; j < pSelArr->GetSize(); j++) { str1 = pAllArr->ElementAt(i); str2 = pSelArr->ElementAt(j); if (str1.CollateNoCase(str2) == 0) { bFind = 1; break; } } if (bFind == 0) pNoSelArr->Add(pAllArr->ElementAt(i)); } } /************************************************************************/ /* 函数: OnSelPhoto 描述: 查看选中相片 参数: 返回: 注意: */ /************************************************************************/ void ChoosePhotoSkin2::OnSelPhoto() { ProductChooseFilter dlg; CString name = _T(""); int i = 0; for ( i = 0; i < m_List2.GetItemCount(); i++) { name = m_List2.GetItemText(i, 2); dlg.m_array.Add(name); } for (i = 0; i < m_List3.GetItemCount(); i++) { name = m_List3.GetItemText(i, 2); dlg.m_array.Add(name); } if(dlg.DoModal() == IDCANCEL) { m_SelectCategory = INDX_ALL; return; } m_sChooseFilter = dlg.m_sChooseFilter; UpdateChooseZS(); } /************************************************************************/ /* 函数: GetCurArray 描述: 获取要查看的数据 参数: const int nIndx 选中数据索引 SFolderInfo* m_pForder 文件夹 返回: 注意: */ /************************************************************************/ CStringArray* ChoosePhotoSkin2::GetCurArray(const int nIndx, SFolderInfo* m_pForder/* = NULL*/) { CStringArray* pArray = NULL; if(m_pForder) { switch (nIndx) { case INDX_ALL: //全部; pArray = &m_pForder->AllPhotoPath; break; case INDX_SEL: //选中; pArray = &m_pForder->SelPhotoPath; break; case INDX_NOSEL: //未选; pArray = &m_pForder->NoSelPhotoPath; break; case INDX_DEL: //删除; pArray = &m_pForder->DelPhotoPath; break; case INDX_INTOALBUM: //入册; pArray = &m_pForder->IntoAlbumPath; break; case INDX_ENTRYPHASSE: //入底; pArray = &m_pForder->EntryPhasepath; break; } return pArray; } switch (nIndx) { case INDX_ALL: //全部; pArray = &m_AllPhotoPath; break; case INDX_SEL: //选中; pArray = &m_SelPhotoPath; break; case INDX_NOSEL: //未选; pArray = &m_NoSelPhotoPath; break; case INDX_DEL: //删除; pArray = &m_DelPhotoPath; break; case INDX_INTOALBUM: //入册; pArray = &m_IntoAlbumPath; break; case INDX_ENTRYPHASSE: //入底; pArray = &m_EntryPhasepath; break; } return pArray; } // path如:"|004|" BOOL ChoosePhotoSkin2::IsSelAlbumPhoto(CString path) { CString photosno; for (int i = 0; i < m_List3.GetItemCount(); i++) { if (m_List3.GetItemText(i, 2) != _T("入册")) continue; photosno = m_no2array.ElementAt(i); break; } if (photosno.Find(path) != -1) { return 1; } return 0; } // path 如:"|004|" BOOL ChoosePhotoSkin2::IsSelDiskPhoto(CString path) { CString photosno; for (int i = 0; i < m_List3.GetItemCount(); i++) { if (m_List3.GetItemText(i, 2) != _T("入底")) continue; photosno = m_no2array.ElementAt(i); break; } if (photosno.Find(path) != -1) { return 1; } return 0; } /************************************************************************/ /* 函数: SortArray 描述: 按F4乱序或排序 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::SortArray() { int i = 0; int j = 0; m_bSort = !m_bSort; CStringArray *pArray[6] = { &m_AllPhotoPath, &m_SelPhotoPath, &m_NoSelPhotoPath, &m_DelPhotoPath, &m_IntoAlbumPath, &m_EntryPhasepath }; if (m_bSort == 0) { for ( i = 0; i < 6; i++) { if (pArray[i]->GetSize()) { int size = pArray[i]->GetSize() - 1; CString sTemp; int nPos; for (int ii = 0; ii < size; ii++) { nPos = rand() % (size - ii); sTemp = pArray[i]->ElementAt(size - ii); pArray[i]->SetAt(size - ii, pArray[i]->ElementAt(nPos)); pArray[i]->SetAt(nPos, sTemp); } } } } else { // 使用CCombobox的Sort来排序; for ( i = 0; i < 6; i++) { m_combo1.ResetContent(); CString Temp; for ( j = 0; j < pArray[i]->GetSize(); j++) { m_combo1.AddString(pArray[i]->ElementAt(j)); } for (j = 0; j < pArray[i]->GetSize(); j++) { m_combo1.GetLBText(j, Temp); pArray[i]->SetAt(j, Temp); } } } //终止线程; TerminateThread(); //清除资源的路径; ClearResData(); CStringArray *pArr = NULL; //选片; if(!m_OpenFolder) {//在主目录; //添加文件夹名; vector::iterator iter = m_vFolder.begin(); for(;iter != m_vFolder.end();) { SFolderInfo* p = (*iter); if(p != NULL) { SResData* pRes = new SResData(); pRes->nType = (int)TYPE_FOLDER; //转为小写; p->strName.MakeLower(); pRes->strName = p->strName; m_vResData.push_back(pRes); } ++iter; } pArr = GetCurArray(m_SelectCategory); } else pArr = GetCurArray(INDX_ALL, m_OpenFolder); if(pArr == NULL) return; for ( i = 0; i < pArr->GetSize(); i++) { SResData* pRes = new SResData(); pRes->nType = (int)TYPE_ICON; CString filePath = pArr->ElementAt(i); //转为小写; filePath.MakeLower(); pRes->strFilePath = filePath; m_vResData.push_back(pRes); } //创建绘画线程LoadThumbNail3; LoadThumbImages(); } /************************************************************************/ /* 函数: CheckForDisk 描述: 检查入底 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::CheckForDisk() { int i = 0; for ( i = 0; i < m_List2.GetItemCount(); i++) { if (_T("入底") == m_List2.GetItemText(i, 2)) return; } for (i = 0; i < m_List3.GetItemCount(); i++) { if (_T("入底") == m_List3.GetItemText(i, 2)) return; } i = m_List3.GetItemCount(); m_List3.InsertItem(i, _T("")); m_List3.SetItemText(i, 2, _T("入底")); m_no2array.Add(_T("")); } /************************************************************************/ /* 函数: CheckForAlbum 描述: 检查入册 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::CheckForAlbum() { int i = 0; for (i = 0; i < m_List2.GetItemCount(); i++) { if (_T("入册") == m_List2.GetItemText(i, 2)) return; } for (i = 0; i < m_List3.GetItemCount(); i++) { if (_T("入册") == m_List3.GetItemText(i, 2)) return; } i = m_List3.GetItemCount(); m_List3.InsertItem(i, _T("")); m_List3.SetItemText(i, 2, _T("入册")); m_no2array.Add(_T("")); } /*------------------------------------------------------- 函数名: DrawInterface 描述: 绘制界面 参数: 返回值: -------------------------------------------------------*/ void ChoosePhotoSkin2::DrawInterface() { CRect rc(0, 0, 0, 0), rt(0, 0, 0, 0); ((MyBmpButton2*)m_picarray.ElementAt(3))->GetWindowRect(rc); ScreenToClient(rc); int nH = rc.bottom - rc.top; rc.right -= (rc.left + 100); rc.left = 5; rc.top += 10; rc.right += 220; rc.bottom = rc.top + nH - 10; rt.CopyRect(&rc); CDC *pDC = GetDC(); Graphics graph(pDC->GetSafeHdc()); Rect destinationRect(rc.left, rc.top, rc.Width(), rc.Height()); RectF layoutRect(rc.left, rc.top, rc.Width(), rc.Height()); rc.left /= g_fscalex; rc.right /= g_fscalex; rc.top /= g_fscaley; rc.bottom /= g_fscaley; // graph.SetSmoothingMode(SmoothingModeHighQuality); graph.DrawImage(m_pBk, destinationRect, rc.left, rc.top, rc.Width(), rc.Height(), UnitPixel); StringFormat format; format.SetAlignment(StringAlignmentNear); SolidBrush *Brush = new SolidBrush(Color(255, 255, 255, 255)); //显示张数 CString str = _T(""); if(m_OpenFolder == NULL && m_List1.GetItemCount() >= m_vFolder.size()) str.Format(_T("张数:%d"), m_List1.GetItemCount() - m_vFolder.size()); else str.Format(_T("张数:%d"), m_List1.GetItemCount()); //显示文件夹名 str += _T(" 主目录"); if(m_OpenFolder) str += _T(">") + m_OpenFolder->strName; int leng = GetLengthEx(str); BSTR bstr = str.AllocSysString(); Gdiplus::Font* pFont = new Gdiplus::Font(L"黑体", 11); graph.SetTextRenderingHint(TextRenderingHintAntiAlias); graph.DrawString( bstr, leng, pFont, layoutRect, &format, Brush); SysFreeString(bstr); delete Brush; delete pFont; ReleaseDC(pDC); } CString ChoosePhotoSkin2::GetZSInfo(int iItem) { if (m_SelectCategory != INDX_SEL) CalChooseZS(GetCurArray(INDX_SEL), GetCurArray(INDX_ALL)); CString str = _T(""); CString scount = m_List1.GetItemText(iItem, 0); int ncount = 0; int npos = scount.Find(_T("\r\n")); while (npos != -1) { ncount++; scount = scount.Right(scount.GetLength() - npos - 2); npos = scount.Find(_T("\r\n")); } CString zs = m_taoxizs; int pos = zs.Find("\\"); if (pos != -1) zs = zs.Left(pos); CStringArray* pSelPhotoPath = GetCurArray(INDX_SEL); CStringArray* pAllPhotoPath = GetCurArray(INDX_ALL); int nNoSelCount = GetNoSelPhotoCount(pAllPhotoPath, pSelPhotoPath); int nSelCount = pSelPhotoPath->GetSize(); str.Format(_T("选中次数:%d 已选/应选:%d/%d\r\n加选:%d+ 未选/剩余:%d/%d"), ncount, nSelCount, atoi(zs), max(0, nSelCount - atoi(zs)), max(0, atoi(zs) - nSelCount), nNoSelCount); return str; } /************************************************************************/ /* 函数: GetPathAddToSel 描述: 获取路径添加到选中相片 参数: strName:dindansp表中no或no2字段值;相片名间使用逗号分隔; 返回: 1成功,0失败 */ /************************************************************************/ int ChoosePhotoSkin2::GetPathAddToSel(const CString& strName) { if(strName == _T("")) return 0; CStringArray* pSelArr = NULL; CStringArray* pAllArr = NULL; if(m_OpenFolder != NULL) { pSelArr = GetCurArray(INDX_SEL, m_OpenFolder); pAllArr = GetCurArray(INDX_ALL, m_OpenFolder); } else { pSelArr = GetCurArray(INDX_SEL); pAllArr = GetCurArray(INDX_ALL); } GetPathAddToSel(pSelArr, strName, pAllArr); return 1; } /************************************************************************/ /* 函数: GetPathAddToSel 描述: 获取路径添加到选中相片 参数: CStringArray* pSelArr const CString& str 返回: 1成功,0失败 */ /************************************************************************/ int ChoosePhotoSkin2::GetPathAddToSel(CStringArray* pSelArr, const CString& strName, CStringArray* pAllArr) { return ChoosePhotoBase::GetPathAddToSel(pSelArr, strName, pAllArr); } /************************************************************************/ /* 函数: GetAlbumPhoto 描述: 查看入册相片 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetAlbumPhoto() { if (m_SelectCategory == INDX_INTOALBUM && !m_OpenFolder) return; m_SelectCategory = INDX_INTOALBUM; CStringArray* pArr = NULL; if(m_OpenFolder) pArr = GetCurArray(m_SelectCategory, m_OpenFolder); else pArr = GetCurArray(m_SelectCategory); pArr->RemoveAll(); CString photosName = _T(""); int i = 0; for (i= 0; i < m_List3.GetItemCount(); i++) { if (m_List3.GetItemText(i, 2) != _T("入册")) continue; photosName = m_no2array.ElementAt(i); break; } CStringArray* pAllArry = NULL; if(m_OpenFolder != NULL) pAllArry = GetCurArray(INDX_ALL, m_OpenFolder); else pAllArry = GetCurArray(INDX_ALL); //将入册的相片名 #ifdef USE_SEP_VEB photosName = SEPS_VEB + photosName + SEPS_VEB; #else photosName = SEPS_CMA + photosName + SEPS_CMA; #endif //#ifdef USE_SEP_VEB for (i = pAllArry->GetSize() - 1; i >= 0; i--) { CString strName = _T(""); strName = pAllArry->ElementAt(i); strName = strName.Right(strName.GetLength() - strName.ReverseFind('\\') - 1); strName = strName.Left(strName.Find('.')); #ifdef USE_SEP_VEB strName = SEPS_VEB + strName + SEPS_VEB; #else strName = SEPS_CMA + strName + SEPS_CMA; #endif //#ifdef USE_SEP_VEB if (photosName.Find(strName) != -1) { strName = pAllArry->ElementAt(i); pArr->Add(strName); } } } /************************************************************************/ /* 函数: GetDiskPhoto 描述: 查看入底相片 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetDiskPhoto() { if (m_SelectCategory == INDX_ENTRYPHASSE && !m_OpenFolder) return; m_SelectCategory = INDX_ENTRYPHASSE; CStringArray* pArr = NULL; if(m_OpenFolder) pArr = GetCurArray(m_SelectCategory, m_OpenFolder); else pArr = GetCurArray(m_SelectCategory); int i = 0; pArr->RemoveAll(); CString photosName = _T(""); for ( i = 0; i < m_List3.GetItemCount(); i++) { if (m_List3.GetItemText(i, 2) != _T("入底")) continue; photosName = m_no2array.ElementAt(i); break; } CStringArray* pAllArry = NULL; if(m_OpenFolder != NULL) pAllArry = GetCurArray(INDX_ALL, m_OpenFolder); else pAllArry = GetCurArray(INDX_ALL); #ifdef USE_SEP_VEB photosName = SEPS_VEB + photosName + SEPS_VEB; #else photosName = SEPS_CMA + photosName + SEPS_CMA; #endif //#ifdef USE_SEP_VEB for (i = pAllArry->GetSize() - 1; i >= 0; i--) { CString strName = _T(""); strName = pAllArry->ElementAt(i); strName = strName.Right(strName.GetLength() - strName.ReverseFind('\\') - 1); strName = strName.Left(strName.Find('.')); #ifdef USE_SEP_VEB strName = SEPS_VEB + strName + SEPS_VEB; #else strName = SEPS_CMA + strName + SEPS_CMA; #endif //#ifdef USE_SEP_VEB if (photosName.Find(strName) != -1) { strName = pAllArry->ElementAt(i); pArr->Add(strName); } } } /************************************************************************/ /* 函数名: ReLoad 描述: 重新加载数据 参数: 返回值: */ /************************************************************************/ BOOL ChoosePhotoSkin2::ReLoad() { return GetData(); } /************************************************************************/ /* 函数: DrawImageWork 描述: 绘制工作 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::DrawImageWork() { CListCtrl* ListCtrl = &m_List1; CImageList* pImgList = &m_ImageListThumb; try { // reset our image list for (int i = 0; i < pImgList->GetImageCount(); i++) pImgList->Remove(i); // remove all items from list view ListCtrl->DeleteAllItems(); pImgList->SetImageCount(m_vResData.size()); // Set redraw to FALSE to avoid flickering during adding new items ListCtrl->SetRedraw(FALSE); //添加列表项名; AddListItemName(ListCtrl); //设置重绘并刷新; ListCtrl->SetRedraw(TRUE); ListCtrl->Invalidate(); //绘制图标; DrawImage(ListCtrl, pImgList); m_bRunning = false; m_bTerminate = false; PostMessage(WM_USER + 200, 0, 0); return; } catch (...) { ListCtrl->Invalidate(); m_bRunning = false; m_bTerminate = false; PostMessage(WM_USER + 200, 0, 0); } } /************************************************************************/ /* 函数: AddListItemName 描述: 添加列表项名 参数: 返回: 1成功,0失败 */ /************************************************************************/ int ChoosePhotoSkin2::AddListItemName(CListCtrl* pListCtrl) { if(pListCtrl == NULL) return 0; int nIndex = 0; CString str(_T("")), spath(_T("")); //添加文件名; vector::iterator iter; for(iter = m_vResData.begin(); iter != m_vResData.end() && m_bTerminate != true; iter++, nIndex++) { SResData* pRes = (*iter); if(pRes == NULL) continue; switch(pRes->nType) { case TYPE_ICON: //相片图标; { str = pRes->strFilePath; str = str.Right(str.GetLength() - str.ReverseFind('\\') - 1); str = str.Left(str.Find('.')); //获取商品名如:004\r\n入册\r\n入底; str += GetSelName(str); } break; case TYPE_FOLDER: //文件夹; str = pRes->strName; break; } pListCtrl->InsertItem(nIndex, str, nIndex); } return 1; } /************************************************************************/ /* 函数: DrawImage 描述: 绘制 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::DrawImage(CListCtrl* pListCtrl, CImageList* pImgList) { if(pListCtrl == NULL) return; int nIndex = 0; Image* pHideImg = NULL; //相片图标; Image* pFolderImg = NULL; //文件夹; CString str(_T("")), spath(_T("")); vector::iterator iter; for (iter = m_vResData.begin(); iter != m_vResData.end() && m_bTerminate != true; iter++, nIndex++) { // Load Image File Image *image = NULL; Bitmap *pBmp = NULL; SResData* pRes = (*iter); if(pRes == NULL) continue; BOOL bNullimg = FALSE; //加载相片图标res\未标题-1.jpg; switch(pRes->nType) { case TYPE_ICON: //相片图标; { if(m_bHide && pHideImg == NULL) pHideImg = m_pHideImg; //是否要重新加载资源; if(pHideImg == NULL) { ReLoadImageFromRes(&image, pRes->strFilePath, bNullimg); if(image == NULL) continue; } else image = pHideImg; } break; case TYPE_FOLDER: //文件夹; { if(pFolderImg == NULL) pFolderImg = m_pFolderImg; if(pFolderImg) image = pFolderImg; } break; } //创建bitmap使用颜色填充区域; SolidBrush whitebrush(Color(255, 255, 255, 255)); pBmp = new Bitmap(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, PixelFormat24bppRGB); Graphics graph2(pBmp); graph2.Clear(Color(255, 192, 192, 192)); graph2.FillRectangle(&whitebrush, 1, 1, THUMBNAIL_WIDTH - 2, THUMBNAIL_HEIGHT - 2); // 缩放图片符合画布大小; Rect desRect(0, 0, 0, 0); ZoomImage(image, desRect); // 绘制图标res\未标题-1.jpg; Graphics graph(pBmp); graph.DrawImage(image, desRect, 0, 0, image->GetWidth(), image->GetHeight(), UnitPixel); // 将图片替换bitmap添加到图标列表; CBitmap bitmap; HBITMAP hbmp; pBmp->GetHBITMAP(Color(255, 255, 255, 255), &hbmp); bitmap.Attach(hbmp); pImgList->Replace(nIndex, &bitmap, NULL); if(pBmp) delete pBmp; // Redraw only a current item for removing flickering and fast speed. pListCtrl->RedrawItems(nIndex, nIndex); // Release used DC and Object if(image && pRes->nType == TYPE_ICON && pHideImg == NULL) delete image; } pListCtrl->Invalidate(); } /************************************************************************/ /* 函数: FindForderFromIndx 描述: 通过索引查找文件夹 参数: const int nIdx 返回: SFolderInfo* */ /************************************************************************/ SFolderInfo* ChoosePhotoSkin2::FindForderFromIndx(const int nIdx) { if(nIdx < 0 || nIdx >= m_vFolder.size()) return NULL; return m_vFolder[nIdx]; } /************************************************************************/ /* 函数: MoveFileMainToSub 描述: 移动文件主目录到子目录 参数: vector& vMoveFile, //选择的文件 SFolderInfo* pCurrSelForder, //当前选择的文件夹 const int nCurrSelIndx //当前选择的数据索引 返回: 1成功, 0失败 */ /************************************************************************/ int ChoosePhotoSkin2::MoveFileMainToSub(vector& vMoveFile, SFolderInfo* pCurrSelForder, const int nCurrSelIndx) { if(pCurrSelForder == NULL || nCurrSelIndx < 0 || vMoveFile.size() == 0) return 0; CStringArray* pArr = GetCurArray(nCurrSelIndx, pCurrSelForder); if(pArr == NULL) return 0; // 将主目录里手选的文件添加到子目录里; int nSize = vMoveFile.size(); vector::iterator iter = vMoveFile.begin(); for(;iter != vMoveFile.end();) { if((*iter) != _T("")) pArr->Add((*iter)); ++iter; } return 1; } /************************************************************************/ /* 函数: MoveFileSubToMain 描述: 移动文件子目录到主目录 参数: SFolderInfo* pCurrForder 返回: 1成功, 0失败 */ /************************************************************************/ int ChoosePhotoSkin2::MoveFileSubToMain(SFolderInfo* pCurrForder, const int nCurrSelIndx) { if(pCurrForder == NULL) return 0; CStringArray* pArr = GetCurArray(nCurrSelIndx, pCurrForder); if(pArr == NULL) return 0; //将文件夹里的相片添加到主目录里; CStringArray* pAllPhotoArr = GetCurArray(nCurrSelIndx); int nSize = pArr->GetSize(); for(int i = 0; iElementAt(i); if(strName != _T("")) pAllPhotoArr->Add(strName); } return 1; } /************************************************************************/ /* 函数: DelFolderFromName 描述: 通过文件名删除文件夹 参数: const CString& strName 文件夹名 返回: 1成功, 0失败 */ /************************************************************************/ int ChoosePhotoSkin2::DelFolderFromName(const CString& strName) { if(strName == _T("")) return 0; vector::iterator iter = m_vFolder.begin(); for(;iter != m_vFolder.end();) { SFolderInfo* p = (*iter); if(p != NULL && p->strName == strName) { delete p; m_vFolder.erase(iter); return 1; } ++iter; } return 0; } /************************************************************************/ /* 函数: AddFolder 描述: 添加文件夹 参数: const CString& strName 文件名 返回:SFolderInfo* 返回新建文件夹指针 */ /************************************************************************/ SFolderInfo* ChoosePhotoSkin2::AddFolder(const CString& strName) { if(strName == _T("")) return NULL; SFolderInfo* pForlder = new SFolderInfo(); pForlder->strName = strName; m_vFolder.push_back(pForlder); return pForlder; } /************************************************************************/ /* 函数: GetFolderData 描述: 获取文件夹数据 参数: CArray& arr 返回文件夹信息 返回: 1成功,0失败 */ /************************************************************************/ int ChoosePhotoSkin2::GetFolderData(CArray& folderarr) { CString filter = _T("LoadFolder@OrderID='") + m_strOrderNumber + _T("'"); g_sendhead.code[0] = 235; g_sendhead.tabcount = 1; g_sendhead.bsql = 0; g_pMainWnd->ProcessChatMessageRequest2(filter); if (g_bSendOK == 0) return 0; DataToArray(&folderarr); return 1; } // /************************************************************************/ /* 函数: GetFolderDelPhotos 描述: 获取文件夹里删除的相片名 参数: CString& strDel 返回文件夹里删除的相片如:(;文件夹1>文件1;文件夹1>文件2;文件夹2>文件1;) 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetFolderDelPhotos(CString& strDelPhotos) { vector::iterator iter = m_vFolder.begin(); while(iter != m_vFolder.end()) { //读取所有文件夹里要删除的相片 SFolderInfo* p = (*iter); if(p != NULL) GetDelPhotos(p->strName, &p->DelPhotoPath, FALSE, strDelPhotos); ++iter; } //添加头和尾字符;zz; if (!strDelPhotos.IsEmpty()) { strDelPhotos.TrimLeft(_T(";")); strDelPhotos.TrimRight(_T(";")); strDelPhotos = _T(";") + strDelPhotos; strDelPhotos += _T(";"); } } /************************************************************************/ /* 函数: GetDelPhotos 描述: 获取删除的所有相片名 参数: const CString& strFolderName 文件夹名 CStringArray* pDelPhotoArr, 删除的相片全路径集合 const BOOL bAddEnd 是否添加结尾字符 CString& strDelPhotos 返回相片名集合 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetDelPhotos(const CString& strFolderName, CStringArray* pDelPhotoArr, const BOOL bAddEnd, CString& strDelPhotos) { for (int i = 0; i < pDelPhotoArr->GetSize(); i++) { if (strDelPhotos.GetLength() > 4096) break; CString no = pDelPhotoArr->ElementAt(i); //在选片时被删除的相片名的全路径集合; no = no.Right(no.GetLength() - no.ReverseFind('\\') - 1); no = no.Left(no.Find('.')); strDelPhotos += strFolderName + _T(">"); strDelPhotos += no; strDelPhotos += _T(";"); } // strDelPhotos:解析为只有相片名,以分号为分隔符的字符串; if (!strDelPhotos.IsEmpty() && bAddEnd) { strDelPhotos.TrimLeft(_T(";")); strDelPhotos.TrimRight(_T(";")); strDelPhotos = _T(";") + strDelPhotos; strDelPhotos += _T(";"); } } /************************************************************************/ /* 函数: GetDelPhotos 描述: 获取删除的所有相片名 参数: CStringArray* pDelPhotoArr, 删除的相片全路径集合 CString& strDelPhotos 返回相片名集合 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetDelPhotos(CStringArray* pDelPhotoArr, CString& strDelPhotos) { for (int i = 0; i < pDelPhotoArr->GetSize(); i++) { if (strDelPhotos.GetLength() > 4096) break; CString no = pDelPhotoArr->ElementAt(i); //在选片时被删除的相片名的全路径集合; no = no.Right(no.GetLength() - no.ReverseFind('\\') - 1); no = no.Left(no.Find('.')); strDelPhotos += no; strDelPhotos += _T(";"); } // strDelPhotos:解析为只有相片名,以分号为分隔符的字符串; if (!strDelPhotos.IsEmpty()) { strDelPhotos.TrimLeft(_T(";")); strDelPhotos.TrimRight(_T(";")); strDelPhotos = _T(";") + strDelPhotos; strDelPhotos += _T(";"); } } /************************************************************************/ /* 函数: LoadFolder 描述: 加载文件夹 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::LoadFolder() { CArray folderarr; GetFolderData(folderarr); if(folderarr.GetSize() == 0) return; // 订单号; CString strOrderID = folderarr.ElementAt(0).ElementAt(0); // 文件夹名,以分号分隔; CString strFolderNames = folderarr.ElementAt(0).ElementAt(1); // 文件夹内的相片; CString strPhotos = folderarr.ElementAt(0).ElementAt(2); // 从文件夹内被删除的相片; CString strDelPhotos = folderarr.ElementAt(0).ElementAt(3); //清除文件夹; ClearFolder(); //从文件夹名集里获取文件夹名并且创建文件夹; GetFolderFromFolders(folderarr.ElementAt(0).ElementAt(1)); vector::iterator iter = m_vFolder.begin(); while(iter != m_vFolder.end()) { SFolderInfo* p = (*iter); if(p != NULL) { CStringArray arr; //通过文件夹名读取所有文件; GetNamesFromFoler(p->strName, folderarr.ElementAt(0).ElementAt(2), arr); int i = 0; for(i=0; iAllPhotoPath.Add(m_AllPhotoPath.ElementAt(j)); m_AllPhotoPath.RemoveAt(j); } else ++j; } } arr.RemoveAll(); //通过文件夹名读取要删除的文件; GetNamesFromFoler(p->strName, folderarr.ElementAt(0).ElementAt(3), arr); for(i=0; iDelPhotoPath.Add(m_AllPhotoPath.ElementAt(j)); m_AllPhotoPath.RemoveAt(j); } else ++j; } } } ++iter; } } /************************************************************************/ /* 函数: GetNamesFromFolder 描述: 从文件名集里获取文件夹名 参数: const CString& strFolders, 文件夹名集字符 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetFolderFromFolders(const CString& strFolders) { CString strNames = strFolders; strNames.TrimLeft(_T(";")); int nPos = 0; while(1) { //添加文件夹 nPos = strNames.Find(_T(";")); if(nPos == -1) break; CString strName = strNames.Left(nPos); AddFolder(strName); if(strNames.GetLength() <= (nPos + 1)) break; strNames = strNames.Right(strNames.GetLength() - (nPos + 1)); } } /************************************************************************/ /* 函数: GetNamesFromFoler 描述: 通过文件夹名读取文件 参数: const CString& strFolder, 文件夹 const CString& strPhotos, 相片集字符 (;文件夹1>文件1;文件夹1>文件2;文件夹2>文件1;) CStringArray& arr 返回相片集 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetNamesFromFoler(const CString& strFolder, const CString& strPhotos, CStringArray& arr) { CString strNames = strPhotos; strNames.TrimLeft(_T(";")); int nPos = 0; while(1) { //文件夹1>文件1; nPos = strNames.Find(_T(";")); if(nPos == -1) break; CString strName = strNames.Left(nPos); //文件夹1>文件 int n = strName.Find(_T(">")); if(n == -1) { if(strNames.GetLength() <= (nPos + 1)) break; strNames = strNames.Right(strNames.GetLength() - (nPos + 1)); continue; } CString strFolderName = strName.Left(n); if(strFolder != strFolderName) { if(strNames.GetLength() <= (nPos + 1)) break; strNames = strNames.Right(strNames.GetLength() - (nPos + 1)); continue; } CString strFile = strName.Right(strName.GetLength() - (n + 1)); arr.Add(strFile); if(strNames.GetLength() <= (nPos + 1)) break; strNames = strNames.Right(strNames.GetLength() - (nPos + 1)); } } /************************************************************************/ /* 函数: GetAllFolderNames 描述: 获取所有文件夹名 参数: CString& strNames 返回相片集字符 (;文件夹1>文件1;文件夹1>文件2;文件夹2>文件1;) 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetAllFolderNames(CString& strNames) { if(m_vFolder.size() == 0) return; vector::iterator iter = m_vFolder.begin(); while(iter != m_vFolder.end()) { SFolderInfo* p = (*iter); if(p != NULL) { strNames += p->strName; strNames += _T(";"); } ++iter; } if(!strNames.IsEmpty()) { strNames.TrimLeft(_T(";")); strNames.TrimRight(_T(";")); strNames = _T(";") + strNames; strNames += _T(";"); } } /************************************************************************/ /* 函数: GetAllFileFromFolder 描述: 通过文件夹获取所有文件 参数: const int nType, 需要获取的文件集类型 CString& strFileNames 返回相片集字符 (;文件夹1>文件1;文件夹1>文件2;文件夹2>文件1;) 返回: */ /************************************************************************/ void ChoosePhotoSkin2::GetAllFileFromFolder(const int nType, CString& strFileNames) { if(m_vFolder.size() == 0) return; vector::iterator iter = m_vFolder.begin(); while(iter != m_vFolder.end()) { SFolderInfo* p = (*iter); if(p != NULL) { CStringArray* parr = GetCurArray(nType, p); if(parr == NULL) continue; CString strPhoto = _T(""); for(int i=0; iGetSize(); i++) { //文件夹1>文件1; strPhoto = parr->ElementAt(i); strPhoto = strPhoto.Right(strPhoto.GetLength() - strPhoto.ReverseFind('\\') - 1); strPhoto = strPhoto.Left(strPhoto.Find('.')); strFileNames += p->strName; strFileNames += _T(">"); strFileNames += strPhoto; strFileNames += _T(";"); } } ++iter; } if(!strFileNames.IsEmpty()) { strFileNames.TrimLeft(_T(";")); strFileNames.TrimRight(_T(";")); strFileNames = _T(";") + strFileNames; strFileNames += _T(";"); } } /************************************************************************/ /* 函数: ClearFolder 描述: 清除所有文件夹 参数: 返回: */ /************************************************************************/ void ChoosePhotoSkin2::ClearFolder() { m_OpenFolder = NULL; m_pCurrSelFolder = NULL; std::vector::iterator iter = m_vFolder.begin(); for(;iter != m_vFolder.end();) { SFolderInfo* p = (*iter); if(p != NULL) delete p; ++iter; } m_vFolder.clear(); } #if USE_SHARE_FLORD /************************************************************************/ /* 函数:LoadDesignPhotos 描述:加载选设计所需相片; 参数: 返回: 调用约定: 注意:需要兼容异地选设计逻辑过程; 1.若开启异地选片,则读取本地数据库,加载共享目录信息; 2. */ /************************************************************************/ void ChoosePhotoSkin2::LoadDesignPhotos() { } /************************************************************************/ /* 函数:LoadSelectPhotos 描述:加载选片所需相片; 参数: 返回: 调用约定: 注意: 1.需要兼容异地选片逻辑过程; 2.不支持分店选片或汇总选片; 选片逻辑: 1.若有缓存相片在本机,选择是否使用本机缓存,是则结束余下逻辑过程; 2.若是儿童成长套系,弹出选择套系项; 3.判断初修共享目录是否有订单相片存在,无则使用原片选片; 4.若初修共享目录有相片,则弹出选择:使用初修片 | 使用原片 | 使用初修+原片 进行选片,并获取所需相片路径(若原片和初修同时存在,只选择初修片相片); 5.获取dindan表的delphotos记录,从4中获取的相片路径中剔除delphotos的相片路径; */ /************************************************************************/ void ChoosePhotoSkin2::LoadSelectPhotos() { // 1.是否有本机缓存; if(IsThereACacheImg()) m_bFromLocal = 1; else { // 2.1.先查找原始初修共享目录是否有相片; GetTXName(&m_strOrderNumber, 1, m_bGrowthTX, m_seltxname); ////////////////////////////////////////////////////////////////////////// // 2.2.查找原始初修共享目录是否有相片; int nPhotoType = 0; BOOL bExistsEarlyPhotos = FALSE; TCHAR szShare[MAX_PATH] = {0}; TCHAR szOrdePath[MAX_PATH] = {0}; CStringArray strAryOfExistsEarlyDirectory; // 存在初修订单的文件夹路径; CStringArray strAryOfExistsOriginalDirectory; // 存在原片订单的文件夹路径; // 获取本地初修共享目录; CString domainname = ""; int i = 0; #ifdef ENTERPRISE_VERSION for(i = 0; i < g_brancharray.GetSize(); i++) { if (g_branchname == g_brancharray.ElementAt(i).ElementAt(0)) { domainname = g_brancharray.ElementAt(i).ElementAt(2); break; } } if (g_branchname != "") sprintf(szShare, _T("\\\\%s\\%s\\%s"), g_serverbak, _T("修好的片(管理软件)$"), domainname); else sprintf(szShare, _T("\\\\%s\\%s"), g_serverbak, _T("修好的片(管理软件)$")); #else sprintf(szShare, _T("\\\\%s\\%s"), g_serverbak, _T("修好的片(管理软件)$")); #endif //#ifdef ENTERPRISE_VERSION // 若是成长套系,初修片有子目录; 若是婚纱版,初修没有景点子目录; if ( m_bGrowthTX && ( !m_seltxname.IsEmpty() && m_seltxname != _T("全部")) ) sprintf(szOrdePath, _T("%s\\%s\\%s"), szShare, m_strOrderNumber, m_seltxname); else sprintf(szOrdePath, _T("%s\\%s"), szShare, m_strOrderNumber); if ( PathFileExists(szOrdePath) ) { // 存在初修片; strAryOfExistsEarlyDirectory.Add(CString(szOrdePath)); } // 2.3.查找其他共享目录下的初修订单目录; int nSize = g_aryOfSharePathInfo.GetSize(); for (i = 0; i < nSize; i++) { if ( 2 == atoi(g_aryOfSharePathInfo.ElementAt(i).ElementAt(5)) ) { if ( g_aryOfSharePathInfo.ElementAt(i).ElementAt(1).Compare(g_branchname.IsEmpty() ? g_domain : g_branchname ) != 0 ) { continue; } // 逐一加载其他共享目录; // 如果是成长套系且套系名不为空或全部; #ifdef ENTERPRISE_VERSION if (g_branchname != "") sprintf(szShare, _T("%s\\%s"), g_aryOfSharePathInfo.ElementAt(i).ElementAt(2), domainname); else sprintf(szShare,_T("%s"),g_aryOfSharePathInfo.ElementAt(i).ElementAt(2)); #else sprintf(szShare,_T("%s"),g_aryOfSharePathInfo.ElementAt(i).ElementAt(2)); #endif //#ifdef ENTERPRISE_VERSION // 若是成长套系,初修片有子目录; 若是婚纱版,初修没了景点了目录; if ( m_bGrowthTX && ( !m_seltxname.IsEmpty() && m_seltxname != _T("全部")) ) { sprintf(szOrdePath, _T("%s\\%s\\%s"), szShare, m_strOrderNumber, m_seltxname); } else { sprintf(szOrdePath, _T("%s\\%s"), szShare, m_strOrderNumber); } if ( PathFileExists(szOrdePath) ) { strAryOfExistsEarlyDirectory.Add(CString(szOrdePath)); } } } // 查找所有初修订单目录的相片; //CNetShareInfo::GetInstance()->LoadSpecifiedDirectories(strAryOfExistsEarlyDirectory,m_AllPhotoPath); for ( i = 0; i < strAryOfExistsEarlyDirectory.GetSize(); i++ ) { LoadSpecifiedDirectoryPhotos(strAryOfExistsEarlyDirectory.ElementAt(i), m_AllPhotoPath, TRUE, NULL, NULL); } // 如果初修片目录有相片,提供选片模式 选择:0=初修; 1=原片;2=原片+初修; if ( m_AllPhotoPath.GetSize() ) { bExistsEarlyPhotos = TRUE; } ////////////////////////////////////////////////////////////////////////// // 初修片存在,选择选片相片混合模式; if (bExistsEarlyPhotos) { SelBrunDevice dlg; dlg.m_mode = 1; if ( dlg.DoModal() == IDOK ) // m_nChoosePhotoType=; =0:修片; =1:原片 =2:原片+修片 m_nChoosePhotoType = dlg.m_sel; else m_nChoosePhotoType = 0; } else { m_nChoosePhotoType = 1; strAryOfExistsEarlyDirectory.RemoveAll(); AfxMessageBox(_T("温馨提示:\r\n未找到初修片,将使用原片选片"), MB_ICONINFORMATION); } ////////////////////////////////////////////////////////////////////////// // 使用到原片的选片模式; if ( m_nChoosePhotoType != 0) { ////////////////////////////////////////////////////////////////////////// // 3.1.加载原始原片共享目录; #ifdef ENTERPRISE_VERSION if (g_branchname != "") sprintf(szShare, _T("\\\\%s\\%s\\%s"), g_serverbak, _T("客户原片(管理软件)$"), domainname); else sprintf(szShare, _T("\\\\%s\\%s"), g_serverbak, _T("客户原片(管理软件)$")); #else sprintf(szShare, _T("\\\\%s\\%s"), g_serverbak, _T("客户原片(管理软件)$")); #endif //#ifdef ENTERPRISE_VERSION if ( m_bGrowthTX && ( !m_seltxname.IsEmpty() && m_seltxname != _T("全部")) ) {// 儿童成长套系; sprintf(szOrdePath, _T("%s\\%s\\%s"), szShare, m_strOrderNumber, m_seltxname); } else { sprintf(szOrdePath, _T("%s\\%s"), szShare, m_strOrderNumber); } if ( PathFileExists(szOrdePath) ) { // 存在原片; strAryOfExistsOriginalDirectory.Add(CString(szOrdePath)); } // 3.2.查找其他共享目录; int nSize = g_aryOfSharePathInfo.GetSize(); for ( int i = 0; i < nSize; i++) { if ( 1 == atoi(g_aryOfSharePathInfo.ElementAt(i).ElementAt(5)) ) { // 逐一加载其他共享目录; if ( g_aryOfSharePathInfo.ElementAt(i).ElementAt(1).Compare(g_branchname.IsEmpty() ? g_domain : g_branchname ) != 0 ) { continue; } #ifdef ENTERPRISE_VERSION if (g_branchname != "") sprintf(szShare,"%s\\%s",g_aryOfSharePathInfo.ElementAt(i).ElementAt(2), domainname); else sprintf(szShare,"%s",g_aryOfSharePathInfo.ElementAt(i).ElementAt(2)); #else sprintf(szShare,"%s",g_aryOfSharePathInfo.ElementAt(i).ElementAt(2)); #endif //#ifdef ENTERPRISE_VERSION if ( m_bGrowthTX && ( !m_seltxname.IsEmpty() && m_seltxname != _T("全部")) ) {// 儿童成长套系; sprintf(szOrdePath, _T("%s\\%s\\%s"), szShare, m_strOrderNumber, m_seltxname); } else { sprintf(szOrdePath, _T("%s\\%s"), szShare, m_strOrderNumber); } if ( PathFileExists(szOrdePath) ) { strAryOfExistsOriginalDirectory.Add(CString(szOrdePath)); } } } } // 完成对选片所需的共享目录筛选,然后筛选目录的相片路径; LoadNecessaryImage(strAryOfExistsEarlyDirectory, strAryOfExistsOriginalDirectory, m_nChoosePhotoType); } // next.获取dindan表中的字段delphotos的相片编号,然后从m_AllPhotoPath中剔除delphotos的相片路径; // 暂由旧代码代替执行; } /************************************************************************/ /* 函数:LoadNecessaryImage[4/17/2016 IT]; /* 描述:加载最终选片所需要的相片路径; /* 参数:; /* [IN] strAryOfEarlyImage:订单初修片共享目录; /* [IN] strAryOfOriginalImage:订单原片共享目录; /* [IN] nSelectType:选片要用的相片类型:0 == 只用初修; 1 == 只用原片; 2 == 初修 + 原片,其中初修为主,原片为辅; /* 返回:void; /* 注意:初修片文件夹里没有任务子目录,如套系,景点这些子目录; /* 示例:; /* /* 修改:; /* 日期:; /* 内容:; /************************************************************************/ void ChoosePhotoSkin2::LoadNecessaryImage(IN CStringArray &strAryOfEarlyImage, IN CStringArray &strAryOfOriginalImage, IN const int &nSelectType) { if ( m_bGrowthTX ) { // 只有成长套系才有选择套系名; if ( m_seltxname == _T("全部") ) m_seltxname.Empty(); } else { // 非成长套系的,不会弹出对话框; m_seltxname.Empty(); } int nSize = 0; CString strTemp; if ( nSelectType == 0) // 初修片; { // 初修已载过,不需要重新添加; //CNetShareInfo::GetInstance()->LoadSpecifiedDirectories(strAryOfEarlyImage,m_AllPhotoPath); } else if ( nSelectType == 1 ) // 原片; { m_AllPhotoPath.RemoveAll(); nSize = strAryOfOriginalImage.GetSize(); for ( int i = 0; i < nSize; i++) { LoadSpecifiedDirectoryPhotos(strAryOfOriginalImage.ElementAt(i), m_AllPhotoPath, FALSE, NULL); } } else // 初修+原片; { nSize = strAryOfOriginalImage.GetSize(); for ( int i = 0; i < nSize; i++) { LoadSpecifiedDirectoryPhotos(strAryOfOriginalImage.ElementAt(i), m_AllPhotoPath, FALSE, NULL); } } } /************************************************************************/ /* 函数:LoadSpecifiedDirectoryPhotos 描述:加载指定路径的相片; 参数: IN: lpSpecifiedDirectory 相片路径; OUT: strArray 存储相片路径的数组; IN: bEffect IN: pEarlyDirectory IN: pEarlyImages 返回: 调用约定:由LoadNecessaryImage调用; 注意: */ /************************************************************************/ void ChoosePhotoSkin2::LoadSpecifiedDirectoryPhotos( IN LPCTSTR lpSpecifiedDirectory, OUT CStringArray &strArray, IN BOOL bEffect, IN CStringArray *pEarlyDirectory, IN CStringArray *pEarlyImages) { if ( lpSpecifiedDirectory == NULL || strcmp(lpSpecifiedDirectory,_T("")) == 0 || !PathFileExists(lpSpecifiedDirectory) ) return; using namespace helper_coffs; ffsco o; o.dirs(1); o.find(lpSpecifiedDirectory, LPCSTR("*.*")); ffsco::typeT cfs; ffsco::typeT::iterator it; cfs = o.co_file(); int nIndex = 0; CString strName; CString strTemp; for ( it = cfs.begin(); cfs.end() != it; it++) { // 去除目录级文件; // 去除ok文件; // 去除modifytime文件; // 去除s+m缩略图; strName = it->c_str(); strName.MakeLower(); if ( strName.Find('.') == -1) continue; else { CString str = strName.Mid( strName.ReverseFind('\\') + 1 ); if ( str.Find('.') == -1) continue; } if ( strName.GetAt( strName.ReverseFind('\\') + 1 ) == 's' )continue; if ( strName.GetAt( strName.ReverseFind('\\') + 1 ) == 'm' )continue; // 剔除nef,cr2,raw之类的原始相片格式; //if ( strName.Find(_T(".jpg")) == -1 )continue; if ( strName.Right(4).CompareNoCase(_T(".jpg")) != 0 ) { if ( strName.Right(5).CompareNoCase(_T(".jpeg")) != 0 ) continue; } // 再判断是否为数字编号; strTemp = strName.Mid( strName.ReverseFind('\\') + 1); strTemp = strTemp.Left( strTemp.ReverseFind('.')); if ( !g_bOriginal ) {// 系统数字命名; if ( !myisdigit(strTemp) ) { if ( bEffect ) {// 初修效果图; if ( strTemp.Find('-') != -1) { strTemp = strTemp.Left( strTemp.Find('-') ); strTemp.TrimRight(_T(" ")); // 去除空格; if ( myisdigit(strTemp) ) strArray.Add(strName); } } continue; } } // 判断strTemp是否在strArray中存在同名的相片; BOOL bIsonym = FALSE; CString strNumber; for ( int n = 0; n < strArray.GetSize(); n++ ) { strNumber = strArray.ElementAt(n); strNumber = strNumber.Mid(strNumber.ReverseFind('\\') + 1); strNumber = strNumber.Left(strNumber.ReverseFind('.')); if ( strNumber.CompareNoCase(strTemp) == 0 ) { bIsonym = TRUE; break; } } if ( !bIsonym ) nIndex = strArray.Add(strName);// 同时记录索引值,有初修使用初修替换; } } #endif //#if USE_SHARE_FLORD