2011-12-22 143 views
3

对于许多用户来说,这个问题可能被认为是天真的,但我是MFC新手,需要指示。我想将一个特定的大小设置为SDI窗口,但我无法做到这一点。我尝试在CMainFrame类中的代码:在MFC应用程序中设置窗口的大小

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
if(!CFrameWndEx::PreCreateWindow(cs)) 
    return FALSE; 

cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER; 

cs.cy = 600; 
cs.cx = 600; 
cs.y = ((cs.cy * 3) - cs.cy)/2; 
cs.x = ((cs.cx * 3) - cs.cx)/2; 


return CFrameWnd::PreCreateWindow(cs); 
} 

窗口仍然保持其大小,但没有任何更改。

就我而言,我可以重写CWnd类中的相应函数以获得相同的结果。鉴于我的程序中至今尚未使用CWnd类,我该怎么做?

+1

[上浆一个MFC窗口(http://stackoverflow.com/questions/178326/sizing-an-mfc-window) – wallyk 2011-12-22 18:01:19

回答

0

移动的CFrameWndEx::PreCreateWindow

+0

当我删除该行可能重复if(!CFrameWndEx :: PreCreateWindow(cs)) return FALSE ;.该程序崩溃。如果我把上面的附加代码放在它上面,什么都不会再改变。问题是这个函数在任何情况下都返回FALSE。我如何克服这一点? – arjacsoh 2011-12-22 18:43:41

+0

只需检查:运行您的应用程序(使用上述更改),移动并调整主应用程序的窗口大小,然后关闭应用程序。然后再次启动应用程序。应用程序的窗口是否在先前的位置? – qehgt 2011-12-22 19:26:08

0

呼叫是你的类真正从CFrameWndEx衍生上面的代码?那是IMPLEMENT_DYNANIC/IMPLEMENT_DYNCREATE行中的类吗?并在BEGIN_MESSSAGE_MAP行?

想想也对加入ON_WM_CREATE你的消息映射及其OnCreate方法允许其他可能性:

  • 做类似的事情,你在做什么INT这种新方法。

  • 使用SetWindowPos这里