Dessiner une image en arrière plan d'1 MDI Main Frame
Salut,
Je suis en train de programmer une petite appli MFC MDI qui consiste à afficher 1 image bitmap en arrière plan. Pour cela, je me suis inspiré des 2 progs svts :
http://www.codeproject.com/dialog/md...asp#xx535306xx
http://www.codeproject.com/dialog/bmpdlg01.asp
Le 1er utilise MFC et Win32, mais le pb c'est que cela ne marche qu'avec l' image de son projet, et dès que l'on prend 1 autre image, le la fonction BitBlt() plante. :(
Le second prog utilise 1 CDialog.
Partant de là, j'ai redéfini la fonction OnEraseBkgnd(CDC* pDC) de ma classe CMainFrame (fille de CMDIMainFrame), en m'inspirant de ce qui avait été fait ds le 2nd prog (avec la CDialog).
Code:
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
|
BOOL CMainFrame::OnEraseBkgnd(CDC* pDC)
{
CMDIFrameWnd::OnEraseBkgnd(pDC);
// TODO: Add your message handler code here and/or call default
// m_bitmap : l'image à afficher en arrière plan
if(!m_bitmap.m_hObject) return 1;
CRect rect;
GetClientRect(&rect);
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dc.SelectObject(&m_bitmap);
int bmw, bmh ;
BITMAP bmap;
m_bitmap.GetBitmap(&bmap);
bmw = bmap.bmWidth;
bmh = bmap.bmHeight;
int xo=0, yo=0;
pDC->StretchBlt(xo, yo, rect.Width(),
rect.Height(), &dc,
0, 0,bmw,bmh, SRCCOPY);
dc.SelectObject(pOldBitmap);
dc.DeleteDC();
return 1;
} |
Mais malheureusement, ça marche pas. En effet, 1 fois que Windows a affiché mon image ds l'arrière plan de la CMainFrame, il efface aussitôt l'arrière plan et le redessine ; du coup plus aucune image affichée sur l'arrière plan. :cry:
J'avoue que je suis 1 peu paumé.
J'ai pourtant bien pris soin de faire retourner à ma fonction
OnEraseBkgnd() la valeur 1, comme il est stipulé ds la doc MSDN :
Citation:
An overridden OnEraseBkgnd should return nonzero in response to WM_ERASEBKGND if it processes the message and erases the background;
Qqn a-t-il déjà été confronté à ce pb ? :?: