コード例 #1
0
void CEnvelopeWizard::CreateEnvelope(CAGDoc** ppAGDoc)
{
	m_pEnvelopeDoc = new CAGDoc();

	// Let the caller take control over this document
	if (ppAGDoc)
		*ppAGDoc = m_pEnvelopeDoc;
	if (!m_pEnvelopeDoc)
		return;
	
	m_pEnvelopeDoc->SetPortrait(m_PageSize.cx <= m_PageSize.cy);
	m_pEnvelopeDoc->SetDocType(DOC_ENVELOPE);
	m_pEnvelopeDoc->SetFileName(CString("Untitled"));
	m_pEnvelopeDoc->SetModified(true);

	CAGPage* pPage = new CAGPage(m_PageSize.cx, m_PageSize.cy);
	if (!pPage)
		return;

	m_pEnvelopeDoc->AddPage(pPage);

	int nLayers = 2;
	for (int j = 0; j < nLayers; j++)
		pPage->AddLayer(new CAGLayer());

	CAGLayer* pUserLayer = pPage->GetUserLayer();
	if (!pUserLayer)
		return;

	CAGLayer* pMasterLayer = pPage->GetMasterLayer();
	if (!pUserLayer)
		return;

	m_nMaxImageSize = m_PageSize.cy / 2;

	m_pEnvelopePicture->GetPictureList()->DrawListViewThumbnails();

	// Add the Background Item
	CAGSymGraphic* pBackground = new CAGSymRectangle();
	if (pBackground)
	{
		RECT BackgroundRect;
		::SetRect(&BackgroundRect, 0, 0, m_PageSize.cx, m_PageSize.cy);
		pBackground->SetDestRect(BackgroundRect);
		pBackground->SetID(IDR_ENVELOPE_BACKGROUND);
		pBackground->SetFillColor(RGB(240,240,255));
		pBackground->SetFillColor2(RGB(255,255,255));
		pBackground->SetFillType(FT_Solid);
		pBackground->SetHidden(true);
		pUserLayer->AddSymbol(pBackground);
	}

	int xCenter = m_PageSize.cx / 2;
	int yCenter = m_PageSize.cy / 2;
	RECT rMargins = { INCHES(0.375), INCHES(0.375), m_PageSize.cx - INCHES(0.375), m_PageSize.cy - INCHES(0.375)};

	// Add the Send Address Text Item
	CAGSymText* pSendAddr = new CAGSymText(ST_TEXT);
	if (pSendAddr)
	{
		RECT SendRect;
		SendRect.left   = xCenter - (INCHES(1.75)/2);
		SendRect.top    = yCenter - (INCHES(1)/2);
		SendRect.right  = SendRect.left + INCHES(3.0);
		SendRect.bottom = SendRect.top + INCHES(1.1);
		pSendAddr->Create(SendRect);

		pSendAddr->SetID(IDR_ENVELOPE_SEND);
		SetAddressText(pSendAddr, m_strSendAddress);
		pSendAddr->SelectAll(false);
		pSendAddr->SetHorzJust(eFlushLeft);
		pSendAddr->SetVertJust(eVertTop);
		pSendAddr->SetEmphasis(false, false, false);
		pUserLayer->AddSymbol(pSendAddr);
	}

	// Add the Return Address Text Item
	CAGSymText* pReturnAddr = new CAGSymText(ST_TEXT);
	if (pReturnAddr)
	{
		RECT ReturnRect;
		ReturnRect.left   = rMargins.left;
		ReturnRect.top    = rMargins.top;
		ReturnRect.right  = ReturnRect.left + INCHES(3.0);
		ReturnRect.bottom = ReturnRect.top + INCHES(1.1);
		pReturnAddr->Create(ReturnRect);

		pReturnAddr->SetID(IDR_ENVELOPE_RETURN);
		SetAddressText(pReturnAddr, m_strReturnAddress);
		pReturnAddr->SelectAll(false);
		pReturnAddr->SetHorzJust(eFlushLeft);
		pReturnAddr->SetVertJust(eVertTop);
		pReturnAddr->SetEmphasis(false, false, false);
		pUserLayer->AddSymbol(pReturnAddr);
	}

	// Add the first image to the document
	CAGSymImage* pImage = m_pGraphics[0];
	if (!pImage)
		return;

	CAGSymImage* pNewImage = (CAGSymImage*)pImage->Duplicate();
	if (!pNewImage)
		return;

	SetImageSize(pNewImage);

	pNewImage->SetID(IDC_ENVELOPE_PIC_0);

	pUserLayer->AddSymbol(pNewImage);
	GetDocWin()->SymbolUnselect(true);
	GetDocWin()->SymbolSelect(pNewImage);
	GetDocWin()->Position(POS_LEFT, POS_BOTTOM, 0/*id*/);
}
コード例 #2
0
ファイル: XMLDlg.cpp プロジェクト: jimmccurdy/ArchiveGit
int CXMLDlg::CreatePages(HTREEITEM pItem)
{
	HTREEITEM pChildItem = m_treeOutput.GetChildItem(pItem);
	if (!pChildItem)
	{
		ASSERT(false);
		return 0;
	}

	int nPages = 0;
	while (pChildItem)
	{
		CString szItemType = m_treeOutput.GetItemText(pChildItem);
		if (!szItemType.CompareNoCase(_T("page")) )
		{
			POINT Size = {0,0};
			GetCurrentObjectSize(pChildItem, Size);
			int iPageWidth = Size.x;
			int iPageHeight = Size.y;

			AGDOCTYPE Type = m_pAGDoc->GetDocType();
			POINT ptSplitOffset = {0,0};
			int iPagesToMake = 1;
			if ((Type == DOC_QUARTERCARD || Type == DOC_HALFCARD || Type == DOC_NOTECARD) && nPages == 1)
				iPagesToMake = 2;
			else
			if (Type == DOC_CALENDAR && (iPageWidth > 11*1800 || iPageHeight > 11*1800))
				iPagesToMake = 2;

			if (iPagesToMake > 1)
			{ // Split the larger dimension
				if (iPageWidth > iPageHeight)
				{
					iPageWidth /= iPagesToMake;
					ptSplitOffset.x = iPageWidth;
				}
				else
				{
					iPageHeight /= iPagesToMake;
					ptSplitOffset.y = iPageHeight;
				}
			}

			for (int i=0; i<iPagesToMake; i++)
			{
				if (Type == DOC_CALENDAR && iPagesToMake > 1)
				{
					// Special case to skip the top part of a calendar cover
					if (nPages == 0 && i == 0)
						continue;
					// Special case to skip the bottom part of a calendar back
					if (nPages == 13 && i == 1)
						continue;
				}
				CAGPage* pPage = new CAGPage(iPageWidth, iPageHeight);
				if (!pPage)
				{
					ASSERT(false);
					return nPages;
				}

				m_pAGDoc->AddPage(pPage);
				CString strPageName = GetPageName(nPages);
				pPage->SetPageName(strPageName);
				for (int j = 0; j < NLAYERS; j++)
					pPage->AddLayer(new CAGLayer());

				POINT ptOffset = {0,0};
				if (i > 0)
					ptOffset = ptSplitOffset;
				HandlePageItems(pChildItem, pPage, ptOffset);
				nPages++;
			}
		}

		pChildItem = m_treeOutput.GetNextItem(pChildItem, TVGN_NEXT);
	}

	return nPages;
}