void GetFreeFunctionsInScripts(CStringArray & sNamesArray, LPCWSTR TransformationEvent) { // get an array with the available scripts PluginArray * piScriptArray = CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(TransformationEvent); // fill in these structures int nFnc = 0; int iScript; for (iScript = 0 ; iScript < piScriptArray->GetSize() ; iScript++) { PluginInfo & plugin = piScriptArray->ElementAt(iScript); LPDISPATCH piScript = plugin.m_lpDispatch; BSTR * scriptNamesArray; int * scriptIdsArray; int nScriptFnc = GetMethodsFromScript(piScript, scriptNamesArray, scriptIdsArray); sNamesArray.SetSize(nFnc+nScriptFnc); int iFnc; for (iFnc = 0 ; iFnc < nScriptFnc ; iFnc++) // the CString = operator provides the conversion if UNICODE is not defined sNamesArray[nFnc+iFnc] = scriptNamesArray[iFnc]; delete [] scriptIdsArray; delete [] scriptNamesArray; nFnc += nScriptFnc; } }
BOOL CAppealDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 CBcfFile fMsg(CBcfFile::GetAppPath()+"ClientMessage.bcf"); if (pMsg->message == WM_USER + 1) { if (pMsg->wParam == 1 || pMsg->wParam == 5) { //wushuqun 2009.5.22 //AFCMessageBox(fMsg.GetKeyVal("AppealDlg","SendAppealError","投诉文件上传失败!")); DUIMessageBox(m_hWnd,MB_ICONINFORMATION|MB_OK,"系统提示",false,fMsg.GetKeyVal("AppealDlg","SendAppealError","投诉文件上传失败!")); return CDialog::PreTranslateMessage(pMsg); } if (m_strInfoFileName == "" || m_strInfoFileWholeName == "") { return CDialog::PreTranslateMessage(pMsg); } if (pMsg->wParam == 4) //当zxh录像文件输送成功后,再传送txt文件 { CStringArray csa; csa.SetSize(0,6); csa.Add(m_strFtpAddress); csa.Add(m_strFtpUserName); csa.Add(m_strFtpPwd); csa.Add(m_strInfoFileName); //远程文件名字 csa.Add(m_strInfoFileWholeName); //本地文件名字 int b=UploadFile(&csa,this->m_hWnd,WM_USER+2); } } else if(pMsg->message == WM_USER + 2) { if (pMsg->wParam == 1 || pMsg->wParam == 5) { //wushuqun 2009.5.22 //AFCMessageBox(fMsg.GetKeyVal("AppealDlg","SendAppealError","投诉文件上传失败!")); DUIMessageBox(m_hWnd,MB_ICONINFORMATION|MB_OK,"系统提示",false,fMsg.GetKeyVal("AppealDlg","SendAppealError","投诉文件上传失败!")); return CDialog::PreTranslateMessage(pMsg); } if (pMsg->wParam == 4) { //AFCMessageBox(fMsg.GetKeyVal("AppealDlg","SendAppealSuccess","投诉文件已经上传成功!")); DUIMessageBox(m_hWnd,MB_ICONINFORMATION|MB_OK,"系统提示",false,fMsg.GetKeyVal("AppealDlg","SendAppealSuccess","投诉文件已经上传成功!")); } //删除产生的中间文件 // //删除生成的信息文件 ::DeleteFile(m_strInfoFileWholeName); m_strInfoFileName = ""; m_strInfoFileWholeName = ""; } return CDialog::PreTranslateMessage(pMsg); }
void CFileBrowserListCtrl::GetSelectedItems(CStringArray& Path) const { int selcnt = GetSelectedCount(); Path.SetSize(selcnt); POSITION pos = GetFirstSelectedItemPosition(); for (int i = 0; i < selcnt; i++) Path[i] = GetItemPath(GetNextSelectedItem(pos)); }
// ============================================================================ void LoadStringArray(CArchive &ar, CStringArray &strArr) { int count; ar >> count; strArr.SetSize(count); for(int i = 0; i < count; i++) ar >> strArr[i]; }
BOOL CRegistry::Read (LPCTSTR pszKey, CStringArray& scArray) { ASSERT(m_hKey); const int iMaxChars = 4096; int OldSize = (int) scArray.GetSize(); DWORD dwType; DWORD dwData = iMaxChars; BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR)); ASSERT(byData); LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType, byData, &dwData); m_Info.lMessage = lReturn; m_Info.dwType = dwType; m_Info.dwSize = dwData; if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY) { ASSERT(dwData < iMaxChars); CMemFile file(byData, dwData); CArchive ar(&file, CArchive::load); ar.m_bForceFlat = FALSE; ASSERT(ar.IsLoading()); ASSERT(scArray.IsSerializable()); scArray.RemoveAll(); scArray.SetSize(10); scArray.Serialize(ar); scArray.SetSize(OldSize); ar.Close(); file.Close(); } if(byData) { free(byData); byData = NULL; } if(lReturn == ERROR_SUCCESS) return TRUE; return FALSE; }
void EnumerateTuple(PyObject* pTuple, CStringArray& astrRet, int argcountlimit = 100) { Py_ssize_t nNumItems = min(PyTuple_GET_SIZE(pTuple),argcountlimit); astrRet.SetSize(nNumItems); for(int i = 0; i < nNumItems; i++) { PyObject* pItem = PyTuple_GET_ITEM( pTuple, i ); astrRet.SetAt(i, CA2T(PyString_AsString(pItem))); } }
BOOL GetLastEditScript(CStringArray &anArray) { int i; anArray.RemoveAll(); if (!m_bEditScriptValid) return FALSE; anArray.SetSize(m_EditScript.GetSize()); for (i=0; i<m_EditScript.GetSize(); i++) anArray.SetAt(i, m_EditScript.GetAt(i)); return TRUE; }
BOOL CCollegeTimeTableView::OnPreparePrinting(CPrintInfo* pInfo) {pInfo->SetMinPage(1); CString temp,temp2; CStringArray arr; arr.SetSize(20); //// for parallel lecture splitting in diff strings int height,maxheight; int LineCounter=0,PageIndex=0; PageArray.RemoveAll(); ////// Reset Page Description Array CPage tempage; PageArray.Add(tempage); BOOL bLastEmpty=FALSE; for(int i=1;i<ROWS;i++) ////// Preapre Page Description {maxheight=1; temp=m_master.GetItemText(i,0); if(temp.IsEmpty()){ if(i+1<ROWS) { temp2=m_master.GetItemText(i+1,0); if(temp2[0]>='0' && temp2[0]<='9') continue;///no blank line before time cell ///since onprint() will create one } if(bLastEmpty) continue; /// keep atmost one empty row if((LineCounter+1)<LinesPerPage) {LineCounter++; PageArray[PageIndex].Line.Add(i); bLastEmpty=TRUE; continue; } else {PageIndex++; PageArray.Add(tempage); LineCounter=0; continue; } } bLastEmpty=FALSE; GetParallelLectureList(temp,arr);// Get Parallel lectures in CStringarray arr height=arr.GetSize(); if(height<1) height=1; if(height>maxheight) maxheight=height; ///max cell height,>1 for parallel lectures if((LineCounter+maxheight)<LinesPerPage) {LineCounter+=maxheight; //include lines PageArray[PageIndex].Line.Add(i); continue; ///go for more lines } PageIndex++; /// Page Full, go for next page PageArray.Add(tempage);///Create Empty Page Struct LineCounter=maxheight; /// PageArray[PageIndex].Line.Add(i); } pInfo->SetMaxPage(PageIndex+1); return DoPreparePrinting(pInfo); }
int CReportCtrl::MoveTo(int nItem, int nNewPosition) { if(!_IsValidIndex(nItem)) { return(-1); } EndEdit(TRUE); const int ITEMS = CListCtrl :: GetItemCount(); nNewPosition = max(0, nNewPosition); nNewPosition = min(ITEMS - 1, nNewPosition); if(nItem == nNewPosition) { return(nNewPosition); } _UnsetSortedColumn(); // Backup all states and attributes const int COLS = GetColumnCount(); const DWORD STATES = GetItemStates(nItem); const DWORD DATA = CListCtrl :: GetItemData(nItem); CArray<int, int> aImages; CStringArray aTexts; aImages.SetSize(COLS); aTexts.SetSize(COLS); for(int i = 0; i < COLS; i++) { aImages[i] = GetItemImage(nItem, i); aTexts[i] = GetItemText(nItem, i); } // Delete the item CListCtrl :: DeleteItem(nItem); // Insert a new item to the new position const int IDX = CListCtrl :: InsertItem(nNewPosition, _T("")); // Restore all states & attributes to the newly inserted item for(int j = 0; j < COLS; j++) { CListCtrl :: SetItemText(IDX, j, aTexts[j]); SetItemImage(IDX, j, aImages[j]); } CListCtrl :: SetItemData(IDX, DATA); SetItemStates(IDX, STATES); return(IDX); }
/** * Searches for all available libraries in the library path * * @param * @return * @exception - * @see */ HRESULT CProjectWizardData::SearchLibraries() { BOOL done; int iCount,iNumberLibraries; HRESULT hrResult; HANDLE hSearch; WIN32_FIND_DATA findData; CString sSearch; CStringArray asLibraries; iNumberLibraries = 0; asLibraries.SetSize(0); m_Libraries.RemoveAll (); hrResult = UTIL_GetStdLibPath (m_strLibraryPath.GetBuffer(_MAX_PATH), _MAX_PATH); m_strLibraryPath.ReleaseBuffer(); if (SUCCEEDED(hrResult)) { if (m_strLibraryPath.IsEmpty()) { hrResult = S_FALSE; } else { sSearch.Format(_T("%s\\*.") FILE_EXT_LIBRARY,m_strLibraryPath); hSearch = FindFirstFile(sSearch,&findData); if (hSearch == INVALID_HANDLE_VALUE) { hrResult = S_FALSE; } else { hrResult = S_OK; done = FALSE; while (! done) { asLibraries.SetAtGrow(iNumberLibraries,CString(findData.cFileName)); iNumberLibraries++; if (! done) { done = ! FindNextFile(hSearch,&findData); if (done) { if (GetLastError() != ERROR_NO_MORE_FILES) { hrResult = E_FAIL; } } } } FindClose(hSearch); if (hrResult == S_OK) { m_Libraries.SetSize(iNumberLibraries); for (iCount=0; iCount<iNumberLibraries; iCount++) { m_Libraries[iCount].SetLibraryName(asLibraries[iCount]); m_Libraries[iCount].SetSelectFlag(FALSE); } } } } } return hrResult; }
BOOL CListCtrlEx::SwapRow(int nRow1, int nRow2) { BOOL bOk = FALSE; int nMaxRows = GetItemCount(); if ( (nRow1 >= 0) && (nRow1 < nMaxRows) && (nRow2 >= 0) && (nRow2 < nMaxRows) && (nRow1 != nRow2) ) { int nMaxColumns = GetColumnCount(); LV_ITEM lvItem1, lvItem2; CStringArray rowText; rowText.SetSize(nMaxColumns); for(int i = 0; i < nMaxColumns; i++) { rowText[i] = GetItemText(nRow1, i); } lvItem1.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; lvItem1.iItem = nRow1; lvItem1.iSubItem = 0; lvItem1.stateMask = LVIS_CUT | LVIS_DROPHILITED | LVIS_FOCUSED | LVIS_SELECTED | LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK; lvItem2 = lvItem1; lvItem2.iItem = nRow2; GetItem(&lvItem1); GetItem(&lvItem2); for(i = 0; i < nMaxColumns; i++) { CListCtrl::SetItemText(nRow1, i, GetItemText(nRow2, i)); } lvItem2.iItem = nRow1; SetItem(&lvItem2); for(i = 0; i < nMaxColumns; i++) { CListCtrl::SetItemText(nRow2, i, rowText[i]); } lvItem1.iItem = nRow2; SetItem(&lvItem1); } return bOk; }
void CComboBox_CopyTo(const CComboBox &ctrlComboBox, CStringArray &arrstrItems) { ASSERT(ctrlComboBox.GetSafeHwnd() != NULL); arrstrItems.RemoveAll(); arrstrItems.SetSize(ctrlComboBox.GetCount()); CString strItem; for (int i = 0; i < ctrlComboBox.GetCount(); ++i) { ctrlComboBox.GetLBText(i, strItem); arrstrItems[i] = strItem; } }
void CCollegeTimeTableView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { int j,k,height,maxheight; UINT line; CString temp; CStringArray arr; arr.SetSize(20); CFont fon; CFont* oldfont; fon.CreateFont(18,8,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"COURIER NEW"); oldfont=pDC->SelectObject(&fon); pDC->SetMapMode(MM_LOENGLISH); pDC->SetBkMode(TRANSPARENT); CPoint PP(70,-25); CPoint QQ(771,-25); CPoint tempPP,tempQQ; UINT lastline=PageArray[(pInfo->m_nCurPage)-1].Line.GetUpperBound();/// for(line=0;line<=lastline;line++) { maxheight=1; for(j=0;j<7;j++) {tempPP=PP;//tempQQ=QQ; temp=m_master.GetItemText(PageArray[(pInfo->m_nCurPage)-1].Line[line],j); if(temp[0]>='0' && temp[0]<='9') {PP.Offset(0,-25); tempPP=PP;QQ.Offset(0,-25); /////create blank space between lecture blocks } GetParallelLectureList(temp,arr);// in CStringarray arr height=arr.GetSize(); if(height<1) height=1; if(height>maxheight) maxheight=height; for(k=0;k<height;k++) {pDC->TextOut(74+j*100,PP.y-2,arr[k]); PP.Offset(0,-25); } PP=tempPP;//Reset to normal lecture line } QQ.Offset(0,-25*maxheight); DisplayGrid(PP,QQ,1,7,pDC); PP.Offset(0,-25*maxheight); } pDC->SelectObject(&oldfont); }
void CReportDlg::OnBnClickedOk() { if(!m_pPlayerDB) return; CFileDialog dlg(FALSE, _T(".csv"), _T("stat.csv"), OFN_OVERWRITEPROMPT, _T("CSV (Comma delimited, *.csv)|*.csv||")); if(dlg.DoModal() == IDCANCEL) return; CString csvfile = dlg.GetPathName(); CCsvFile csv(csvfile, CFile::modeWrite | CFile::modeCreate); CStringArray a; const CHeaderCtrl * header = m_List.GetHeaderCtrl(); int i; HDITEM hdi; enum { sizeOfBuffer = 256 }; TCHAR lpBuffer[sizeOfBuffer]; hdi.mask = HDI_TEXT; hdi.pszText = lpBuffer; hdi.cchTextMax = sizeOfBuffer; a.SetSize(header->GetItemCount()); for(i = 0; i < header->GetItemCount(); i++) { header->GetItem(i, &hdi); a[i] = lpBuffer; } csv.WriteLine(a); for(int i = 0; i < m_List.GetItemCount(); i++) { #ifdef XLISTCTRL_OLD for(int j = 0; j < m_List.GetColumnCount(); j++) #else for(int j = 0; j < m_List.GetColumns(); j++) #endif a[j] = m_List.GetItemText(i, j); csv.WriteLine(a); } OnOK(); }
void CDirstatDoc::SortExtensionData(CStringArray& sortedExtensions) { sortedExtensions.SetSize(m_extensionData.GetCount()); int i= 0; POSITION pos= m_extensionData.GetStartPosition(); while (pos != NULL) { CString ext; SExtensionRecord r; m_extensionData.GetNextAssoc(pos, ext, r); sortedExtensions[i++]= ext; } _pqsortExtensionData= &m_extensionData; qsort(sortedExtensions.GetData(), sortedExtensions.GetSize(), sizeof(CString), &_compareExtensions); _pqsortExtensionData= NULL; }
void Combine(CStringArray& aszX, CString s, int k,CStringArray& aszC) { if(aszX.GetSize() > 10) { AfxMessageBox("So to hop qua lon",MB_OK); aszX.SetSize(10); } int i,j; CStringArray aszTemp; for(i=k; i<aszX.GetSize(); i++) { aszTemp.Add(s + aszX[i]); aszC.Add(Union(s , aszX[i])); } k++; for(j=0; j<aszTemp.GetSize(); j++) Combine(aszX,aszTemp[j],j+k,aszC); }
// AppName Version Url bool CKDApp::GetUpdateAppOnLineVer(LPCTSTR lpQueryUrl, const CStringArray &saQueryAppName, const CArray<int, int> &aiQueryVerSize, CStringArray &saReturnVer, CStringArray &saReturnUrl) { saReturnVer.RemoveAll(); saReturnUrl.RemoveAll(); int i, iCount = saQueryAppName.GetCount(); if ((iCount < 1) || (iCount != aiQueryVerSize.GetCount())) return false; saReturnVer.SetSize(iCount); saReturnUrl.SetSize(iCount); bool bRes = true; CInternetSession session(_T("Check Update App Session")); CStdioFile *pFile = NULL; TRY { pFile = session.OpenURL(lpQueryUrl); } CATCH_ALL(e) { } END_CATCH_ALL if (pFile) { CString sPageContext; CString sBuf; char *pBuf = new char[UPDATE_QUERY_SIZE]; while (pFile->Read(pBuf, UPDATE_QUERY_SIZE)) { sBuf = pBuf; sPageContext.Append(sBuf); } int iPos; iPos = sPageContext.Find(_T("404 Not Found")); if (-1 != iPos) { bRes = false; iCount = 0; } for (i=0 ; i<iCount ; i++) { if (saQueryAppName[i].IsEmpty()) continue; iPos = sPageContext.Find(saQueryAppName[i]); if (-1 != iPos) { LPCTSTR lpPageContext = sPageContext; lpPageContext += iPos + _tcslen(saQueryAppName[i]) + 1; CString *psReturnVer = (CString *)&saReturnVer.GetAt(i); LPTSTR lpVersion = psReturnVer->GetBuffer(aiQueryVerSize[i] + 1); _tcsncpy(lpVersion, lpPageContext, aiQueryVerSize[i]); *(lpVersion + aiQueryVerSize[i]) = _T('\0'); psReturnVer->ReleaseBuffer(); int iTextWrite = 0; psReturnVer = (CString *)&saReturnUrl.GetAt(i); lpVersion = psReturnVer->GetBuffer(MAX_PATH); lpPageContext += aiQueryVerSize[i] + 1; while ((*lpPageContext != _T('\0')) && (*lpPageContext != _T('\n')) && (iTextWrite < MAX_PATH)) { *lpVersion = *lpPageContext; lpVersion++; lpPageContext++; iTextWrite++; } *lpVersion = _T('\0'); psReturnVer->ReleaseBuffer(); } } delete pBuf; pFile->Close(); delete pFile; } else { bRes = false; } session.Close(); return bRes; }
void CFavMenu::AddToIEFav(HMENU fmenu, CString favpath, UINT &id) { static short menu_level = 0; menu_level++; favmenus.Add(fmenu); CStringArray favs; DWORD count = 0; LPSTR pdata = NULL; BYTE* data = NULL; favs.SetSize(count, 64); CFileFind finder; BOOL found = finder.FindFile(favpath + "\\*.*"); while (found) { found = finder.FindNextFile(); if (!finder.IsDots() && !finder.IsHidden()) { CString title = finder.GetFileTitle(); BOOL bdir = finder.IsDirectory(); CString item; if (finder.IsDirectory()) { //取得有"."的資料夾名稱 by NomedEmag 07/06/08 title = finder.GetFileName(); // item = 'd' + title; } else { item = 'w' + title; item += '\t'; CString ads; DWORD retl = GetPrivateProfileString("InternetShortcut", "URL", "", ads.GetBuffer(2048), 2048 , finder.GetFilePath()); ads.ReleaseBuffer(); item += ads; } favs.Add(item); } } finder.Close(); if (data) delete []data; //利用特殊技巧 qsort,這是依賴 MFC 的內部實做方式,將來可能有變 if (AppConfig.autosort_favorite) qsort(favs.GetData(), favs.GetSize(), sizeof(CString), FavItemCompare); // long menuh=GetSystemMetrics(SM_CYMENU)*4+64; // UINT id = ID_FIRST_WEB_FAVORITE; int menu_height = 0; for (int i = 0; i < favs.GetSize(); ++i) { if (!favs[i].IsEmpty()) { web_fav.Add(favs[i]); if ('d' == favs[i][0]) { HMENU submenu = CreatePopupMenu(); AppendMenu(fmenu, MF_OWNERDRAW | MF_POPUP, (UINT)submenu, LPCTSTR(id), menu_height); ++id; AddToIEFav(submenu, (favpath + '\\' + (LPCTSTR(favs[i]) + 1)), id); } else { AppendMenu(fmenu, MF_OWNERDRAW, id, LPCTSTR(id), menu_height); ++id; } } } web_fav.Add(sep); ++id; ::AppendMenu(fmenu, MF_SEPARATOR, 0, 0); web_fav.Add(add_to_fav); AppendMenu(fmenu, MF_OWNERDRAW, id/*ID_ADDTOFAVORITE*/, LPCTSTR(id), menu_height); id++; web_fav.Add(open_all); AppendMenu(fmenu, MF_OWNERDRAW, id/*ID_FAVORITE_OPENALL*/, LPCTSTR(id), menu_height); id++; web_fav.Add(org_fav); AppendMenu(fmenu, MF_OWNERDRAW, id/*ID_FAVORITE_EDIT*/, LPCTSTR(id), menu_height); id++; menu_level--; if (!menu_level) { web_fav.Add(add_to_home); AppendMenu(fmenu, MF_OWNERDRAW, ID_ADDTOHOME, LPCTSTR(id), menu_height); ++id; } else { // AfxGetEmptyString(); web_fav.Add(_T("")); // afxEmptyString is no-longer in mfc7 and above ++id; } }
// 更新过滤数据 BOOL CDlgCheckRuleFeaName::UpdateFilterControlByCheckRule(const CheckRule &checkRule) { CStringArray arrMdlFilterCheckRule;//模型筛选 CStringToCStringArray(checkRule.strRuleName, arrMdlFilterCheckRule); int nArrSize = (int)arrMdlFilterCheckRule.GetSize(); if (nArrSize < 3 || arrMdlFilterCheckRule.GetAt(0).CompareNoCase(L"filter") != 0) { arrMdlFilterCheckRule.SetSize(3); arrMdlFilterCheckRule.SetAt(0, L"filter"); arrMdlFilterCheckRule.SetAt(1, L"parameter"); arrMdlFilterCheckRule.SetAt(2, L"abc"); } m_cmbFilterCategory.ResetContent(); m_cmbFilterCategory.AddString(L"模型名"); m_cmbFilterCategory.AddString(L"公用名称"); m_cmbFilterCategory.AddString(L"参数"); m_cmbFilterParaName.ResetContent(); int ntag = -1; CString strCatagory = arrMdlFilterCheckRule.GetAt(1); if (strCatagory.CompareNoCase(L"name") == 0) { ntag = 0; m_cmbFilterParaName.EnableWindow(FALSE); } else if (strCatagory.CompareNoCase(L"common_name") == 0) { ntag = 1; m_cmbFilterParaName.EnableWindow(FALSE); } else if (strCatagory.CompareNoCase(L"parameter") == 0) { ntag = 2; m_cmbFilterParaName.EnableWindow(TRUE); m_strParaParameter = arrMdlFilterCheckRule.GetAt(2);//参数名静态变量赋值 } else return TRUE; m_cmbFilterCategory.SetCurSel(ntag); if (ntag == 2) { CString strParaContent = arrMdlFilterCheckRule.GetAt(2); int nFind = -1; for (int i = 0; i < theApp.m_arrMdlParam.GetSize(); i++) { m_cmbFilterParaName.AddString(theApp.m_arrMdlParam[i]); if (strParaContent.CompareNoCase(theApp.m_arrMdlParam[i]) == 0) { nFind = i; } } if (nFind >= 0) m_cmbFilterParaName.SetCurSel(nFind); else m_cmbFilterParaName.SetWindowText(strParaContent); } if (arrMdlFilterCheckRule.GetSize() == 3) m_strFilterContent = arrMdlFilterCheckRule.GetAt(2); else m_strFilterContent = arrMdlFilterCheckRule.GetAt(3); if (arrMdlFilterCheckRule.GetSize() > 4) m_bMdlFilter = _wtoi(arrMdlFilterCheckRule.GetAt(4)); if (m_bMdlFilter) { m_cmbFilterCategory.EnableWindow(TRUE); int nIndex = m_cmbFilterCategory.GetCurSel(); if (nIndex == 0) m_cmbFilterParaName.EnableWindow(FALSE); else if (nIndex == 1) m_cmbFilterParaName.EnableWindow(FALSE); else m_cmbFilterParaName.EnableWindow(TRUE); GetDlgItem(IDC_EDIT_MDL_PARA_CATA_CONTENT)->EnableWindow(TRUE); } else { m_cmbFilterCategory.EnableWindow(FALSE); m_cmbFilterParaName.EnableWindow(FALSE); GetDlgItem(IDC_EDIT_MDL_PARA_CATA_CONTENT)->EnableWindow(FALSE); } UpdateData(FALSE); return TRUE; }
extern "C" _declspec(dllexport) BOOL startRprBill(CString strNT, _ConnectionPtr ptrCon, char* strCd, char* strPthOt, char* strAc, WCHAR* strWDoc){ // HINSTANCE hInstResClnt; //hInstResClnt = AfxGetResourceHandle(); AfxSetResourceHandle(::GetModuleHandle("RprBill.dll")); CString curStr,strTmp; CString strCod,strAcc,strPathOut; strCod = strCd; strCod.TrimLeft(); strCod.TrimRight(); strPathOut = strPthOt; strPathOut.TrimLeft(); strPathOut.TrimRight(); strAcc = strAc; strAcc.TrimLeft(); strAcc.TrimRight(); /*AfxMessageBox(strCod); AfxMessageBox(strPathOut); AfxMessageBox(strAcc); return FALSE; */ CString strCur,strSql,strCSls; CString m_strNT; CString m_strCR; //Код грузополучателя CString m_strCRAdr; //Код адреса доставки CString m_strCSA; //Код расч.сч. продовца CString m_strCREm; //Код e-mail _variant_t m_vNULL; _RecordsetPtr ptrRs1,ptrRs2,ptrRs3,ptrRs4; _CommandPtr ptrCmd1,ptrCmd2,ptrCmd3,ptrCmd4; _ConnectionPtr ptrCnn; COleVariant vC; CBlokRtf m_Blk; CWords m_W; // CCnvrt16 m_Ch16; //CCmdTargetPrn c; //c.BeginWaitCursor(); ptrCnn = ptrCon; //Соединение CRecSetProc* pR=new CRecSetProc; CString m_strNum,m_strDate,m_strDecDate,s,sEnd,strCopy; CString m_strNumDec,strSls,strO; CString m_strWe1,m_strWe2,m_strInd,m_strOKOHX,m_strOKOH; CString m_strVnd,m_strIndVnd,m_strOKOHXV,m_strOKOHV,strCst,m_strCnsgr; // char* m_bsConn; bool m_bBN; int iFind,iNum,i; // № нак iFind=strCod.Find('~'); m_strNum = strCod.Left(iFind); m_strNumDec = m_strNum; // дата iNum = strCod.Find('~',iFind+1); m_strDecDate = strCod.Mid(iFind+1,iNum-iFind-1); iFind = iNum; // код продовца iNum = strCod.Find('~',iFind+1); strSls = strCod.Mid(iFind+1,iNum-iFind-1); iFind = iNum; iFind = strCod.ReverseFind('~'); m_strDate = strCod.Mid(iFind+1); m_strNT = strNT; // m_bsConn = bsConn; //AfxMessageBox(strAcc); iFind=strAcc.Find('~'); // код грузополучателя m_strCR = strAcc.Left(iFind); iNum = strAcc.Find('~',iFind+1); // Код адреса доставки m_strCRAdr = strAcc.Mid(iFind+1,iNum-iFind-1); iFind = iNum; iNum = strAcc.Find('~',iFind+1); // Код расч.сч. продовца m_strCSA = strAcc.Mid(iFind+1,iNum-iFind-1); iFind = iNum; iFind = strAcc.ReverseFind('~'); // Код e-mail m_strCREm = strAcc.Mid(iFind+1); CString strFlNmBill; CString strPath; strPath = _T(""); //_T("D:\\MyProjects\\Strg\\Debug\\"); s = m_strDate;// s.Remove('-'); strFlNmBill = strPathOut; strFlNmBill+= _T("СЧ_"); strFlNmBill+= m_strNum + _T("_"); strFlNmBill+= s + _T(".rtf"); int lw; lw = MultiByteToWideChar(CP_ACP,0,strFlNmBill,-1,NULL,0); // s.Format(_T("lw = %i"),lw); // AfxMessageBox(s); WCHAR* strW = new WCHAR[lw]; MultiByteToWideChar(CP_ACP,0,strFlNmBill,-1,strW,lw); // strNZ = m_strNZ; wcscpy_s(strWDoc,lw,strW); // strNZ=strW; //AfxMessageBox("exit from RprCmdTs"); //AfxMessageBox(strNZ); delete strW; // strDoc = strFlNmBill; m_vNULL.vt = VT_ERROR; m_vNULL.scode = DISP_E_PARAMNOTFOUND; ptrCmd4 = NULL; ptrRs4 = NULL; ptrCmd4.CreateInstance(__uuidof(Command)); ptrCmd4->ActiveConnection = ptrCnn; ptrCmd4->CommandType = adCmdText; ptrRs4.CreateInstance(__uuidof(Recordset)); ptrRs4->CursorLocation = adUseClient; ptrRs4->PutRefSource(ptrCmd4); ptrCmd3 = NULL; ptrRs3 = NULL; ptrCmd3.CreateInstance(__uuidof(Command)); ptrCmd3->ActiveConnection = ptrCnn; ptrCmd3->CommandType = adCmdText; ptrRs3.CreateInstance(__uuidof(Recordset)); ptrRs3->CursorLocation = adUseClient; ptrRs3->PutRefSource(ptrCmd3); ptrCmd2 = NULL; ptrRs2 = NULL; ptrCmd2.CreateInstance(__uuidof(Command)); ptrCmd2->ActiveConnection = ptrCnn; ptrCmd2->CommandType = adCmdText; ptrRs2.CreateInstance(__uuidof(Recordset)); ptrRs2->CursorLocation = adUseClient; ptrRs2->PutRefSource(ptrCmd2); ptrCmd1 = NULL; ptrRs1 = NULL; ptrCmd1.CreateInstance(__uuidof(Command)); ptrCmd1->ActiveConnection = ptrCnn; ptrCmd1->CommandType = adCmdText; ptrRs1.CreateInstance(__uuidof(Recordset)); ptrRs1->CursorLocation = adUseClient; ptrRs1->PutRefSource(ptrCmd1); // Входящие шаблоны CStdioFile inBill; // Счёт // Исходящий файл CStdioFile otBill; strCur = m_strNum + _T(",'"); strCur+= m_strDate + _T("'"); strSql = _T("RT24NBill "); //RT24Bill strSql+= strCur; //AfxMessageBox(strSql ); //AfxMessageBox(strAcc); ptrCmd1->CommandText = (_bstr_t)strSql; try{ if(ptrRs1->State==adStateOpen) ptrRs1->Close(); ptrRs1->Open(m_vNULL,m_vNULL,adOpenDynamic,adLockOptimistic,adCmdText); if(!pR->IsEmptyRec(ptrRs1)) { i = 9; //Код продовца vC=pR->GetValueRec(ptrRs1,i); vC.ChangeType(VT_BSTR); strSls = vC.bstrVal; strSls.TrimLeft(); strSls.TrimRight(); i = 8; //Код покупателя vC=pR->GetValueRec(ptrRs1,i); vC.ChangeType(VT_BSTR); strCst = vC.bstrVal; strCst.TrimLeft(); strCst.TrimRight(); } } catch(_com_error& e){ AfxMessageBox(e.ErrorMessage()); if(ptrRs1->State==adStateOpen) ptrRs1->Close(); ptrRs1=NULL; if(ptrRs2->State==adStateOpen) ptrRs2->Close(); ptrRs2=NULL; if(ptrRs3->State==adStateOpen) ptrRs3->Close(); ptrRs3=NULL; if(ptrRs4->State==adStateOpen) ptrRs4->Close(); ptrRs4=NULL; return FALSE; } CStringArray aHd; int iRpl = 25; // строки которые будут меняться (на 1 больше) aHd.SetSize(iRpl); for(i=0;i<iRpl;i++){ aHd.SetAt(i,_T("")); } CString m_strSls; /*----------------------------- ПРОДАВЕЦ-----------------------*/ /* bsCmd = _T("RT38Sls "); bsCmd+= (_bstr_t)strSls +_T(","); bsCmd+= _T("2,"); // Юридический адрес bsCmd+= (_bstr_t)strAcc; */ strSql = _T("RT38Sls_1 "); //Мы RT38Sls strSql+= strSls + _T(",2,"); //Юр адрес - 2 strSql+= m_strCSA; //Код расч.сч. продовца ptrCmd2->CommandText = (_bstr_t)strSql; //AfxMessageBox(strSql); try{ //---------------------------------------Про Продовца if(ptrRs2->State==adStateOpen) ptrRs2->Close(); ptrRs2->Open(m_vNULL,m_vNULL,adOpenDynamic,adLockOptimistic,adCmdText); if(!pR->IsEmptyRec(ptrRs2)) { i=1; vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); m_strSls = vC.bstrVal; m_strSls.TrimLeft(); m_strSls.TrimRight(); m_strSls+= _T(" "); i=2; vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; s.TrimLeft(); s.TrimRight(); m_strSls+= s; aHd.SetAt(1,m_strSls); // Наименование i=3; //Индекс vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); m_strSls = vC.bstrVal; m_strSls.TrimLeft(); m_strSls.TrimRight(); m_strSls+= _T(","); i=4; //Адрес юридический vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; s.TrimLeft(); s.TrimRight(); m_strSls+=s + _T(", "); i=5; // тел vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; s.TrimLeft(); s.TrimRight(); // m_strSls+=_T("тел.: ") + s; m_strSls+= s; aHd.SetAt(2,m_strSls); // Адрес,тел i=8; vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; s.TrimLeft(); s.TrimRight(); // m_strSls=_T("ИНН/КПП "); m_strSls+= s; aHd.SetAt(3,m_strSls); // ИНН/КПП aHd.SetAt(4,aHd.GetAt(1)); i=6; // Расч. счёт vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); m_strSls = vC.bstrVal; m_strSls.TrimLeft(); m_strSls.TrimRight(); aHd.SetAt(5,m_strSls); i=7; //Банк vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); m_strSls = vC.bstrVal; m_strSls.TrimLeft(); m_strSls.TrimRight(); aHd.SetAt(8,m_strSls); // Банк i=11; //БИК vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); m_strSls = vC.bstrVal; m_strSls.TrimLeft(); m_strSls.TrimRight(); aHd.SetAt(9,m_strSls); // БИК i=12; // Кор.счёт vC=pR->GetValueRec(ptrRs2,i); vC.ChangeType(VT_BSTR); m_strSls = vC.bstrVal; m_strSls.TrimLeft(); m_strSls.TrimRight(); aHd.SetAt(11,m_strSls); // Кор.счёт } } catch(_com_error& e){ AfxMessageBox(e.ErrorMessage()); if(ptrRs1->State==adStateOpen) ptrRs1->Close(); ptrRs1=NULL; if(ptrRs2->State==adStateOpen) ptrRs2->Close(); ptrRs2=NULL; if(ptrRs3->State==adStateOpen) ptrRs3->Close(); ptrRs3=NULL; if(ptrRs4->State==adStateOpen) ptrRs4->Close(); ptrRs4=NULL; return FALSE; } ptrRs2->Close(); /*--------------------------- ПОКУПАТЕЛЬ-----------------------*/ CString m_strCst; /* bsCmd = _T("RT38Cst "); bsCmd+= (_bstr_t)strCst +_T(","); bsCmd+= _T("2,"); // Юридический адрес bsCmd+= _T("1"); // Только Наименование */ strSql = _T("RT38Cst_1 "); //Они strSql+= strCst + _T(",2,"); strSql+= _T("0"); //AfxMessageBox(strSql); ptrCmd3->CommandText = (_bstr_t)strSql; try{ if(ptrRs3->State==adStateOpen) ptrRs3->Close(); //AfxMessageBox(strSql); ptrRs3->Open(m_vNULL,m_vNULL,adOpenDynamic,adLockOptimistic,adCmdText); if(!pR->IsEmptyRec(ptrRs3)){ i=1; vC=pR->GetValueRec(ptrRs3,i); vC.ChangeType(VT_BSTR); m_strCst = vC.bstrVal; m_strCst+= _T(" "); i=2; vC=pR->GetValueRec(ptrRs3,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; m_strCst+= s; aHd.SetAt(15,m_strCst); // Плательщик } } catch(_com_error& e){ AfxMessageBox(e.ErrorMessage()); if(ptrRs1->State==adStateOpen) ptrRs1->Close(); ptrRs1=NULL; if(ptrRs2->State==adStateOpen) ptrRs2->Close(); ptrRs2=NULL; if(ptrRs3->State==adStateOpen) ptrRs3->Close(); ptrRs3=NULL; if(ptrRs4->State==adStateOpen) ptrRs4->Close(); ptrRs4=NULL; return FALSE; } //------------------------------------- про Грузополучателей strSql = _T("RT38Cnsgr "); strSql+= m_strCR + _T(","); //Код грузополучателя strSql+= m_strCRAdr+ _T(","); //Код адреса доставки strSql+= _T("1"); //не полная инф //AfxMessageBox(strSql); ptrCmd4->CommandText = (_bstr_t)strSql; try{ if(ptrRs4->State==adStateOpen) ptrRs4->Close(); ptrRs4->Open(m_vNULL,m_vNULL,adOpenDynamic,adLockOptimistic,adCmdText); if(!pR->IsEmptyRec(ptrRs4)){ i=1; //Вид собственности vC=pR->GetValueRec(ptrRs4,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; s.TrimLeft(); s.TrimRight(); m_strCnsgr+= s +_T(" "); i=2; //Наименование vC=pR->GetValueRec(ptrRs4,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; s.TrimLeft(); s.TrimRight(); m_strCnsgr+= s; aHd.SetAt(16,m_strCnsgr); // Грузополучатель //AfxMessageBox(m_strCnsgr); } } catch(_com_error& e){ AfxMessageBox(e.ErrorMessage()); if(ptrRs1->State==adStateOpen) ptrRs1->Close(); ptrRs1=NULL; if(ptrRs2->State==adStateOpen) ptrRs2->Close(); ptrRs2=NULL; if(ptrRs3->State==adStateOpen) ptrRs3->Close(); ptrRs3=NULL; if(ptrRs4->State==adStateOpen) ptrRs4->Close(); ptrRs4=NULL; return FALSE; } aHd.SetAt(12,m_strNum); // № CString sD,sMY,sDMY; sD = m_strDecDate.Left(m_strDecDate.Find(_T("."))); sD = _T("\" ")+sD; sD+= _T(" \""); aHd.SetAt(13,sD); sDMY= m_W.GetWrdMnth(m_strDecDate,1,true); sMY = sDMY.Mid(sDMY.Find(" ")); aHd.SetAt(14,sMY); aHd.SetAt(23,_T("Головина О.В.")); //Фильцов Д.Н. aHd.SetAt(24,_T("Радостева М.С.")); //Ермакова Е.В. //************************* Работа с файлами int curPos = 0; CString strBuf = _T(""); try{ s = strPath + _T("Bill.rtf"); otBill.Open(strFlNmBill,CFile::modeCreate|CFile::modeReadWrite|CFile::typeText); inBill.Open(s,CFile::modeRead|CFile::shareDenyNone); CString strBuf=_T(""); CString strRpl=_T(""); int j=1; CString strFnd; bool theEnd=true; //---------------------------заполняю Шапку strFnd.Format("~%i~",j); while(theEnd){ inBill.ReadString(strBuf); // s=strBuf; strFnd.Format("~%i~",j); m_Blk.SetRplStrR(strBuf,strFnd,j,aHd); curPos = inBill.GetPosition(); //AfxMessageBox("ВХОД = "+s+'\n'+'\n'+"ВЫХОД = "+strBuf+'\n'+'\n'+strFnd); otBill.WriteString(strBuf); if(j==17){ theEnd = false; // AfxMessageBox("ok"); } } // m_Blk.Control(inBill,300); m_Blk.GetStdPWt(strBuf,inBill,otBill, _T("\\row }\\trowd"),curPos); // m_Blk.Control(inBill,300); m_Blk.GetStdPWt(strBuf,inBill,otBill, _T("{1\\cell "),curPos); // m_Blk.Control(inBill,300); m_Blk.GetStdPWt(strBuf,inBill,otBill, _T("\\pard \\qc "),curPos); // m_Blk.Control(inBill,300); CString strSrc=_T(""); m_Blk.GetStdPWS(strBuf,inBill,otBill, _T("\\pard \\ql"),curPos,strSrc); // s.Format("Поиск strSrc После GetStdPWS curPos = %i",curPos); //AfxMessageBox(s+'\n'+"strSrc = "+strSrc); // m_Blk.Control(inBill,300); CString strPst=_T(""); m_Blk.GetStdPWS(strBuf,inBill,otBill, _T("\\trowd"),curPos,strPst); curPos++; inBill.Seek(curPos,CFile::begin); strPst+=_T("\\"); m_Blk.GetStdPWS(strBuf,inBill,otBill, _T("\\trowd"),curPos,strPst); // s.Format("Поиск strPst После GetStdPWS curPos = %i",curPos); //AfxMessageBox(s+'\n'+"strPst = "+strPst); // m_Blk.Control(inBill,300); CString strNew; long Num = ptrRs1->GetRecordCount(); // s = m_W.GetWords(Num,false,false,true); s.Format("%i",Num); s.TrimRight(); aHd.SetAt(20,s); // Порядковых номеров //AfxMessageBox(s); double d17,d18,d19,dT; d17=d18=d19=dT=0; for(int x=1;x<=Num;x++){ // otInvOrd.WriteString(strPrv); //AfxMessageBox(strSrc); strNew = pR->OnFillRow(ptrRs1,strSrc,6,x, d17, d18, d19); //AfxMessageBox(strNew); vC = pR->GetValueRec(ptrRs1,5); vC.ChangeType(VT_R8); dT = vC.dblVal; d18 +=dT; vC = pR->GetValueRec(ptrRs1,6); vC.ChangeType(VT_R8); dT = vC.dblVal; d19 +=dT; otBill.WriteString(strNew); otBill.WriteString(strPst); ptrRs1->MoveNext(); } s.Format("%16.4f",d17); s.TrimRight(); s.TrimLeft(); aHd.SetAt(17,s); // Итого s.Format("%16.4f",d18); s.TrimRight(); s.TrimLeft(); aHd.SetAt(18,s); // Итого НДС s.Format("%16.2f",d19); s.TrimRight(); s.TrimLeft(); aHd.SetAt(19,s); // Всего к оплате aHd.SetAt(21,s); // на сумму s = m_W.GetWords(d19,true,true,true); aHd.SetAt(22,s); // на сумму прописью while(inBill.ReadString(strBuf)){ // s= strBuf; strFnd.Format("~%i~",j); m_Blk.SetRplStrR(strBuf,strFnd,j,aHd); //AfxMessageBox("ВХОД = "+s+'\n'+'\n'+"ВЫХОД = "+strBuf+'\n'+'\n'+strFnd); otBill.WriteString(strBuf); } inBill.Close(); otBill.Close(); } catch(CFileException* fx){ TCHAR buf[255]; fx->GetErrorMessage(buf,255); // AfxMessageBox(buf); fx->Delete(); } delete pR; //c.EndWaitCursor(); // AfxSetResourceHandle(hInstResClnt); if(ptrRs1->State==adStateOpen) ptrRs1->Close(); ptrRs1=NULL; if(ptrRs2->State==adStateOpen) ptrRs2->Close(); ptrRs2=NULL; if(ptrRs3->State==adStateOpen) ptrRs3->Close(); ptrRs3=NULL; if(ptrRs4->State==adStateOpen) ptrRs4->Close(); ptrRs4=NULL; return TRUE; }
BOOL CCJListCtrl::SortTextItems( int nCol, BOOL bAscending, int low /*= 0*/, int high /*= -1*/ ) { if( nCol >= ((CHeaderCtrl*)GetDlgItem(0))->GetItemCount() ) return FALSE; if( high == -1 ) high = GetItemCount() - 1; int lo = low; int hi = high; CString midItem; if( hi <= lo ) return FALSE; midItem = GetItemText( (lo+hi)/2, nCol ); // loop through the list until indices cross while( lo <= hi ) { // rowText will hold all column text for one row CStringArray rowText; // find the first element that is greater than or equal to // the partition element starting from the left Index. if( bAscending ) { while( ( lo < high ) && ( GetItemText(lo, nCol) < midItem ) ) ++lo; } else { while( ( lo < high ) && ( GetItemText(lo, nCol) > midItem ) ) ++lo; } // find an element that is smaller than or equal to // the partition element starting from the right Index. if( bAscending ) { while( ( hi > low ) && ( GetItemText(hi, nCol) > midItem ) ) --hi; } else { while( ( hi > low ) && ( GetItemText(hi, nCol) < midItem ) ) --hi; } // if the indexes have not crossed, swap // and if the items are not equal if( lo <= hi ) { // swap only if the items are not equal if( GetItemText(lo, nCol) != GetItemText(hi, nCol)) { // swap the rows LV_ITEM lvitemlo, lvitemhi; int nColCount = ((CHeaderCtrl*)GetDlgItem(0))->GetItemCount(); rowText.SetSize( nColCount ); int i; for( i=0; i<nColCount; i++) rowText[i] = GetItemText(lo, i); lvitemlo.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; lvitemlo.iItem = lo; lvitemlo.iSubItem = 0; lvitemlo.stateMask = LVIS_CUT | LVIS_DROPHILITED | LVIS_FOCUSED | LVIS_SELECTED | LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK; lvitemhi = lvitemlo; lvitemhi.iItem = hi; GetItem( &lvitemlo ); GetItem( &lvitemhi ); for( i=0; i<nColCount; i++) SetItemText(lo, i, GetItemText(hi, i)); lvitemhi.iItem = lo; SetItem( &lvitemhi ); for( i=0; i<nColCount; i++) SetItemText(hi, i, rowText[i]); lvitemlo.iItem = hi; SetItem( &lvitemlo ); } ++lo; --hi; } } // If the right index has not reached the left side of array // must now sort the left partition. if( low < hi ) SortTextItems( nCol, bAscending , low, hi); // If the left index has not reached the right side of array // must now sort the right partition. if( lo < high ) SortTextItems( nCol, bAscending , lo, high ); return TRUE; }
extern "C" _declspec(dllexport) BOOL startRprCmdTsk(CString strNT, _ConnectionPtr ptrCon, char* strCd, char* strPthOt, char* strAc, WCHAR* strNZ){ // HINSTANCE hInstResClnt; // hInstResClnt = AfxGetResourceHandle(); //AfxMessageBox(_T("startRprCmdTsk")); AfxSetResourceHandle(::GetModuleHandle("RprCmdTsk.dll")); // char* sANZ; CStringArray strANZ; strANZ.SetSize(1); for(int n=0;n<1;n++){ strANZ.SetAt(n,_T("")); } CString curStr,strTmp,m_strNZ; CString strCod,strAcc,strPathOut; m_strNZ = _T(""); strCod = strCd; strCod.TrimLeft(); strCod.TrimRight(); strPathOut = strPthOt; strPathOut.TrimLeft(); strPathOut.TrimRight(); strAcc = strAc; strAcc.TrimLeft(); strAcc.TrimRight(); CString strCur,strSql,strCSls; CString m_strNT; CString m_strCR; //Код грузополучателя CString m_strCRAdr; //Код адреса доставки CString m_strCSA; //Код расч.сч. продовца CString m_strCREm; //Код e-mail // bPrint =false; //CCmdTarget c; //c.BeginWaitCursor(); _variant_t m_vNULL; _RecordsetPtr ptrRs1; _CommandPtr ptrCmd1; _ConnectionPtr ptrCnn; COleVariant vC; CBlokRtf m_Blk; CWords m_W; ptrCnn = ptrCon; //Соединение CRecSetProc* pR=NULL; CString m_strNum,m_strDate,m_strDecDate,sEnd,strCopy; CString s,sPrv,m_strNumDec,strSls; CString m_strWe1,m_strWe2,m_strInd,m_strOKOHX,m_strOKOH; CString m_strVnd,m_strIndVnd,m_strOKOHXV,m_strOKOHV; // CString m_strBN; // char* m_bsConn; int k=0; //Число складов для наряд заданий bool m_bBN; int iFind,iNum,i; // № нак iFind=strCod.Find('~'); m_strNum = strCod.Left(iFind); m_strNumDec = m_strNum; // дата iNum = strCod.Find('~',iFind+1); m_strDecDate = strCod.Mid(iFind+1,iNum-iFind-1); iFind = iNum; // код продовца iNum = strCod.Find('~',iFind+1); strSls = strCod.Mid(iFind+1,iNum-iFind-1); iFind = iNum; iFind = strCod.ReverseFind('~'); m_strDate = strCod.Mid(iFind+1); m_strNT = strNT; // Имена исходящих файлов CString strFlNmCmdTsk; CString strPath; strPath = _T(""); //_T("D:\\MyProjects\\Strg\\Debug\\"); s = m_strDate; s.Remove('-'); //AfxMessageBox(strAcc); iFind=strAcc.Find('~'); // код грузополучателя m_strCR = strAcc.Left(iFind); iNum = strAcc.Find('~',iFind+1); // Код адреса доставки m_strCRAdr = strAcc.Mid(iFind+1,iNum-iFind-1); iFind = iNum; iNum = strAcc.Find('~',iFind+1); // Код расч.сч. продовца m_strCSA = strAcc.Mid(iFind+1,iNum-iFind-1); iFind = iNum; iFind = strAcc.ReverseFind('~'); // Код e-mail m_strCREm = strAcc.Mid(iFind+1); // Входящие шаблоны CStdioFile inCmdTsk; //Наряд-Задание // Исходящий файл CStdioFile otCmdTsk; const int iMAX = 1024; const int iMIN = 512; m_vNULL.vt = VT_ERROR; m_vNULL.scode = DISP_E_PARAMNOTFOUND; ptrCmd1 = NULL; ptrRs1 = NULL; ptrCmd1.CreateInstance(__uuidof(Command)); ptrCmd1->ActiveConnection = ptrCnn; ptrCmd1->CommandType = adCmdText; ptrRs1.CreateInstance(__uuidof(Recordset)); ptrRs1->CursorLocation = adUseClient; ptrRs1->PutRefSource(ptrCmd1); CStringArray aHd; int iRpl = 6; // строки которые будут меняться (на 1 больше) aHd.SetSize(iRpl); for(i=0;i<iRpl;i++){ aHd.SetAt(i,_T("")); } strCur = m_strNum + _T(",'"); strCur+= m_strDate + _T("'"); aHd.SetAt(1,m_strNumDec+_T(" ")+m_strDecDate); strSql = _T("RT24NCmdTsk "); strSql+=strCur; //AfxMessageBox(strSql); ptrCmd1->CommandText = (_bstr_t)strSql; try{ if(ptrRs1->State==adStateOpen) ptrRs1->Close(); ptrRs1->Open(m_vNULL,m_vNULL,adOpenDynamic,adLockOptimistic,adCmdText); if(!pR->IsEmptyRec(ptrRs1)){ i=4; //Основание vC=pR->GetValueRec(ptrRs1,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; aHd.SetAt(4,s); // Основание //AfxMessageBox(s); i = 9; vC = pR->GetValueRec(ptrRs1,i); vC.ChangeType(VT_BSTR); s = vC.bstrVal; aHd.SetAt(3,s); // Покупатель // bsCmd = _T("RT38 "); //Они // bsCmd+= (_bstr_t)s + _T(",2"); //AfxMessageBox(bsCmd); // if(rsWe->State==adStateOpen) rsWe->Close(); // // rsWe->Open(bsCmd,cn->ConnectionString,adOpenKeyset,adLockReadOnly,adCmdText);//adCmdStoredProc // if(!pR->IsEmptyRec(rsWe)){ CString strAdr; int Num =ptrRs1->GetRecordCount(); typedef CArray<int,int&> aRec; //Сколько записей //по складу ptrRs1->MoveFirst(); vC = pR->GetValueRec(ptrRs1,5); // № Склада vC.ChangeType(VT_BSTR); sPrv = vC.bstrVal; aRec aRecSt; int r=1; aRecSt.Add(r); s=_T(""); for(i=2;i<=Num;i++){ ptrRs1->MoveNext(); vC = pR->GetValueRec(ptrRs1,5); vC.ChangeType(VT_BSTR); s = vC.bstrVal; if(sPrv!=s){ k++; r=1; aRecSt.Add(r); sPrv=s; } else{ r++; aRecSt.SetAt(k,r); // s.Format("k = %i, r = %i",k,r); //AfxMessageBox(s); } } k = aRecSt.GetSize(); //s.Format("k = %i",k); //AfxMessageBox(s); i=0; ptrRs1->MoveFirst(); while(i<k){ CString strNum=_T(""); CString strStg = _T(""); vC = pR->GetValueRec(ptrRs1,5); // № Склада vC.ChangeType(VT_BSTR); strStg = vC.bstrVal; aHd.SetAt(2,strStg); //********************************* Работа с файлами int curPos = 0; CString strBuf = _T(""); s = m_strDate; s.Remove('-'); strFlNmCmdTsk = strPathOut; strFlNmCmdTsk+= _T("НЗ_"); strFlNmCmdTsk+= m_strNumDec + _T("_"); strFlNmCmdTsk+= s + _T("_"); strFlNmCmdTsk+= strStg + _T(".rtf"); if(strANZ.GetAt(0)==_T("")){ strANZ.SetAt(0,strFlNmCmdTsk); } else{ strANZ.Add(strFlNmCmdTsk); } //AfxMessageBox((LPCTSTR)strNZ.GetAt(i)); try{ // strFlNmCmdTsk+= s + _T(".rtf"); //AfxMessageBox(strFlNmCmdTsk); otCmdTsk.Open(strFlNmCmdTsk,CFile::modeCreate|CFile::modeReadWrite|CFile::typeText); s = strPath + _T("CmdTsk.rtf"); inCmdTsk.Open(s,CFile::modeRead|CFile::shareDenyNone); //AfxMessageBox(s); CString strBuf=_T(""); CString strRpl=_T(""); int j=1; CString strFnd; bool theEnd=true; //---------------------------Заполняю Шаку strFnd.Format("~%i~",j); while(theEnd){ inCmdTsk.ReadString(strBuf); //s=strBuf; strFnd.Format("~%i~",j); m_Blk.SetRplStrR(strBuf,strFnd,j,aHd); curPos = inCmdTsk.GetPosition(); //AfxMessageBox("ВХОД = "+s+'\n'+'\n'+"ВЫХОД = "+strBuf+'\n'+'\n'+strFnd); otCmdTsk.WriteString(strBuf); if(j==5){ theEnd = false; } } //------------------------------------ Конец Шапки //{\cell } m_Blk.GetStdPWt(strBuf,inCmdTsk,otCmdTsk, _T("{\\cell }"),curPos); // m_Blk.Control(inCmdTsk,300); CString strSrc=_T(""); m_Blk.GetStdPWS(strBuf,inCmdTsk,otCmdTsk, _T("\\pard \\ql"),curPos,strSrc); curPos++; inCmdTsk.Seek(curPos,CFile::begin); strSrc+=_T("\\"); m_Blk.GetStdPWS(strBuf,inCmdTsk,otCmdTsk, _T("\\pard \\ql"),curPos,strSrc); // s.Format("Поиск strSrc После GetStdPWS curPos = %i",curPos); //AfxMessageBox(s+'\n'+"strSrc = "+strSrc); // m_Blk.Control(inCmdTsk,100); CString strPst=_T(""); m_Blk.GetStdPWS(strBuf,inCmdTsk,otCmdTsk, _T("\\trowd"),curPos,strPst); curPos++; inCmdTsk.Seek(curPos,CFile::begin); strPst+=_T("\\"); m_Blk.GetStdPWS(strBuf,inCmdTsk,otCmdTsk, _T("\\trowd"),curPos,strPst); // s.Format("Поиск strPst После GetStdPWS curPos = %i",curPos); //AfxMessageBox(s+'\n'+"strPst = "+strPst); // m_Blk.Control(inCmdTsk,100); // s.Format("i =%i",aRecSt.GetAt(i)); //AfxMessageBox(s); int i5=0; CString strNew=_T(""); for(int x=1;x<=aRecSt.GetAt(i);x++){ strNew = pR->OnFillRow(ptrRs1,strSrc,5,x,i5); //AfxMessageBox(_T("strSrc = ")+'\n'+strSrc+'\n'+_T("strNew = ")+'\n'+strNew); otCmdTsk.WriteString(strNew); otCmdTsk.WriteString(strPst); ptrRs1->MoveNext(); // s.Format("x = %i",x); //AfxMessageBox(s); } m_Blk.GetStdPWt(strBuf,inCmdTsk,otCmdTsk, _T("\\cell }\\pard"),curPos); // m_Blk.Control(inCmdTsk,300); CString strSrc2=_T(""); m_Blk.GetStdPWS(strBuf,inCmdTsk,otCmdTsk, _T("\\pard \\ql"),curPos,strSrc2); // s.Format("Поиск strSrc2 После GetStdPWS curPos = %i",curPos); // AfxMessageBox(s+'\n'+"strSrc2 = "+strSrc2); // m_Blk.Control(inCmdTsk,100); CString strNew2=_T(""); strNew2 = pR->OnFillTtl(strSrc2,i5,1); // AfxMessageBox("strNew2 = "+'\n'+strNew2); otCmdTsk.WriteString(strNew2); s = m_W.GetWords(i5,false,false,true); aHd.SetAt(5,s); // Общее кол-во // while(inCmdTsk.ReadString(strBuf)){ // otCmdTsk.WriteString(strBuf); // } while(inCmdTsk.ReadString(strBuf)){ // s= strBuf; strFnd.Format("~%i~",j); m_Blk.SetRplStrR(strBuf,strFnd,j,aHd); //AfxMessageBox("ВХОД = "+s+'\n'+'\n'+"ВЫХОД = "+strBuf+'\n'+'\n'+strFnd); otCmdTsk.WriteString(strBuf); } otCmdTsk.Close(); } catch(CFileException* fx){ TCHAR buf[255]; fx->GetErrorMessage(buf,255); // AfxMessageBox(buf); fx->Delete(); } i++; inCmdTsk.Close(); //s.Format("i = %i",i); //AfxMessageBox(s); // } } /*AfxMessageBox(_T("Begin")); for(int c=0;c<strNZ.GetSize();c++){ s.Format(_T("c=%i Size = %i"),c,strNZ.GetSize()); AfxMessageBox(s); AfxMessageBox((LPCTSTR)strNZ.GetAt(c)); AfxMessageBox(s); } AfxMessageBox(_T("End"));*/ } } catch(_com_error& e){ AfxMessageBox(e.ErrorMessage()); if(ptrRs1->State == adStateOpen) ptrRs1->Close(); ptrRs1 = NULL; } //c.EndWaitCursor(); // AfxSetResourceHandle(hInstResClnt); if(ptrRs1->State == adStateOpen) ptrRs1->Close(); ptrRs1 = NULL; i = 0; while(i<k){ if(i==0){ m_strNZ =strANZ.GetAt(i); } else{ m_strNZ+= _T("~")+strANZ.GetAt(i); } i++; } //AfxMessageBox(m_strNZ); //strNZ = m_strNZ.GetBufferSetLength(m_strNZ.GetLength()); int lw; lw = MultiByteToWideChar(CP_ACP,0,m_strNZ,-1,NULL,0); // s.Format(_T("lw = %i"),lw); // AfxMessageBox(s); WCHAR* strW = new WCHAR[lw]; MultiByteToWideChar(CP_ACP,0,m_strNZ,-1,strW,lw); // strNZ = m_strNZ; wcscpy_s(strNZ,lw,strW); // strNZ=strW; //AfxMessageBox("exit from RprCmdTs"); //AfxMessageBox(strNZ); delete strW; return TRUE; }
// 版本转换 BOOL CCheckRuleXMLParse::RuleConvertor(int nRuleType, const CString &strRuleContent, CStringArray& arrRuleContent) { if (strRuleContent.IsEmpty()) return FALSE; int nIndex = -1; CString strTemp; switch (nRuleType) { // 第1类:规则参数内部无空格,按照空格拆分 case CRT_MDL_NAME: case CRT_FEA_NAME: case CRT_PARA: case CRT_TOL: case CRT_APPEARANCE: case CRT_MDL_COMMON_NAME: case CRT_QUALITY: case CRT_ASS_FAM_INSTNAME: case CRT_ASS_FAM_INSTPARAVALID: case CRT_ROUND_RAD: case CRT_CHAMFER_DIM: case CRT_HOLE_PART_EDGE_DIS: case CRT_DRW_SHEET_TEXT_SIZE: case CRT_DRW_DIM_TEXT_STYLE: case CRT_DRW_NOTE_TEXT_STYLE: CStringToCStringArray(strRuleContent, arrRuleContent); break; // 第2类:规则参数只有1个,直接赋值 case CRT_MAT: case CRT_MDL_MATDENS: case CRT_ASS_FEA_FOR_LAST: case CRT_ASS_MDL_CMD: case CRT_CHAMFER_ANG: case CRT_SHELL_THICKNESS: case CRT_DRAFT_ANGLE: case CRT_DEEP_HOLE: case CRT_HOLE_DIS: case CRT_HOLE_AXIS_IN_MATERIAL: case CRT_LONG_AXIS: case CRT_AXIS_SHOULDER_ANG: case CRT_PART_MAX_SIZE: case CRT_FEA_MIN_SIZE: case CRT_DEEP_FILLET: case CRT_DRW_SHEET_SIZE: case CRT_DRW_SHEET_ANGLE: case CRT_DRW_SHEET_TEXT_FONT: case CRT_DRW_SHEET_SCALE: arrRuleContent.SetSize(1); arrRuleContent.SetAt(0, strRuleContent); break; // 第3类:特殊 case CRT_UNIT: CStringToCStringArray(strRuleContent, arrRuleContent, L"#"); break; case CRT_HOLE_DIA: nIndex = strRuleContent.Find(L" "); if (nIndex >= 0 ) { strTemp = strRuleContent.Left(nIndex); if (!strTemp.IsEmpty()) { arrRuleContent.SetSize(2); arrRuleContent.SetAt(0, strTemp); strTemp = strRuleContent.Mid(nIndex + 1); arrRuleContent.SetAt(1, strTemp); } } break; default: break; } return TRUE; }
bool EventDlg::CopyToClipboard(bool bAll, bool bHeaders) { const PTCHAR _cediteol = "\r\n"; if ( !OpenClipboard() ) { AfxMessageBox( "Cannot open the Clipboard" ); return true; } // Remove the current Clipboard contents if( !EmptyClipboard() ) { AfxMessageBox( "Cannot empty the Clipboard" ); return true; } // Get the currently selected data int nItem, j, tlen, headeroffset; const int ic = m_List.GetItemCount(); CStringArray a; a.SetSize(ic); tlen = 0; headeroffset = 0; if (bHeaders) { CString s; for (j = efhFacility; j < efhHeaderCount; j++) { UINT icol = j; // direct mapping from header id to header string s.Append(CFDMSApp::GetFileHeader(CSVFileHeaderIDs(icol))); s.AppendChar('\t'); } s.Append(_cediteol); a.SetAtGrow(0, s); tlen += s.GetLength(); headeroffset = 1; } // now for the rows for (nItem = 0; nItem < ic; nItem++) { if (!bAll && !m_List.GetItemState(nItem, LVIS_SELECTED)) continue; CString s = m_List.GetItemText(nItem,0); for (j = efhFacility; j < efhHeaderCount; j++) { if (j == efhDischMonth || j == efhDischYear) // blend of three columns into one continue; if (j == efhMeasMonth || j == efhMeasYear) // blend continue; UINT icol = ImpEditCol::m_fileheadermap[j]; if (j == efhDischDay) // build combined disch date { COleDateTime dt = m_List.GetDateTime(nItem, icol); s.Append(dt.Format("%d\t%m\t%Y")); } else if (j == efhMeasDay) // build combined meas date { COleDateTime dt = m_List.GetDateTime(nItem, icol); s.Append(dt.Format("%d\t%m\t%Y")); } else if (j == efhStatus) // get status from the related globals { s.Append("0"); // the status of all entries in an import dialog is always unmeasured } else if (j == efhMeasType) // convert string to number from the item text { CString cs; cs.Format("%d", tImageToMeasurementType(m_List.GetItemText(nItem,icol))); s.Append(cs); } else s.Append(m_List.GetItemText(nItem,icol)); s.AppendChar('\t'); } s.Append(_cediteol); a.SetAtGrow(nItem + headeroffset, s); tlen += s.GetLength(); } // Allocate a global memory object for the text. LPTSTR lptstrCopy; HGLOBAL hglbCopy; hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (tlen + 1) * sizeof(TCHAR)); if (hglbCopy == NULL) { CloseClipboard(); return true; } // Lock the handle and copy the text to the buffer. lptstrCopy = (LPSTR)GlobalLock(hglbCopy); lptstrCopy[0] = (TCHAR) 0; // null character for (nItem = 0; nItem < a.GetCount(); nItem++) { LPSTR b = a[nItem].GetBuffer(); size_t l = a[nItem].GetLength() * sizeof(TCHAR); strncat(lptstrCopy, b, l); } lptstrCopy[tlen] = (TCHAR) 0; // null character GlobalUnlock(hglbCopy); // Place the handle on the clipboard. // For the appropriate data formats... if ( SetClipboardData( CF_TEXT, hglbCopy ) == NULL ) { AfxMessageBox( "Unable to set Clipboard data" ); CloseClipboard(); return true; } CloseClipboard(); return true; }
double CompareFunctions(FUNC_COMPARE_METHOD nMethod, CFuncDescFile *pFile1, int nFile1FuncNdx, CFuncDescFile *pFile2, int nFile2FuncNdx, BOOL bBuildEditScript) { CFuncDesc *pFunction1; CFuncDesc *pFunction2; CStringArray zFunc1; CStringArray zFunc2; double nRetVal = 0; CString strTemp; m_bEditScriptValid = FALSE; m_EditScript.RemoveAll(); if ((pFile1 == NULL) || (pFile2 == NULL)) return nRetVal; pFunction1 = pFile1->GetFunc(nFile1FuncNdx); pFunction2 = pFile2->GetFunc(nFile2FuncNdx); if ((pFunction1 == NULL) || (pFunction2 == NULL)) return nRetVal; pFunction1->ExportToDiff(zFunc1); pFunction2->ExportToDiff(zFunc2); if ((zFunc1.GetSize() == 0) || (zFunc2.GetSize() == 0)) return nRetVal; if ((bBuildEditScript) && (nMethod == FCM_DYNPROG_XDROP)) { // Note: XDROP Method currently doesn't support building // of edit scripts, so if caller wants to build an // edit script and has selected this method, replace // it with the next best method that does support // edit scripts: nMethod = FCM_DYNPROG_GREEDY; } switch (nMethod) { case FCM_DYNPROG_XDROP: { // // The following algorithm comes from the following source: // "A Greedy Algorithm for Aligning DNA Sequences" // Zheng Zhang, Scott Schwartz, Lukas Wagner, and Webb Miller // Journal of Computational Biology // Volume 7, Numbers 1/2, 2000 // Mary Ann Liebert, Inc. // Pp. 203-214 // // p. 205 : Figure 2 : "A dynamic-programming X-drop algorithm" // // T' <- T <- S(0,0) <- 0 // k <- L <- U <- 0 // repeat { // k <- k + 1 // for i <- ceiling(L) to floor(U)+1 in steps of 1/2 do { // j <- k - i // if i is an integer then { // S(i, j) <- Max of: // S(i-1/2, j-1/2) + mat/2 if L <= i-1/2 <= U and a(i) = b(j) // S(i-1/2, j-1/2) + mis/2 if L <= i-1/2 <= U and a(i) != b(j) // S(i, j-1) + ind if i <= U // S(i-1, j) + ind if L <= i-1 // } else { // S(i, j) <- S(i-1/2, j-1/2) // + mat/2 if a(i+1/2) = b(j+1/2) // + mis/2 if a(i+1/2) != b(j+1/2) // } // T' <- max{T', S(i, j)} // if S(i, j) < (T - X) then S(i, j) <- -oo // } // L <- min{i : S(i, k-i) > -oo } // U <- max{i : S(i, k-i) > -oo } // L <- max{L, k+1-N} <<< Should be: L <- max{L, k+1/2-N} // U <- min{U, M-1} <<< Should be: U <- min(U, M-1/2} // T <- T' // } until L > U+1 // report T' // // Given: // arrays: a(1..M), b(1..N) containing the two strings to compare // mat : >0 : Weighting of a match // mis : <0 : Weighting of a mismatch // ind : <0 : Weighting of an insertion/deletion // X = Clipping level : If scoring falls more than X below the // best computed score thus far, then we don't consider // additional extensions for that alignment. Should // be >= 0 or -1 for infinity. // // Returning: // T' = Composite similarity score // // For programmatic efficiency, all S indexes have been changed from // 0, 1/2 to even/odd and the i loop runs as integers of even/odd // instead of 1/2 increments: // // Testing has also been done and it has been proven that the order of // the two arrays has no effect on the outcome. // // In the following, we will define oo as DBL_MAX and -oo as -DBL_MAX. // // To hold to the non-Generalized Greedy Algorithm requirements, set // ind = mis - mat/2 // CStringArray &a = zFunc1; CStringArray &b = zFunc2; double Tp, T; double **S; int i, j, k, L, U; double nTemp; int M = a.GetSize(); int N = b.GetSize(); const double mat = 2; const double mis = -2; const double ind = -3; const double X = -1; // Allocate Memory: S = new double*[((M+1)*2)]; if (S == NULL) { AfxThrowMemoryException(); return nRetVal; } for (i=0; i<((M+1)*2); i++) { S[i] = new double[((N+1)*2)]; if (S[i] == NULL) AfxThrowMemoryException(); } // Initialize: for (i=0; i<((M+1)*2); i++) { for (j=0; j<((N+1)*2); j++) { S[i][j] = -DBL_MAX; } } // Algorithm: Tp = T = S[0][0] = 0; k = L = U = 0; do { k = k + 2; for (i = L+((L & 0x1) ? 1 : 0); i <= (U - ((U & 0x1) ? 1 : 0) + 2); i++) { j = k - i; ASSERT(i >= 0); ASSERT(i < ((M+1)*2)); ASSERT(j >= 0); ASSERT(j < ((N+1)*2)); if ((i&1) == 0) { nTemp = -DBL_MAX; if ((L <= (i-1)) && ((i-1) <= U)) { // TODO : Improve A/B Comparison: if (a.GetAt((i/2)-1).CompareNoCase(b.GetAt((j/2)-1)) == 0) { nTemp = __max(nTemp, S[i-1][j-1] + mat/2); } else { nTemp = __max(nTemp, S[i-1][j-1] + mis/2); } } if (i <= U) { nTemp = __max(nTemp, S[i][j-2] + ind); } if (L <= (i-2)) { nTemp = __max(nTemp, S[i-2][j] + ind); } S[i][j] = nTemp; } else { // TODO : Improve A/B Comparison: if (a.GetAt(((i+1)/2)-1).CompareNoCase(b.GetAt(((j+1)/2)-1)) == 0) { S[i][j] = S[i-1][j-1] + mat/2; } else { S[i][j] = S[i-1][j-1] + mis/2; } } Tp = __max(Tp, S[i][j]); if ((X>=0) && (S[i][j] < (T-X))) S[i][j] = -DBL_MAX; } for (L = 0; L < ((M+1)*2); L++) { if ((k - L) < 0) continue; if ((k - L) >= ((N+1)*2)) continue; if (S[L][k-L] > -DBL_MAX) break; } if (L == ((M+1)*2)) L=INT_MAX; for (U=((M+1)*2)-1; U>=0; U--) { if ((k - U) < 0) continue; if ((k - U) >= ((N+1)*2)) continue; if (S[U][k-U] > -DBL_MAX) break; } if (U == -1) U=INT_MIN; L = __max(L, k + 1 - (N*2)); U = __min(U, (M*2) - 1); T = Tp; } while (L <= U+2); // If the two PrimaryLabels at the function's address don't match, decrement match by 1*mat. // This helps if there are two are more functions that the user has labeled that // are identical except for the labels: if (pFile1->GetPrimaryLabel(pFunction1->GetMainAddress()).CompareNoCase( pFile2->GetPrimaryLabel(pFunction2->GetMainAddress())) != 0) Tp = __max(0, Tp - mat); // Normalize it: nRetVal = Tp/(__max(M,N)*mat); // Deallocate Memory: for (i=0; i<((M+1)*2); i++) delete[] (S[i]); delete[] S; } break; case FCM_DYNPROG_GREEDY: { // // The following algorithm comes from the following source: // "A Greedy Algorithm for Aligning DNA Sequences" // Zheng Zhang, Scott Schwartz, Lukas Wagner, and Webb Miller // Journal of Computational Biology // Volume 7, Numbers 1/2, 2000 // Mary Ann Liebert, Inc. // Pp. 203-214 // // p. 209 : Figure 4 : "Greedy algorithm that is equivalent to the algorithm // of Figure 2 if ind = mis - mat/2." // // i <- 0 // while i < min{M, N} and a(i+1) = b(i+1) do i <- i + 1 // R(0, 0) <- i // T' <- T[0] <- S'(i+i, 0) // d <- L <- U <- 0 // repeat // d <- d + 1 // d' <- d - floor( (X + mat/2)/(mat - mis) ) - 1 // for k <- L - 1 to U + 1 do // i <- max of: // R(d-1, k-1) + 1 if L < k // R(d-1, k) + 1 if L <= k <= U // R(d-1, k+1) if k < U // j <- i - k // if i > -oo and S'(i+j, d) >= T[d'] - X then // while i<M, j<N, and a(i+1) = b(j+1) do // i <- i + 1; j <- j + 1 // R(d, k) <- i // T' <- max{T', S'(i+j, d)} // else R(d, k) <- -oo // T[d] <- T' // L <- min{k : R(d, k) > -oo} // U <- max{k : R(d, k) > -oo} // L <- max{L, max{k : R(d, k) = N + k} + 2} <<< Should be: L <- max{L, max{k : R(d, k) = N + k} + 1} // U <- min{U, min{k : R(d, k) = M } - 2} <<< Should be: U <- min{U, min{k : R(d, k) = M } - 1} // until L > U + 2 // report T' // // Given: // arrays: a(1..M), b(1..N) containing the two strings to compare // mat : >0 : Weighting of a match // mis : <0 : Weighting of a mismatch // ind : <0 : Weighting of an insertion/deletion // (Satisfying: ind = mis - mat/2) // X = Clipping level : If scoring falls more than X below the // best computed score thus far, then we don't consider // additional extensions for that alignment. Should // be >= 0 or -1 for infinity. // S'(i+j, d) = (i+j)*mat/2 - d*(mat-mis) // or S'(k, d) = k*mat/2 - d*(mat-mis) // // Returning: // T' = Composite similarity score // // Testing has also been done and it has been proven that the order of // the two arrays has no effect on the outcome. // // In the following it will be assumed that the number of mismatches // (i.e. array bounds) can't exceed M+N since the absolute maximum // edit script to go from an array of M objects to an array of N // objects is to perform M deletions and N insertions. However, // these differences can be tracked either forward or backward, so // the memory will be allocated for the full search field. // // We are also going to define -oo as being -2 since no index can be // lower than 0. The reason for the -2 instead of -1 is to allow // for the i=R(d,k)+1 calculations to still be below 0. That is // to say so that -oo + 1 = -oo // CStringArray &a = zFunc1; CStringArray &b = zFunc2; double Tp; // T' = Overall max for entire comparison double Tpp; // T'' = Overall max for current d value double *T; double nTemp; int **Rm; int *Rvisitmin; // Minimum k-index of R visited for a particular d (for speed) int *Rvisitmax; // Maximum k-index of R visited for a particular k (for speed) int i, j, k, L, U; int d, dp; int dbest, kbest; int M = a.GetSize(); int N = b.GetSize(); const int dmax = ((M+N)*2)+1; const int kmax = (M+N+1); const int rksize = (kmax*2)+1; const double mat = 2; const double mis = -2; const double X = -1; const int floored_d_offset = (int)((X+(mat/2))/(mat-mis)); #define Sp(x, y) ((double)((x)*(mat/2) - ((y)*(mat-mis)))) #define R(x, y) (Rm[(x)][(y)+kmax]) // Allocate Memory: T = new double[dmax]; if (T == NULL) { AfxThrowMemoryException(); return nRetVal; } Rvisitmin = new int[dmax]; if (Rvisitmin == NULL) { AfxThrowMemoryException(); delete T; return nRetVal; } Rvisitmax = new int[dmax]; if (Rvisitmax == NULL) { AfxThrowMemoryException(); delete T; delete Rvisitmin; return nRetVal; } Rm = new int*[dmax]; if (Rm == NULL) { AfxThrowMemoryException(); delete T; delete Rvisitmin; delete Rvisitmax; return nRetVal; } for (i=0; i<dmax; i++) { Rm[i] = new int[rksize]; if (Rm[i] == NULL) AfxThrowMemoryException(); } // Initialize: for (i=0; i<dmax; i++) { T[i] = 0; Rvisitmin[i] = kmax+1; Rvisitmax[i] = -kmax-1; for (j=0; j<rksize; j++) { Rm[i][j] = -2; } } // Algorithm: i=0; // TODO : Improve A/B Comparison: while ((i<__min(M, N)) && (a.GetAt(i).CompareNoCase(b.GetAt(i)) == 0)) i++; R(0, 0) = i; dbest = kbest = 0; Tp = T[0] = Sp(i+i, 0); d = L = U = 0; Rvisitmin[0] = 0; Rvisitmax[0] = 0; /* printf("\n"); */ if ((i != M) || (i != N)) { do { d++; dp = d - floored_d_offset - 1; Tpp = -DBL_MAX; for (k=(L-1); k<=(U+1); k++) { ASSERT(d > 0); ASSERT(d < dmax); ASSERT(abs(k) <= kmax); i = -2; if (L < k) i = __max(i, R(d-1, k-1)+1); if ((L <= k) && (k <= U)) i = __max(i, R(d-1, k)+1); if (k < U) i = __max(i, R(d-1, k+1)); j = i - k; if ((i >= 0) && (j >= 0) && ((X<0) || (Sp(i+j, d) >= (((dp >= 0) ? T[dp] : 0) - X)))) { // TODO : Improve A/B Comparison: while ((i<M) && (j<N) && (a.GetAt(i).CompareNoCase(b.GetAt(j)) == 0)) { i++; j++; } R(d, k) = i; if (Rvisitmin[d] > k) Rvisitmin[d] = k; if (Rvisitmax[d] < k) Rvisitmax[d] = k; nTemp = Sp(i+j, d); Tp = __max(Tp, nTemp); /* printf("d=%2ld : k=%2ld, i=%2ld, j=%2ld, M=%2ld, N=%2ld, T=%2ld, Tp=%2ld, Tpp=%2ld", d, k, i, j, M, N, (int)nTemp, (int)Tp, (int)Tpp); */ if (nTemp > Tpp) { Tpp = nTemp; /* printf(" * Best (%2ld)", (int)Tpp); */ dbest = d; kbest = k; // Account for hitting the max M or N boundaries: if ((i != M) || (j != N)) { if (j > N) { kbest++; /* printf(" >>>>>> k++ j shift"); */ } else { if (i > M) { kbest--; /* printf(" <<<<<< k-- i shift"); */ } } } } /* printf("\n"); */ } else { R(d, k) = -2; if (Rvisitmin[d] == k) Rvisitmin[d]++; if (Rvisitmax[d] >= k) Rvisitmax[d] = k-1; } } T[d] = Tp; L = Rvisitmin[d]; U = Rvisitmax[d]; for (k=Rvisitmax[d]; k>=Rvisitmin[d]; k--) if (R(d, k) == (N+k)) break; if (k<Rvisitmin[d]) k = INT_MIN; L = __max(L, k+1); for (k=Rvisitmin[d]; k<=Rvisitmax[d]; k++) if (R(d, k) == M) break; if (k>Rvisitmax[d]) k = INT_MAX; U = __min(U, k-1); } while (L <= U+2); } // If the two PrimaryLabels at the function's address don't match, decrement match by 1*mat. // This helps if there are two are more functions that the user has labeled that // are identical except for the labels: if (pFile1->GetPrimaryLabel(pFunction1->GetMainAddress()).CompareNoCase( pFile2->GetPrimaryLabel(pFunction2->GetMainAddress())) != 0) Tp = __max(0, Tp - mat); // Normalize it: nRetVal = Tp/(__max(M,N)*mat); // Build Edit Script: if (bBuildEditScript) { int last_i, last_j; int cur_i, cur_j; int k_rest; if (dbest > 0) { m_EditScript.SetSize(dbest); k = kbest; last_i = M+1; last_j = N+1; /* printf("\n%s with %s:\n", LPCTSTR(pFunction1->GetMainName()), LPCTSTR(pFunction2->GetMainName())); */ for (d=dbest-1; d>=0; d--) { i = __max((R(d, k-1) + 1), __max((R(d, k) + 1), (R(d, k+1)))); /* printf("(%3ld, %3ld) : %3ld(%5ld), %3ld(%5ld), %3ld(%5ld) :", d, k, (R(d, k-1) + 1), (int)Sp((R(d, k-1))*2-k+1, d), (R(d, k) + 1), (int)Sp((R(d, k))*2-k, d), (R(d, k+1)), (int)Sp((R(d, k+1))*2-k-1, d)); for (j=Rvisitmin[dbest-1]; j<=Rvisitmax[dbest-1]; j++) { if (j == k-1) printf("("); else printf(" "); if (R(d,j)<0) printf(" "); else printf("%3ld", R(d, j)); if (j == k+1) printf(")"); else printf(" "); } printf("\n"); */ j = i-k; if (i == (R(d, k-1) + 1)) { strTemp.Format("%ld>%ld", i-1, j); cur_i = i-1; cur_j = j; k--; k_rest = 1; } else { if (i == (R(d, k+1))) { strTemp.Format("%ld<%ld", i, j-1); cur_i = i; cur_j = j-1; k++; k_rest = -1; } else { // if (i == (R(d, k) + 1)) strTemp.Format("%ld-%ld", i-1, j-1); cur_i = i-1; cur_j = j-1; // k=k; k_rest = 0; } } m_EditScript.SetAt(d, strTemp); // The following test is needed since our insertion/deletion indexes are // one greater than the stored i and/or j values from the R matrix. // It is possible that the previous comparison added some extra // entries to the R matrix than what was really needed. This will // cause extra erroneous entries to appear in the edit script. // However, since the indexes should be always increasing, we simply // filter out extra entries added to the end that don't satisfy // this condition: if ((k_rest == 0) && ((cur_i == last_i) && (cur_j == last_j))) { m_EditScript.RemoveAt(d); } last_i = cur_i; last_j = cur_j; } } // Note: if the two are identical, array stays empty: m_bEditScriptValid = TRUE; } // Deallocate Memory: delete[] T; delete[] Rvisitmin; delete[] Rvisitmax; for (i=0; i<dmax; i++) delete[] (Rm[i]); delete[] Rm; } break; } return nRetVal; }
void CLibraryDetailView::CacheItem(int nItem) { CLibraryFile* pFile = Library.LookupFile( m_pList[ nItem ].nIndex ); if ( ! pFile ) return; LDVITEM* pItem = &m_pList[ nItem ]; pItem->nCookie = m_nListCookie; if ( pItem->pText == NULL ) pItem->pText = new CStringArray(); CStringArray* pText = pItem->pText; pText->SetSize( m_nStyle == LVS_REPORT ? DETAIL_COLUMNS + m_pColumns.GetCount() : 1 ); CString strName( pFile->m_sName ); int nDot = strName.ReverseFind( '.' ); if ( nDot >= 0 ) strName.SetAt( nDot, 0 ); pText->SetAt( 0, strName ); if ( m_nStyle == LVS_ICON ) { pItem->nIcon = ShellIcons.Get( pFile->m_sName, 32 ); } else { if ( pFile->m_nIcon16 >= 0 ) pItem->nIcon = pFile->m_nIcon16; else pItem->nIcon = pFile->m_nIcon16 = ShellIcons.Get( pFile->m_sName, 16 ); } pItem->nState &= LDVI_SELECTED; if ( ! pFile->IsShared() ) pItem->nState |= LDVI_PRIVATE; if ( ! pFile->m_bSHA1 ) pItem->nState |= LDVI_UNSCANNED; if ( pFile->m_bVerify == TS_FALSE ) pItem->nState |= LDVI_UNSAFE; if ( m_nStyle != LVS_REPORT ) return; if ( LPCTSTR pszType = _tcsrchr( pFile->m_sName, '.' ) ) pText->SetAt( 1, pszType + 1 ); else pText->SetAt( 1, _T("") ); pText->SetAt( 2, Settings.SmartVolume( pFile->GetSize(), FALSE ) ); if ( pFile->m_pFolder != NULL ) pText->SetAt( 3, pFile->m_pFolder->m_sPath ); CString str; str.Format( _T("%lu (%lu)"), pFile->m_nHitsToday, pFile->m_nHitsTotal ); pText->SetAt( 4, str ); str.Format( _T("%lu (%lu)"), pFile->m_nUploadsToday, pFile->m_nUploadsTotal ); pText->SetAt( 5, str ); TCHAR szModified[ 64 ]; SYSTEMTIME pTime; FileTimeToSystemTime( &pFile->m_pTime, &pTime ); SystemTimeToTzSpecificLocalTime( NULL, &pTime, &pTime ); GetDateFormat( LOCALE_USER_DEFAULT, 0, &pTime, _T("yyyy-MM-dd"), szModified, 64 ); _tcscat( szModified, _T(" ") ); GetTimeFormat( LOCALE_USER_DEFAULT, 0, &pTime, _T("hh:mm tt"), szModified + _tcslen( szModified ), 64 - _tcslen( szModified ) ); pText->SetAt( 6, szModified ); if ( m_pSchema == NULL ) return; int nColumn = DETAIL_COLUMNS; BOOL bSource = pFile->m_pMetadata && m_pSchema->Equals( pFile->m_pSchema ) && m_pSchema->m_sSingular.CompareNoCase( pFile->m_pMetadata->GetName() ) == 0; for ( POSITION pos = m_pColumns.GetHeadPosition() ; pos ; nColumn++ ) { CSchemaMember* pMember = (CSchemaMember*)m_pColumns.GetNext( pos ); if ( pMember->m_sName.CompareNoCase( _T("SHA1") ) == 0 ) { if ( pFile->m_bSHA1 ) { pText->SetAt( nColumn, CSHA::HashToString( &pFile->m_pSHA1 ) ); } else pText->SetAt( nColumn, _T("") ); } else if ( bSource ) { pText->SetAt( nColumn, pMember->GetValueFrom( pFile->m_pMetadata, NULL, TRUE ) ); } else { pText->SetAt( nColumn, _T("") ); } } }
void CBCGPPlannerPrintMonth::OnDrawHeader (CDC* pDC, const CRect& rectHeader) { ASSERT_VALID (pDC); const int dxColumn = m_ViewRects [0].Width (); CRect rectDayCaption (rectHeader); DrawHeader (pDC, rectDayCaption, dxColumn); rectDayCaption.right = rectDayCaption.left + dxColumn; COleDateTime day ( GetFirstWeekDay2 (m_Date, CBCGPPlannerManagerCtrl::GetFirstDayOfWeek () + 1) ); const int nEnd = m_bCompressWeekend ? 6 : 7; CStringArray sa; sa.SetSize (nEnd); int iColumn = 0; for (iColumn = 0; iColumn < nEnd; iColumn++) { CString strDate; if (IsCompressWeekend () && day.GetDayOfWeek () == 7) { for (int i = 0; i < 2; i++) { CString strTemp; strTemp.GetBuffer (_MAX_PATH); SYSTEMTIME st; day.GetAsSystemTime (st); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, _T("ddd"), (LPTSTR)(LPCTSTR)strTemp, _MAX_PATH); strTemp.ReleaseBuffer (); strDate += strTemp; if (i == 0) { strDate += _T("/"); } day += COleDateTimeSpan (1, 0, 0, 0); } } else { strDate.GetBuffer (_MAX_PATH); SYSTEMTIME st; day.GetAsSystemTime (st); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, m_strCaptionFormat, (LPTSTR)(LPCTSTR)strDate, _MAX_PATH); strDate.ReleaseBuffer (); day += COleDateTimeSpan (1, 0, 0, 0); } sa.SetAt (iColumn, strDate); } for (iColumn = 0; iColumn < nEnd; iColumn++) { DrawCaption (pDC, rectDayCaption, sa[iColumn], TRUE, TRUE, m_brGray); rectDayCaption.OffsetRect (dxColumn + m_OnePoint.cx, 0); } }
void CSListView::ExportList( CListExportDlg * pDlg ) { ASSERT( pDlg ); if( NULL == pDlg ) return; int nColumnCount = m_Grid.GetColumnCount(); ASSERT( nColumnCount > 0 ); if( nColumnCount <= 0 ) return; CStockContainer & container = AfxGetSListStockContainer(); // Get Current StockList Time DWORD dwDate; CSPTime sptime; CSPTime time; if( container.GetCurrentType( NULL, NULL, &dwDate ) && (-1 != dwDate || container.GetLatestTechDate(&dwDate)) && sptime.FromStockTimeDay( dwDate ) ) time = CSPTime( sptime.GetTime() ); // Set Column CStringArray astrColumn; CUIntArray anWidth; CUIntArray anParams; for(int nCol = 0; nCol < nColumnCount; nCol ++ ) { astrColumn.Add( m_Grid.GetItemText(0,nCol) ); anWidth.Add( m_Grid.GetColumnWidth(nCol) ); anParams.Add( m_Grid.GetItemData(0,nCol) ); } if( ! pDlg->ExportBegin( astrColumn, anWidth, TRUE ) || ! pDlg->ExportOpenTable( time, TRUE ) ) return; container.Lock(); // set Item int nCount = 0, nTotalCount = 0; if( pDlg->m_bItemAll ) { nTotalCount = m_Grid.GetRowCount()-1; pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=1; nRow<m_Grid.GetRowCount(); nRow++ ) { CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } else if( pDlg->m_bItemSelected ) { nTotalCount = m_Grid.GetSelectedCount(); pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=1; nRow<m_Grid.GetRowCount(); nRow++ ) { BOOL bSelected = FALSE; for( nCol=0; nCol<m_Grid.GetColumnCount(); nCol ++ ) bSelected |= ( m_Grid.GetItemState(nRow,nCol) & GVIS_SELECTED ); if( !bSelected ) continue; CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } else if( pDlg->m_bItemDefine ) { nTotalCount = min(m_Grid.GetRowCount()-1,pDlg->m_nItemEnd) - max(1,pDlg->m_nItemBegin) + 1; pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=max(1,pDlg->m_nItemBegin); nRow<=min(m_Grid.GetRowCount()-1,pDlg->m_nItemEnd); nRow++ ) { CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } container.UnLock(); pDlg->ExportFinish( ); }
void CPlayerSubresyncBar::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR; if (lpnmlv->iItem >= 0 && lpnmlv->iSubItem >= 0) { enum { TOGSEP = 1, DUPITEM, DELITEM, RESETS, SETOS, SETCS, RESETE, SETOE, SETCE, STYLEFIRST, STYLELAST = STYLEFIRST + 1000, STYLEEDIT, UNICODEYES, UNICODENO, LAYERDEC, LAYERINC, ACTORFIRST, ACTORLAST = ACTORFIRST + 1000, EFFECTFIRST, EFFECTLAST = EFFECTFIRST + 1000 }; CStringArray styles; CStringArray actors; CStringArray effects; CMenu m; m.CreatePopupMenu(); if (m_mode == VOBSUB || m_mode == TEXTSUB) { m.AppendMenu(MF_STRING | MF_ENABLED, TOGSEP, ResStr(IDS_SUBRESYNC_SEPARATOR)); m.AppendMenu(MF_SEPARATOR); if (m_mode == TEXTSUB) { m.AppendMenu(MF_STRING | MF_ENABLED, DUPITEM, ResStr(IDS_SUBRESYNC_DUPLICATE)); } m.AppendMenu(MF_STRING | MF_ENABLED, DELITEM, ResStr(IDS_SUBRESYNC_DELETE)); } switch (lpnmlv->iSubItem) { case COL_START: if (m_mode == VOBSUB || m_mode == TEXTSUB) { m.AppendMenu(MF_SEPARATOR); m.AppendMenu(MF_STRING | MF_ENABLED, RESETS, ResStr(IDS_SUBRESYNC_RESET) + _T("\tF1")); m.AppendMenu(MF_STRING | MF_ENABLED, SETOS, ResStr(IDS_SUBRESYNC_ORIGINAL) + _T("\tF3")); m.AppendMenu(MF_STRING | MF_ENABLED, SETCS, ResStr(IDS_SUBRESYNC_CURRENT) + _T("\tF5")); } break; case COL_END: if (m_mode == TEXTSUB) { m.AppendMenu(MF_SEPARATOR); m.AppendMenu(MF_STRING | MF_ENABLED, RESETE, ResStr(IDS_SUBRESYNC_RESET) + _T("\tF2")); m.AppendMenu(MF_STRING | MF_ENABLED, SETOE, ResStr(IDS_SUBRESYNC_ORIGINAL) + _T("\tF4")); m.AppendMenu(MF_STRING | MF_ENABLED, SETCE, ResStr(IDS_SUBRESYNC_CURRENT) + _T("\tF6")); } break; case COL_STYLE: if (m_mode == TEXTSUB) { m.AppendMenu(MF_SEPARATOR); int id = STYLEFIRST; POSITION pos = m_sts.m_styles.GetStartPosition(); while (pos && id <= STYLELAST) { CString key; STSStyle* val; m_sts.m_styles.GetNextAssoc(pos, key, val); styles.Add(key); m.AppendMenu(MF_STRING | MF_ENABLED, id++, key); } if (id > STYLEFIRST && m_list.GetSelectedCount() == 1) { m.AppendMenu(MF_SEPARATOR); m.AppendMenu(MF_STRING | MF_ENABLED, STYLEEDIT, ResStr(IDS_SUBRESYNC_EDIT)); } } break; case COL_UNICODE: if (m_mode == TEXTSUB) { m.AppendMenu(MF_SEPARATOR); m.AppendMenu(MF_STRING | MF_ENABLED, UNICODEYES, ResStr(IDS_SUBRESYNC_YES)); m.AppendMenu(MF_STRING | MF_ENABLED, UNICODENO, ResStr(IDS_SUBRESYNC_NO)); } break; case COL_LAYER: if (m_mode == TEXTSUB) { m.AppendMenu(MF_SEPARATOR); m.AppendMenu(MF_STRING | MF_ENABLED, LAYERDEC, ResStr(IDS_SUBRESYNC_DECREASE)); m.AppendMenu(MF_STRING | MF_ENABLED, LAYERINC, ResStr(IDS_SUBRESYNC_INCREASE)); } break; case COL_ACTOR: if (m_mode == TEXTSUB) { CMapStringToPtr actormap; for (size_t i = 0, j = m_sts.GetCount(); i < j; i++) { actormap[m_sts[i].actor] = NULL; } actormap.RemoveKey(_T("")); if (!actormap.IsEmpty()) { m.AppendMenu(MF_SEPARATOR); int id = ACTORFIRST; POSITION pos = actormap.GetStartPosition(); while (pos && id <= ACTORLAST) { CString key; void* val; actormap.GetNextAssoc(pos, key, val); actors.Add(key); m.AppendMenu(MF_STRING | MF_ENABLED, id++, key); } } } break; case COL_EFFECT: if (m_mode == TEXTSUB) { CMapStringToPtr effectmap; for (size_t i = 0, j = m_sts.GetCount(); i < j; i++) { effectmap[m_sts[i].effect] = NULL; } effectmap.RemoveKey(_T("")); if (!effectmap.IsEmpty()) { m.AppendMenu(MF_SEPARATOR); int id = EFFECTFIRST; POSITION pos = effectmap.GetStartPosition(); while (pos && id <= EFFECTLAST) { CString key; void* val; effectmap.GetNextAssoc(pos, key, val); effects.Add(key); m.AppendMenu(MF_STRING | MF_ENABLED, id++, key); } } } break; } CPoint p = lpnmlv->ptAction; ::MapWindowPoints(pNMHDR->hwndFrom, HWND_DESKTOP, &p, 1); UINT id = m.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RETURNCMD, p.x, p.y, this); bool fNeedsUpdate = false; POSITION pos = m_list.GetFirstSelectedItemPosition(); while (pos) { int iItem = m_list.GetNextSelectedItem(pos); SubTime& st = m_subtimes[iItem]; switch (id) { case TOGSEP: m_list.SetItemData(iItem, m_list.GetItemData(iItem) ^ TSEP); m_list.Invalidate(); fNeedsUpdate = true; break; case DUPITEM: { CUIntArray items; pos = m_list.GetFirstSelectedItemPosition(); while (pos) { items.Add(m_list.GetNextSelectedItem(pos)); } qsort(items.GetData(), items.GetCount(), sizeof(UINT), uintcomp); for (INT_PTR i = 0, l = items.GetCount(); i < l; i++) { iItem = items[i]; STSEntry stse = m_sts[iItem]; m_sts.InsertAt(iItem + 1, stse); SubTime st = m_subtimes[iItem]; m_subtimes.InsertAt(iItem + 1, st); CHeaderCtrl* pHeader = (CHeaderCtrl*)m_list.GetDlgItem(0); int nColumnCount = pHeader->GetItemCount(); CStringArray sa; sa.SetSize(nColumnCount); for (int col = 0; col < nColumnCount; col++) { sa[col] = m_list.GetItemText(iItem, col); } DWORD_PTR data = m_list.GetItemData(iItem); m_list.InsertItem(iItem + 1, sa[0]); m_list.SetItemData(iItem + 1, data); for (int col = 1; col < nColumnCount; col++) { m_list.SetItemText(iItem + 1, col, sa[col]); } } } fNeedsUpdate = true; break; case DELITEM: { CUIntArray items; pos = m_list.GetFirstSelectedItemPosition(); while (pos) { items.Add(m_list.GetNextSelectedItem(pos)); } qsort(items.GetData(), items.GetCount(), sizeof(UINT), uintcomp); for (INT_PTR i = 0, l = items.GetCount(); i < l; i++) { iItem = items[i]; m_sts.RemoveAt(iItem); m_subtimes.RemoveAt(iItem); m_list.DeleteItem(iItem); } iItem = items[items.GetCount() - 1]; if (iItem >= m_list.GetItemCount()) { iItem = m_list.GetItemCount() - 1; } m_list.SetSelectionMark(iItem); } fNeedsUpdate = true; break; case RESETS: /*if (*/ ModStart(iItem, st.orgstart, true);/*)*/ fNeedsUpdate = true; break; case SETOS: /*if (*/ ModStart(iItem, st.orgstart);/*)*/ fNeedsUpdate = true; break; case SETCS: /*if (*/ ModStart(iItem, (int)(m_rt / 10000)); /*)*/ fNeedsUpdate = true; break; case RESETE: /*if (*/ ModEnd(iItem, st.orgend, true);/*)*/ fNeedsUpdate = true; break; case SETOE: /*if (*/ ModEnd(iItem, st.orgend);/*)*/ fNeedsUpdate = true; break; case SETCE: /*if (*/ ModEnd(iItem, (int)(m_rt / 10000)); /*)*/ fNeedsUpdate = true; break; default: if (STYLEFIRST <= id && id <= STYLELAST) { CString s = styles[id - STYLEFIRST]; if (m_sts[iItem].style != s) { fNeedsUpdate = true; } m_sts[iItem].style = s; m_list.SetItemText(iItem, lpnmlv->iSubItem, s); } else if (id == STYLEEDIT) { CAutoPtrArray<CPPageSubStyle> pages; CAtlArray<STSStyle*> styles; STSStyle* stss = m_sts.GetStyle(iItem); int iSelPage = 0; POSITION pos = m_sts.m_styles.GetStartPosition(); for (int i = 0; pos; i++) { CString key; STSStyle* val; m_sts.m_styles.GetNextAssoc(pos, key, val); CAutoPtr<CPPageSubStyle> page(DNew CPPageSubStyle()); page->InitSubStyle(key, val); pages.Add(page); styles.Add(val); if (stss == val) { iSelPage = i; } } CPropertySheet dlg(_T("Styles..."), this, iSelPage); for (size_t i = 0, l = pages.GetCount(); i < l; i++) { dlg.AddPage(pages[i]); } if (dlg.DoModal() == IDOK) { for (size_t j = 0, l = pages.GetCount(); j < l; j++) { stss = styles[j]; pages[j]->GetSubStyle(stss); for (int i = 0; i < (int)m_sts.GetCount(); i++) { if (m_sts.GetStyle(i) == stss) { CString str; m_list.SetItemText(i, COL_TEXT, m_sts.GetStrW(i, true)); m_list.SetItemText(i, COL_FONT, stss->fontName); str.Format(_T("%d"), stss->charSet); m_list.SetItemText(i, COL_CHARSET, str); str.Format(_T("%d"), m_sts[i].layer); } } } fNeedsUpdate = true; } } else if (id == UNICODEYES || id == UNICODENO) { m_sts.ConvertUnicode(iItem, id == UNICODEYES); m_list.SetItemText(iItem, COL_TEXT, m_sts.GetStrW(iItem, true)); m_list.SetItemText(iItem, COL_UNICODE, m_sts.IsEntryUnicode(iItem) ? _T("yes") : _T("no")); fNeedsUpdate = true; } else if (id == LAYERDEC || id == LAYERINC) { int d = (id == LAYERDEC) ? -1 : 1; fNeedsUpdate = true; m_sts[iItem].layer += d; CString s; s.Format(_T("%d"), m_sts[iItem].layer); m_list.SetItemText(iItem, lpnmlv->iSubItem, s); } else if (ACTORFIRST <= id && id <= ACTORLAST) { CString s = actors[id - ACTORFIRST]; if (m_sts[iItem].actor != s) { fNeedsUpdate = true; } m_sts[iItem].actor = s; m_list.SetItemText(iItem, lpnmlv->iSubItem, s); } else if (EFFECTFIRST <= id && id <= EFFECTLAST) { CString s = effects[id - EFFECTFIRST]; if (m_sts[iItem].effect != s) { fNeedsUpdate = true; } m_sts[iItem].effect = s; m_list.SetItemText(iItem, lpnmlv->iSubItem, s); } break; } } if (fNeedsUpdate) { UpdatePreview(); } } *pResult = 0; }
bool CMyListCtrl::CopyToClipboard(bool bAll, bool bHeaders) { const PTCHAR _cediteol = "\r\n"; if ( !OpenClipboard() ) { AfxMessageBox( "Cannot open the Clipboard" ); return true; } // Remove the current Clipboard contents if( !EmptyClipboard() ) { AfxMessageBox( "Cannot empty the Clipboard" ); return true; } // Get the currently selected data int nItem, j, tlen, headeroffset; const int ic = GetItemCount(); CStringArray a; a.SetSize(ic); tlen = 0; headeroffset = 0; if (bHeaders) { CString s; for (j = efhFacility; j < efhHeaderCount; j++) { UINT icol = j; // direct mapping from header id to header string s.Append(CFDMSApp::GetFileHeader(CSVFileHeaderIDs(icol))); s.AppendChar('\t'); } s.Append(_cediteol); a.SetAtGrow(0, s); tlen += s.GetLength(); headeroffset = 1; } // now for the rows for (nItem = 0; nItem < ic; nItem++) { if (!bAll && !GetItemState(nItem, LVIS_SELECTED)) continue; CString s = GetItemText(nItem,0); for (j = efhFacility; j < efhHeaderCount; j++) { if (j == efhDischMonth || j == efhDischYear) // blend of three columns into one, skip 2 continue; if (j == efhMeasMonth || j == efhMeasYear) // blend of three columns into one, skip 2 continue; UINT icol = CMeaCol::m_fileheadermap[j]; if (j == efhDischDay || j == efhMeasDay) // build combined disch date { int y = 0,m = 0,d = 0; CString dt = GetItemText(nItem,icol); if (dt.IsEmpty()) { dt = ("\t\t"); } else { CFieldDate::XConvert3(dt, y, m, d); dt.Format("%d\t%d\t%d",d,m,y); } s.Append(dt); } else if (j == efhStatus) // get status from the related globals { int iData; iData = GetItemData(nItem); if (iData >= 0 && iData < MP_ARRAYSIZE) { CString cs; cs.Format("%d", g_iMPStatus[iData] ); s.Append(cs); } else s.Append("0"); } else if (j == efhMeasType) // convert string to number from the item text { //CString cs; //cs.Format("%d", tImageToMeasurementType(GetItemText(nItem,icol))); s.Append(GetItemText(nItem,icol)); } else s.Append(GetItemText(nItem,icol)); s.AppendChar('\t'); } s.Append(_cediteol); a.SetAtGrow(nItem + headeroffset, s); tlen += s.GetLength(); } // Allocate a global memory object for the text. LPTSTR lptstrCopy; HGLOBAL hglbCopy; hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (tlen + 1) * sizeof(TCHAR)); if (hglbCopy == NULL) { CloseClipboard(); return true; } // Lock the handle and copy the text to the buffer. lptstrCopy = (LPSTR)GlobalLock(hglbCopy); lptstrCopy[0] = (TCHAR) 0; // null character for (nItem = 0; nItem < a.GetCount(); nItem++) { LPSTR b = a[nItem].GetBuffer(); size_t l = a[nItem].GetLength() * sizeof(TCHAR); strncat(lptstrCopy, b, l); } lptstrCopy[tlen] = (TCHAR) 0; // null character GlobalUnlock(hglbCopy); // Place the handle on the clipboard. // For the appropriate data formats... if ( SetClipboardData( CF_TEXT, hglbCopy ) == NULL ) { AfxMessageBox( "Unable to set Clipboard data" ); CloseClipboard(); return true; } CloseClipboard(); return TRUE; }