我修改的程序是基于MFC的SDI,程序运行时默认状态是最大化,即一打开程序就是最大化状态,我在框架类下面添家如下代码:
void CMainFrame::ActivateFrame(int nCmdShow)
{
// TODO: Add your specialized code here and/or call the base class
int nScreenCount=2;
int cxScreen = ::GetSystemMetrics(SM_CXSCREEN);
int cyScreen = ::GetSystemMetrics(SM_CYMAXIMIZED);
CRect rect;
rect.left = 0;
rect.top = 0;
rect.right = cxScreen;
rect.bottom = cyScreen;//wei le bu bei ren wu lan zhe zhu
if(nScreenCount==2)
{
rect.right=rect.right/2;
}
else if(nScreenCount==4)
{
rect.right=rect.right/2;
rect.bottom=rect.bottom/2;
}
WINDOWPLACEMENT wndpl;
wndpl.length=sizeof(WINDOWPLACEMENT); wndpl.showCmd=SW_SHOW; wndpl.flags=WPF_SETMINPOSITION; wndpl.ptMinPosition=CPoint(0,0); wndpl.ptMaxPosition=CPoint(-::GetSystemMetrics(SM_CXBORDER),-::GetSystemMetrics(SM_CYBORDER)); wndpl.rcNormalPosition=rect; SetWindowPlacement(&wndpl);
nCmdShow=SW_SHOW;
CFrameWnd::ActivateFrame(nCmdShow);
}
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)函数中设置为:
cs.style &= WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
| WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | ~WS_MAXIMIZEBOX/* | WS_MAXIMIZE*/;
这样程序运行起来好象根本没有执行这段代码,运行起来的默认状态还是最大化,当我双击标题栏或者点击还原按钮时,才达到我所要的效果(窗口占屏幕一半),请问各位这是什么原因,帮忙啊,急用,谢谢了。
void CMainFrame::ActivateFrame(int nCmdShow)
{
// TODO: Add your specialized code here and/or call the base class
int nScreenCount=2;
int cxScreen = ::GetSystemMetrics(SM_CXSCREEN);
int cyScreen = ::GetSystemMetrics(SM_CYMAXIMIZED);
CRect rect;
rect.left = 0;
rect.top = 0;
rect.right = cxScreen;
rect.bottom = cyScreen;//wei le bu bei ren wu lan zhe zhu
if(nScreenCount==2)
{
rect.right=rect.right/2;
}
else if(nScreenCount==4)
{
rect.right=rect.right/2;
rect.bottom=rect.bottom/2;
}
WINDOWPLACEMENT wndpl;
wndpl.length=sizeof(WINDOWPLACEMENT); wndpl.showCmd=SW_SHOW; wndpl.flags=WPF_SETMINPOSITION; wndpl.ptMinPosition=CPoint(0,0); wndpl.ptMaxPosition=CPoint(-::GetSystemMetrics(SM_CXBORDER),-::GetSystemMetrics(SM_CYBORDER)); wndpl.rcNormalPosition=rect; SetWindowPlacement(&wndpl);
nCmdShow=SW_SHOW;
CFrameWnd::ActivateFrame(nCmdShow);
}
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)函数中设置为:
cs.style &= WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
| WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | ~WS_MAXIMIZEBOX/* | WS_MAXIMIZE*/;
这样程序运行起来好象根本没有执行这段代码,运行起来的默认状态还是最大化,当我双击标题栏或者点击还原按钮时,才达到我所要的效果(窗口占屏幕一半),请问各位这是什么原因,帮忙啊,急用,谢谢了。
{
cs.x = 0;
cs.y = 0;
cs.cx = 1024;
cs.cy = 768; cs.style = WS_BORDER | WS_CAPTION | WS_POPUPWINDOW | WS_MAXIMIZE;
cs.style &= ~FWS_ADDTOTITLE;
cs.style &= ~WS_SYSMENU; if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs return TRUE;
}
int nScreenCount=2;
int cxScreen = ::GetSystemMetrics(SM_CXSCREEN);
int cyScreen = ::GetSystemMetrics(SM_CYMAXIMIZED);
CRect rect;
rect.left = 0;
rect.top = 0;
rect.right = cxScreen;
rect.bottom = cyScreen;//wei le bu bei ren wu lan zhe zhu
if(nScreenCount==2)
{
rect.right=rect.right/2;
}
else if(nScreenCount==4)
{
rect.right=rect.right/2;
rect.bottom=rect.bottom/2;
}
cs.x = rect.left;
cs.y = rect.top;
cs.cx = rect.Width();
cs.cy = rect.Height();这样还是不行
#define MINX 200
#define MINY 300
#define MAXX 300
#define MAXY 400void CMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
CRect rectWindow;
GetWindowRect(&rectWindow); CRect rectClient;
GetClientRect(&rectClient); // get offset of toolbars, scrollbars, etc.
int nWidthOffset = rectWindow.Width() - rectClient.Width();
int nHeightOffset = rectWindow.Height() - rectClient.Height(); lpMMI->ptMinTrackSize.x = MINX + nWidthOffset;
lpMMI->ptMinTrackSize.y = MINY + nHeightOffset;
lpMMI->ptMaxTrackSize.x = MAXX + nWidthOffset;
lpMMI->ptMaxTrackSize.y = MAXY + nHeightOffset;
}
第二步:在CFrameWnd的继承类的PreCreateWindow函数中去掉WS_MAXIMIZEBOX消息,否则在最大化时你将得不到预料的结果.BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style &= ~WS_MAXIMIZEBOX;
return CFrameWnd::PreCreateWindow(cs);
}
在CWinApp::InitInstance()调用pMainFrame->ShowWindow(m_nCmdShow)前设置CWinApp::m_nCmdShow为SW_SHOWMAXIMIZED
谢谢了,幸亏你提醒我在CWinApp::InitInstance()调用pMainFrame->ShowWindow(m_nCmdShow)前设置CWinApp::m_nCmdShow为SW_SHOWMAXIMIZED
要不然我还找不到原因呢,现在解决了,多谢。