Bonjour,
je souhaite creer des CStatic transparents du genre TextEditor sur un background, c'est a dire faire apparaitre du texte sans le cadre gris standard.
pour cela je surcharge OnEraseBkgnd et je dessine le background dans cette fonction :
puis je dessine le background transparent du control :
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 BOOL CTestDlg::OnEraseBkgnd(CDC* pDC) { CBitmap *ptrBmpOld; CDC dcMemory; BITMAP bm; CRect rect; Background.GetBitmap(&bm); GetClientRect(rect); int nHor = rect.Width()/bm.bmWidth+1; int nVer = rect.Height()/bm.bmHeight+1; dcMemory.CreateCompatibleDC(pDC); ptrBmpOld=dcMemory.SelectObject(&Background); // Draw it for (int i=0;i<nHor;i++) for (int j=0;j<nVer;j++) pDC->BitBlt(i*bm.bmWidth,j*bm.bmHeight, bm.bmWidth, bm.bmHeight,&dcMemory,0,0, SRCCOPY); dcMemory.SelectObject(ptrBmpOld); return TRUE; }
Le probleme c'est que le background du control n'est pas le bon, en effet c'est celui de l'ecran precedent le lancement de mon application. (etrange?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); { pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH) GetStockObject(NULL_BRUSH); } return hbr; }
JE precise que je developpe sur windows mobile 6 et que tous les exemples que j'ai trouvé sont sur win32. Est ce l'explication, ou y'a t-il une autre astuce?
J'espere que vous pourrez m'aider.
PS : j'ai essayé une autre solution qui consiste a definir le background comme un static picture editor, puis de le dessiner en premier et ensuite le reste des controls transparents. Le probleme c'est que les controls ne s'affichent pas, y'a juste le background. Meme lmes controls statics ne s'affichent pas.
A bientot j'espere
Partager