现在的位置: 首页 > 综合 > 正文

CView类初始化

2013年05月14日 ⁄ 综合 ⁄ 共 938字 ⁄ 字号 评论关闭

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风格

抱歉!评论已关闭.