Impression

c2millet Messages postés 198 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 février 2005 - 15 déc. 2003 à 11:26
c2millet Messages postés 198 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 février 2005 - 15 déc. 2003 à 14:41
C encore moi avec mon probleme d'impression.
J'ai réussi a créé un rectangle avec onprint mais je n'arrive pas a y mettre le graph que j'ai à l'écran (un activx miscrosoft chart control).
Si qqun sait merci
Cmill

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
15 déc. 2003 à 13:54
Salut, dans mes précédentes réponses, j'avais pas pigé que ce que tu voulais imprimer c'est pas toi qui le dessine à l'écran. Je te propose une solution bourrine qui passe par le presse-papier (c'est pas térrible comme solution, je sais) :

m_Chart est le contrôle activeX MSChart :

void CTestPrintView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
//-----------------------------------------------------------
// on copie le contenu du Chart dans le presse papier
m_Chart.EditCopy();

// ouverture du presse-papier
if(!OpenClipboard())
return;

// récupération du contenu du presse-papier au format Image
HGLOBAL hData = GetClipboardData(CF_DIB);

// si la récupération a échoué, on referme le presse-papier
if(!hData)
{
CloseClipboard();
return;
}

//-------------------------------------------------------------
// affectation pointeurs
LPBYTE lpData = (LPBYTE) GlobalLock(hData);
LPBITMAPINFO lpInfo = (LPBITMAPINFO) lpData;
LPBITMAPINFOHEADER lpHeader = &lpInfo->bmiHeader;
LPBYTE lpBits = lpData + sizeof(BITMAPINFOHEADER) + lpHeader->biClrUsed * sizeof(RGBQUAD);

// détermination taille d'impression
pDC->SetMapMode(MM_TWIPS);
int cxBmp = lpHeader->biWidth;
int cyBmp = lpHeader->biHeight;
int cxPrint = 1440*cxBmp / 96;
int cyPrint = 1440*cyBmp / 96;

::StretchDIBits(pDC->m_hDC, 0, 0, cxPrint, -cyPrint, 0, 0,
cxBmp, cyBmp, lpBits, lpInfo, DIB_RGB_COLORS,
SRCCOPY);

// fermeture presse-papier
GlobalUnlock(hData);
EmptyClipboard();
CloseClipboard();
}

PS : avant de copier dans le presse papier, faudrait voir pour récupérer ce qu'il y avait dedans et le remettre à la fin, mais là pas d'idée pour l'instant.
0
c2millet Messages postés 198 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 février 2005
15 déc. 2003 à 14:41
oki je te remercie pour ton aide.
Cmill
0
Rejoignez-nous