Re: CS_HREDRAW | CS_VREDRAW
On Apr 30, 7:55 am, "Zvuk" <remove percent signs from n%5%%@m%i%m-sra
%ga.hr> wrote:
In a MDI application (I don't know if it would be the same in a SDI
application), when I resize a child frame, it's content (I have some drawing
code in OnDraw) flicker. The issue is very simply solved in a pure Win32
application. You just put:
wndClass.style = 0;
instead of
wndClass.style = CS_HREDRAW | CS_VREDRAW;
But it does not seem that simple here. I have overriden the Create method, so I
have:
BOOL CChildFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD
dwStyle , const RECT& rect , CMDIFrameWnd* pParentWnd , CCreateContext*
pContext)
{
return CMDIChildWnd::Create(AfxRegisterWndClass(0), lpszWindowName, dwStyle,
rect, pParentWnd, pContext);
}
But I could as well have had:
...
return CMDIChildWnd::Create(AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW),
lpszWindowName, dwStyle, rect, pParentWnd, pContext);
...
It still flickers, as if CS_HREDRAW | CS_VREDRAW were allready there and I could
not
get rid of them.
The very concept of overriding the Create method works indeed. If I for example
have:
...
return CMDIChildWnd::Create(AfxRegisterWndClass(CS_NOCLOSE), lpszWindowName,
dwStyle, rect, pParentWnd, pContext);
...
I really get a child window with the X on the title bar dimmed.
But it seems I can't get rid of CS_HREDRAW | CS_VREDRAW.
Why??
IIRC, CS_HREDRAW etc are added automatically by MFC. You can register
your window class in PreCreateWindow:
BOOL CMyMDIChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.lpszClass = AfxRegisterWndClass(
CS_DBLCLKS, // if you need double-clicks
NULL, // no cursor (use default)
NULL, // no background brush
AfxGetApp()->LoadIcon(IDC_YOURICON));
ASSERT(cs.lpszClass);
return CMDIChildWnd::PreCreateWindow(cs);
}
---
Ajay