Re: Hide dialog at first
****
This is because the OnEraseBkgnd for a dialog page is to paint it the dia=
log color, and
you are presumably overriding OnPaint to paint it black.
****>Because the background
of the dialog-page will be erased (OnEraseBackground()) and filled
with a brush (black) and after that all CImageStatic members will be
painted for the new dialog-page.
****
Did you add the ClipChildren style to the dialog?
****
No I used the OnEraseBackground() method to fill the background with a
black brush. But I did`nt set the ClipChildren style to the dialog.
After that I can see that the cstatic images won`t be overwritten by
this black brush.
BEGIN_MESSAGE_MAP(CTimingPage, CWizardPage)
//{{AFX_MSG_MAP(CHardwarePage)
//}}AFX_MSG_MAP
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
BOOL CTimingPage::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(rect);
CBrush brush;
brush.CreateSolidBrush(RGB(0, 0, 0));
pDC->FillRect(rect, &brush);
return TRUE;
}
CTimingPage is a subdialog in the wizard, which contains these
CImageStatic images.
After adding the ClipChildren style to this dialog, I can see also a
flickering (but it`s different; I try to described it): If I set a
breakpoint in the above OnEraseBackground() method (in the CTimingPage
class) I can see that the "border (the outside pixel around the whole
image) of the CImageStatic image will be cropped after the pDC-
FillRect.
Then I set another breakpoint in the OnPaint() method of the
CImageStatic class. After the dc.BitBlt() function these outside
pixels of the images will be shown again.
void CImageStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
CPoint size( bm.bmWidth, bm.bmHeight );
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
int SavedState = MemDC.SaveDC();
MemDC.SelectObject(hBitmap);
dc.BitBlt(0,0,size.x,size.y,&MemDC,0,0,SRCCOPY);
//and so on
}
Beside this effect I didn`t see any flickering.
But if I have on the one subdialog an image placed where on another
subdialog two images with a short break a placed; I will see the old
(big) image from the first dialog in the second dialog
first dialog
____________
| |
--------------------
second dialog
_____ ___
| | | |
-------- -------
These three rectangle display the image positions in the two
subdialogs. Between the two images in the second dialog I will see the
image from the first subdialog if I use the ClipChildren option. Do
you know if there`s another solution to solve such a scenario?
best regards
Hans
It seems that the only solution to reduce this flicker would be to
avoid erasing the dialog-background by switching from one dialog-page
to another. The size of one CImageStatic image is 225x52 pixel.
****
I presume the bitmap is an image, rather than just a bunch of black pixel=
s; if it is just
a bunch of black pixels, then it has no reason to exist. Because this =
is a CStatic, you
seem to be suggesting that it might be a CStatic that lies "under" all th=
e other controls.
This would be a bad choice. And did you set the ClipSiblings style for=
the dialog?
joe
****
best regards
Hans
Joseph M. Newcomer [MVP]
email: newco...@flounder.com
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm