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*/); }
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; }