Re: display array in a frame wnd
"J-F Portala" <jfportala@free.fr> wrote in message
news:46e17bfa$0$18467$426a34cc@news.free.fr...
...But, I have a little problem and perhaps you will have an idea.
When I resize the window(with the mouse on the border frame), the
refreshment is uncomfortable because it
goes from image to blank to image etc (it is flashing).
I have put the fonction DrawToHDC in the on paint function of the window.
Is there a technique to avoid this flashing.
It is the same if I want to draw with the mouse a rectangle (simulation of
selecting area)
If I want to see the drawing, it is flashing.
I think it is due to refreshment but I have no idea to optimize it.
Do you see something wrong.
Thank you for your help
Jeff
void CDisplayImg::ShowImage(IplIMage* pImg)
{
m_pImg = pImg ;
CRect rect ;
GetClientRect(&rect) ;
DrawToHDC(this->GetDC()->m_hDC,rect) ;
}
If this is executed for WM_PAINT then it is a big mistake to use GetDC().
Your WM_PAINT handler must use the CPaintDC, so change it to something like
this:
.... OnPaint()
CPaintDC dc;
DrawToHDC(dc.m_hDC, ...);
If you do not use CPaintDC then you get an endless loop, painting and
repainting forever!
The flashing (flickering) problem is caused by the default processing of
WM_ERASEBKGND. That message arrives just before WM_PAINT, and the default
WM_ERASEBKGND processing erases the entire window. This causes a white
flash. You can handle WM_ERASEBKGND yourself and return without doing
anything to eliminate the flash. Then handle the erase and draw in one step
in WM_PAINT by using a memory DC and blitting the whole image to the window.