Q: How to prevent a resizable window to be smaller than...?
A: Handle 'WM_GETMINMAXINFO' message:
Code:void CWndDerived::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { // set the minimum tracking width // and the minimum tracking height of the window lpMMI->ptMinTrackSize.x = 200; lpMMI->ptMinTrackSize.y = 150; }
Q: My resizable window is a dialog and I do not see 'WM_GETMINMAXINFO' in the messages list of ClassWizard. What can I do?
A: Because 'WM_GETMINMAXINFO' is by default filtered by class wizard for a 'CDialog' derived class, you can add the 'ON_WM_GETMINMAXINFO()' macro and the corresponding handler function by hand, or:
- in MFC ClassWizard select 'Class Info' tab and choose 'Window' from 'Message filter' combo.
- go back to 'Message Maps', select your CDialog-derived class in 'Object IDs' list and then 'WM_GETMINMAXINFO' from the messages list.
Q: My application is SDI/MDI. The required minimum size is given by the view. I handled 'WM_GETMINMAXINFO' in my CView-derived class but does not work. What I'm doing wrong?
A: A view is not responsible for sizing. Handle 'WM_GETMINMAXINFO' in the corresponing frame window:
Code:void CChildFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { // the minimum client rectangle (in that is lying the view window) CRect rc(0, 0, 200, 150); // compute the required size of the frame window rectangle // based on the desired client-rectangle size CalcWindowRect(rc); lpMMI->ptMinTrackSize.x = rc.Width(); lpMMI->ptMinTrackSize.y = rc.Height(); }
Q: My application is SDI/MDI. I don't want to be resizable at all.
A: Set also the maximum track size:
An alternative solution is to simply remove 'WS_THICKFRAME' style in 'PreCreateWindow()':Code:void CChildFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { lpMMI->ptMinTrackSize.x = lpMMI->ptMaxTrackSize.x = 200; lpMMI->ptMinTrackSize.y = lpMMI->ptMaxTrackSize.y = 150; }
Code:BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) { if(!CMDIChildWnd::PreCreateWindow(cs)) return FALSE; cs.style &= ~WS_THICKFRAME; return TRUE; }


Reply With Quote
Bookmarks