我想让单文档界面的窗口保持最大化,不能改变大小,而且不能移动。
当我如下设置时:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style&=~WS_MAXIMIZEBOX;
cs.style&=~WS_THICKFRAME;
cs.style&=~WS_MINIMIZEBOX;
return TRUE;
}
虽然能够实现最大化,但是如果我鼠标双击标题栏,窗口会还原,而且在也不能最大化。另外,如果我鼠标左键在标题栏上按下,却能够移动整个窗口。
请问:如何才能解决这些问题?
当我如下设置时:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style&=~WS_MAXIMIZEBOX;
cs.style&=~WS_THICKFRAME;
cs.style&=~WS_MINIMIZEBOX;
return TRUE;
}
虽然能够实现最大化,但是如果我鼠标双击标题栏,窗口会还原,而且在也不能最大化。另外,如果我鼠标左键在标题栏上按下,却能够移动整个窗口。
请问:如何才能解决这些问题?
cs.style&=~WS_THICKFRAME;
cs.style&=~WS_MINIMIZEBOX;
中把前面两句去掉,保留后面那一句
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
cs.style&=WS_POPUPWINDOW;
cs.cy = ::GetSystemMetrics(SM_CYSCREEN) ;
cs.cx = ::GetSystemMetrics(SM_CXSCREEN) ;
return 1;
}
2.映射WM_MOVE
void CMainFrame::OnMove(int x, int y)
{
MoveWindow(CRect(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN)));
}
我用了一个比较苯的方法,我把标题栏去掉了。
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
// TODO: Add your message handler code here and/or call default
// 1 - Read the various system metrics
int cyCaption = ::GetSystemMetrics( SM_CYCAPTION );
int cxFrame = ::GetSystemMetrics( SM_CXFRAME );
int cyFrame = ::GetSystemMetrics( SM_CYFRAME );
int cxScreen = ::GetSystemMetrics( SM_CXSCREEN );
int cyScreen = ::GetSystemMetrics( SM_CYSCREEN );
int cyMenu = ::GetSystemMetrics( SM_CYMENU ); lpMMI->ptMaxPosition.y = -( cyFrame + cyCaption );
lpMMI->ptMaxSize.y = lpMMI->ptMaxTrackSize.y =
cyScreen + 2 * cyFrame + cyCaption ; CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
虽然界面比较丑一点,但是什么都移动不了了,效果还不错。