Bonjour,
je fais quelques tests afin de pouvoir dessiner dans ma fenêtre.
L'utilisation de la classe CWindowDC à la place de CDC devrait logiquement, si j'ai bien compris, me permettre d'aller dessiner au dessus des menubar et tool bar?
(car ce qui est retourné par cWindowDC est l'entièreté de l'espace occupé par CWnd - que je lui passe en paramètre - contrairement à CDC qui ne va me retourner que l'espace occupé par le client)
Cependant, quand je remonte à l'origine (0,0), je vois mon dessin passer en dessous de ces menubar, toolbar.
Voici une partie du code ( projet mfc/sdi):
note: le bitmap ne s'affiche pas correctement (carré noir) mais c'est un problème secondaire..
Savez vous où je me trompe?
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 void CtestgdiView::OnDraw(CDC* pDC) { CtestgdiDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // taille zone cliente CRect rcClient; GetWindowRect(&rcClient); CWindowDC memDC(this); memDC.CreateCompatibleDC(pDC); CBitmap memBmp; memBmp.LoadBitmap(IDB_BITMAP2); BITMAP InfosBmp; memBmp.GetBitmap(&InfosBmp); memBmp.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height()); CBitmap* pOldBmp = memDC.SelectObject(&memBmp); CSize Size(InfosBmp.bmWidth , InfosBmp.bmHeight ); pDC->DPtoLP(&Size); pDC->StretchBlt( 0, 0, Size.cx,-Size.cy, &memDC, 0,0, InfosBmp.bmWidth, InfosBmp.bmHeight, SRCCOPY); // destruction contexte d'affichage memDC.SelectObject(pOldBmp); memDC.DeleteDC(); memBmp.DeleteObject(); }
- ma compréhension de la classe CWindowDC est elle bonne? peut on réellement allez dessiner au dessus des menu/tool bars?
- si oui, qu'est ce qui se passe mal? j'ai un peu de mal à utiliser le gdi, la notion de device context & Co est nouvelle et encore assez vague pour moi..
Merci pour votre aide.
Francois
Partager