CFormView et impression

enilda Messages postés 3 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 29 octobre 2007 - 10 mars 2003 à 12:07
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 - 10 mars 2003 à 13:51
Bonjour,

Quelqu'un peut-il m'indiquer comment mettre en place l'impression dans un projet VC ,NET SDI basé sur une CFormView ?

J'ai essayé d'appeler le membre CView::OnFilePrint() mais cela provoque une erreur à l'exécution sans que je sache pourquoi. J'ai repèré deux autres fonctions Dérivée de CWnd : Print et PrintWindow mais il qut leur passer des arguments que ne sais pas récupérer

Merci infiniment à toute personne qui voudra bien m'aider

ENILDA

1 réponse

crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
10 mars 2003 à 13:51
Ce qui est assez puissant avec VC++ .net c'est qu'il gere
indépendament le coté DOC et le coté View, et c'est justement grace a ta formview que tu va pouvoir imprimer. Ca fait pas longtemps que je bosse sous VC.Net mais je peut que j'ai compris (une infime partie) m'a l'air pas mal. En fait VS se sert pour l'affichage et l'impression, en fait tout le coté utilisateur, de DC, les device context. A partir de ca tu peut faire pas mal de truc, afficher du texte sur l'ecran avec drawtext il me semble, dans ce cas la, le DC sera l'éran. A l'inverse, si tu veut imprimer, ton DC sera l'imprimante et donc tu fait la même chose, et tu peut faire aussi facilement des printpreview ex :

void TaClass::OnPrint(CDC* pdc, CPrintInfo* pInfo)
{
if (m_pnPages == NULL)
{
RecalcPageLayouts(pdc, pInfo);
ASSERT(m_pnPages != NULL);
}

ASSERT(pInfo->m_nCurPage >= 1 && (int) pInfo->m_nCurPage <= m_nPrintPages);
int nLine = m_pnPages[pInfo->m_nCurPage - 1];
int nEndLine = GetLineCount();
if ((int) pInfo->m_nCurPage < m_nPrintPages)
nEndLine = m_pnPages[pInfo->m_nCurPage];
TRACE(_T("Printing page %d of %d, lines %d - %d\n"), pInfo->m_nCurPage, m_nPrintPages,
nLine, nEndLine - 1);

if (m_bPrintHeader)
PrintHeader(pdc, pInfo->m_nCurPage);
if (m_bPrintFooter)
PrintFooter(pdc, pInfo->m_nCurPage);

int y = m_rcPrintArea.top;
for (; nLine < nEndLine; nLine ++)
{
int nLineLength = GetLineLength(nLine);
if (nLineLength == 0)
{
y += m_nPrintLineHeight;
continue;
}

CRect rcPrintRect = m_rcPrintArea;
rcPrintRect.top = y;
LPCTSTR pszChars = GetLineChars(nLine);
CString line;
ExpandChars(pszChars, 0, nLineLength, line);
y += pdc->DrawText(line, &rcPrintRect, DT_LEFT | DT_NOPREFIX | DT_TOP | DT_WORDBREAK);
}
}

Je ne m'y connais pas trop pour l'instant et je ne sais pas si tout ce que je t'ai dit est juste (mais j'apprend).

Tu peut utiliser le print de CView mais si tu veut effectuer ta gestion des impressions toi meme il faut que tu override les fonction de CView.

Voila a+ Hart
0
Rejoignez-nous