MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)

  开发环境:vs2010

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

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

 1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
 2 {
 3       if(!CFrameWnd::PreCreateWindow(cs))
 4       {
 5           return FALSE;
 6       }
 7
 8       cs.style &= ~WS_OVERLAPPED
 9       cs.cy = 300;
10       cs.cx = 100;
11
12       return TRUE;
13 }    

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

  因为VS2010会将一些信息写入注册表,这个和之前VS2005,VS2008(SP1除外)不太一样,默认的SDI和MDI是带的BCG的一些东西。
  你要修改窗口大小,可以直接在App类的InitInstance中ShowWindow();UpdateWindow()之前修改窗口大小,例如 m_pMainWnd->MoveWindow(CRect(100, 100, 600, 400), FALSE);

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

1 int CImageQuality02App::ExitInstance()
2 {
3   // TODO: 在此添加专用代码和/或调用基类
4   AfxOleTerm(FALSE);
5   CleanState();//清除程序在注册表写入的状态信息
6
7   return CWinAppEx::ExitInstance();
8 }

 1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
 2 {
 3   if( !CFrameWndEx::PreCreateWindow(cs) )
 4     return FALSE;
 5   // TODO: 在此处通过修改
 6   // CREATESTRUCT cs 来修改窗口类或样式
 7   cs.cx = 1200;
 8   cs.cy = 600;
 9   cs.lpszClass = AfxRegisterWndClass(0);
10
11   return TRUE;
12 }

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

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

时间: 2024-10-27 19:08:38

MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)的相关文章

【VS开发】MFC中调用C函数模块的解决方案

[VS开发]MFC中调用C函数模块的解决方案 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:最近调试基于MFC的程序,当通过外部C文件引入某个function的时候,又一次忘记了C文件与C++文件的区别,直接按照一般的方式,将函数声明放入头文件,将函数定义放入C文件,然后再MFC中通过包含头文件来引用对应的function,然而爆出了链接时无法定位的错误,本文就来梳理一下C++中调用C中功能函数的方法. 首先在C

【转】VC的MFC中重绘函数的使用总结(整理)

原文网址:http://www.cnblogs.com/x8023z/archive/2008/12/09/mfc33.html 在刷新窗口时经常要调用重绘函数MFC提供了三个函数用于窗口重绘InvalidateRect(&Rect)Invalidate()UpdateWindow()当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和WM_NCPAINT(通知非客户区有变化)--WM_NVPAINT系统会自己搞定--WM_PAINT消息对应的函数是OnPain

MFC中的消息处理函数

1.在Windows API编程中,直接在消息处理函数中编写WM_PAINT处理代码. 2.在MFC中,CFrameWnd的消息处理过程在哪里呢?MFC时如何将消息处理函数和窗口关联起来的. 在CFrameWnd::CreateEx中,调用PreCreateWindows来注册窗口. AfxDefRegisterClass(AFX_WNDFRAMEORVIEW_REG):注册一个固定的窗口类,这个窗口类中的消息处理过程时一个固定的消息处理过程, 真正将我门的消息处理过程CWnd::WindowP

MFC 中的 “printf” 函数

还念C语言的我,MFC没法使用的C语言printf函数,于是: int MFCprintf(const char* m_data, ...){ CString str; char printf_buf[1024]; va_list args; /* args为定义的一个指向可变参数的变量,va_list以及下边要用到的va_start,va_end都是是在定义 可变参数函数中必须要用到宏, 在stdarg.h头文件中定义 */ int printed; va_start(args, m_data

sql server中的开窗函数over、视图、事物

一.开窗函数over的作用有两个: 1.排序order by,row_number,翻页 2.划区partition by,结合聚合函数针对某部分数据进行汇总 翻页的sql server 语句: select * from ( select *,row_number() over( order by id) as num from 表名) as t where t.num>6 and t.num<10 二.视图:用于存储一个select语句.并不是存储数据的一个容器. create view

MFC中static控件 透明设置

HBRUSH CXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  {  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);  // TODO: Change any attributes of the DC here  switch(pWnd->GetDlgCtrlID())  {      case IDC_STATIC:      {         pDC->Set

关于jquery中用函数来设置css样式

2016-12-21 23:27:55 1.jquery语法 $(selector).css(name,function(index,value)) name:必需.规定 CSS 属性的名称 function(index,value): 规定返回CSS属性新值的函数. index - 可选.接受选择器的index位置 value - 可选.接受CSS属性的当前值 2.function(index,value)的用途 相当于对通过选择符"selector"选择到的所有对象进行一次遍历,并

MFC的运行机制 以及 MFC中的DC、CDC、HDC、句柄、设备上下文 [转]

在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成员函数.也就是说MFC封装了Windows API.你说你喜欢C++而MFC换一种说法就是一个用C++写的一个函数库 然后你来调用 只不过这个类不是你写的 MFC提供数百个类,最重要的.也是编写任何VC++应用程序都必不可少的两个类CWinApp和CFrameWnd,这两个类是编写复杂庞大应用程序的基石. 1>封装特性:构成MFC框架的是MFC类库而MFC类库又是C++的一个类库.这些类封装W

MFC中使用FLASH

一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约为2.66M),并安装.对于Windows 32位系统,其默认安装目录为:C:\WINDOWS\system32\Macromed\Flash\:对于64位系统,为:C:\Windows\SysWOW64\Macromed\Flash. Flash控件的大版本号用数字表示,如9,10,11等,小版本