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 : 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
 
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.

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 :

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 ? :