java窗口大小不可改变函数_MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)...

开发环境:vs2010

在开发基于单文档的MFC项目时,我需要在程序的初始化时,设置框架的大小,应在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中设定设置cs,包括框架窗口的样式以及大小等。

如下为将框架窗口设置为长宽为100和300时的代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&cs)2 {3 if(!CFrameWnd::PreCreateWindow(cs))4 {5 returnFALSE;6 }7

8 cs.style &= ~WS_OVERLAPPED9 cs.cy = 300;10 cs.cx = 100;11

12 returnTRUE;13 }

View Code

但是实际在运行时无法改变框架的尺寸,网友给出了一下的原因和解决方案:

因为VS2010会将一些信息写入注册表,这个和之前VS2005,VS2008(SP1除外)不太一样,默认的SDI和MDI是带的BCG的一些东西。

你要修改窗口大小,可以直接在App类的InitInstance中ShowWindow();UpdateWindow()之前修改窗口大小,例如 m_pMainWnd->MoveWindow(CRect(100, 100, 600, 400), FALSE);

我采用的方法是先在App类的初始化实例时调用CleanState(),清除注册表的状态信息,然后在框架类中设置窗口大小和样式,具体代码如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 intCImageQuality02App::ExitInstance()2 {3   //TODO: 在此添加专用代码和/或调用基类

4 AfxOleTerm(FALSE);5   CleanState();//清除程序在注册表写入的状态信息

6

7   returnCWinAppEx::ExitInstance();8 }

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&cs)2 {3   if( !CFrameWndEx::PreCreateWindow(cs) )4     returnFALSE;5   //TODO: 在此处通过修改6   //CREATESTRUCT cs 来修改窗口类或样式

7   cs.cx = 1200;8   cs.cy = 600;9   cs.lpszClass = AfxRegisterWndClass(0);10

11   returnTRUE;12 }

View Code

引用来源:http://blog.sina.com.cn/s/blog_62f521600100ml2l.html

http://hyhvi.iteye.com/blog/1513942

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值