[转]CView类初始化

OnInitinstance是全局性的初始化,一般编程习惯是所有的全局变量,如果有需要初始化的,应放在这里进行初始化。比如有一个全局字体CFont g_SystemFont,则这个字体的Create应该放在OnInitinstance中执行,并且失败时应返回FALSE以退出程序,表示它是程序运行的基本,失败则程序不可以执行。 

CView的构造只应该放一些和视相关且独立于文档的初始化语句。所谓独立于文档,指每次打开新的文档时不会变化的属性。比如一个Windows自带的Notepad文本编辑器,里面有一个自动换行的选项,如果在这个.txt文件打开时用户将它打开了自动换行,则在打开下一个.txt时它都将继续保持为打开,不因为打开新的文档而变化。这个选项就应该在CView的构造中初始化。 

OnInitUpdate只应该放一些和视相关且也相关于文档的初始化语句。比如Notepad中,每个文档打开时,都要自动根据.txt文件的前几个字节判断它的编码方式(是UTF8或是Unicode或是ANSI)。这个选项会因为不同的.txt的设置而不同,则应该在OnInitUpdate中检测文档的编码方式并记录起来(当然,编码方式这个选项在实际编写时很可能会作为文档类的属性而不是视的属性,在这里只是举例说明一下罢了)。 

PreCreateWindow是CWnd的重载函数,特指当你需要新创建一种特性的窗口时(也就是子类化,不过MFC帮你封装了起来,使得使用从CWnd派生的形式来实现子类化一个新的特性的窗口,这也是为什么MFC会较其他窗口封装技术慢的主要原因之一,因为使用了虚函数),在创建之前调用PreCreateWindow以允许你设置一些这个新特性的窗口一些东西。比如窗口类(WNDCLASSEX)里的结构有指明此窗口是否需要接收鼠标双击消息,因此如果你的新特性的视需要接收鼠标双击消息,就应该在PreCreateWindow中设置。亦或者你的新特性的窗口不想有WS_BORDER风格(即不绘制边界,CView就会要求没有WS_BORDER)并且想强制说明此窗口只能作为子窗口创建,那么可以在PreCreateWindow中对cs.lStyle加上WS_BORDER和WS_CHILD风格
http://blog.youkuaiyun.com/wanglei5695312/article/details/5458684

初始化文档和视图

文档以两种不同的方法进行创建,因此文档类必须支持这两种方法。第一种方法,用户使用“新建文件”命令创建一个新的空文档。在此方法中,通过重写 CDocument 类的 OnNewDocument 成员函数初始化文档。第二种方法,用户使用“文件”菜单上的“打开”命令创建其内容为从某个文件读取的新文档。在此方法中,通过重写 CDocument 类的 OnOpenDocument 成员函数初始化文档。如果两个初始化都相同,可以通过两个重写调用公共成员函数,或者OnOpenDocument 可以调用 OnNewDocument 初始化未更改的文档,然后完成打开操作。

视图在文档创建之后创建。初始化视图的最佳时间是框架完成创建文档、框架窗口和视图后。可以通过重写 CView 的 OnInitialUpdate 成员函数初始化视图。如果需要在每次文档更改时重新初始化或调整任何内容,则可以重写 OnUpdate。

转载于:https://www.cnblogs.com/mr-totoro/archive/2012/12/11/5785706.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值