1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
void CCreaView::OnDraw(CDC* pDC)
{
//** taille zone cliente **/
CRect rcClient;
GetClientRect(rcClient);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap memBmp;
memBmp.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height());
CBitmap* pOldBmp = memDC.SelectObject(&memBmp);
//** effacement du fond **/
CBrush backBrush;
backBrush.CreateSolidBrush(RGB(255, 255, 255));
memDC.FillRect(rcClient, &backBrush);
backBrush.DeleteObject();
//** ici tu dessine dans memDC comme tu l'aurai fait dans pDC
--> donc j'ai mit ce qu'il y avait avant dans ma méthode OnDraw
en remplacant "pDC->" par "memDC."
**/
// Récupération d'un pointeur sur doc
CCrea2K6Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// Pour limiter le format
CPoint p1 = CPoint(100,100);
CPoint p2 = p1+pDoc->m_Format;
memDC.IntersectClipRect(CRect(p1,p2));
memDC.Rectangle(CRect(p1,p2));
POSITION aPos=pDoc->GetListHeadPosition(); //position du premier element de la liste
CEntite* pEntite=NULL;
while(aPos) //boucle sur tous les éléments
{
pEntite=pDoc->GetNext(aPos);
if(memDC.RectVisible(pEntite->GetBoundRect())) //vérifie si Rect est entierement dans la vue
pEntite->Draw(&memDC,m_pSelected);
}
//** recopie du contexte en mémoire **/
pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, SRCCOPY);
//** destruction contexte d'affichage **/
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
memBmp.DeleteObject();
/*****************************************************************/
} |
Partager