示例#1
0
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;
	}
}
示例#2
0
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));
}
示例#4
0
// ============================================================================
void LoadStringArray(CArchive &ar, CStringArray &strArr)
{
	int count;
	ar >> count;
	strArr.SetSize(count);

	for(int i = 0; i < count; i++)
		ar >> strArr[i];
}
示例#5
0
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;
}
示例#6
0
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)));
	}
}
示例#7
0
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;
}
示例#8
0
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);
}
示例#9
0
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;
}
示例#11
0
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;
}
示例#12
0
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;
    }
}
示例#13
0
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); 
}
示例#14
0
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();
}
示例#15
0
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;
}
示例#16
0
文件: Tool.cpp 项目: ngphloc/design
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);
}
示例#17
0
文件: KDApp.cpp 项目: tsaikd/MagicKD
// 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;
}
示例#18
0
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;
	}
}
示例#19
0
// 更新过滤数据
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;
}
示例#20
0
文件: RprBill.cpp 项目: 03bekjob/Strg
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;
}
示例#21
0
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;
}
示例#22
0
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;
}
示例#23
0
// 版本转换
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;
}
示例#24
0
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;
}
示例#25
0
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);
	}
}
示例#28
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( );
}
示例#29
0
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;
}
示例#30
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;
		
}