Bonjour,
Il y a forcément quelque chose que je n'ai pas encore bien compris concernant l'utilisation des devices contextes et des bitmaps.
Ma solution 1 fonctionne correctement en me fournissant un simple contour d'ellipse avec la phrase "ceci est une page de test" au milieu (c'est ce que je veux), alors que avec la solution 2 j'obtiens une ellipse coloriée en blanc à l'intérieur et en noir à l'extérieur sur toute la page. Ce qui fait que le micro a mouliné pendant 5mn avant de sortir quelque chose et le texte "page de test" n'apparaît pas, je suppose qu'il est caché par l'ellipse.
Etait-ce bien ce qu'il fallait faire dans la solution 2? Et n'est-il pas possible d'obtenir seulement un contour avec la solution 2 ?
Merci
********** Solution 1 (qui fait ce que je veux): ********** (prd.hDc est le device contexte de l'imprimante)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
larg=GetDeviceCaps(prd.hDC, HORZRES);
haut=GetDeviceCaps(prd.hDC, VERTRES);
SetRect(&rect,larg*marges,haut*marges,larg-(larg*marges*2),haut-(haut*marges*2));
if ( StartDoc( prd.hDC, &di ) > 0 )
{
	StartPage( prd.hDC );
	Ellipse(prd.hDC,0,0,larg,haut);
	DrawText(prd.hDC,"Ceci est une page de test",-1,&rect,DT_SINGLELINE | DT_VCENTER | DT_CENTER);
	EndPage( prd.hDC );
	EndDoc( prd.hDC );
}
******************************************
******** Solution 2 (qui remplit en noir et blanc) ***********
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
larg=GetDeviceCaps(prd.hDC, HORZRES);
haut=GetDeviceCaps(prd.hDC, VERTRES);
SetRect(&rect,larg*marges,haut*marges,larg-(larg*marges*2),haut-(haut*marges*2));
hbm=CreateCompatibleBitmap(prd.hDC, rect.right, rect.bottom);
hDCmem = CreateCompatibleDC(prd.hDC);
SelectObject(hDCmem, hbm);
Ellipse(hDCmem,rect.left,rect.top,rect.right,rect.bottom);
DrawText(hDCmem,"Ceci est une page de test",-1,&rect,DT_SINGLELINE | DT_VCENTER | DT_CENTER);
if ( StartDoc( prd.hDC, &di ) > 0 )
{
	StartPage( prd.hDC );
	BitBlt(prd.hDC,0,0,larg,haut,hDCmem,0,0,SRCCOPY);
	EndPage( prd.hDC );
	EndDoc( prd.hDC );
}
DeleteDC( hDCmem );