CFormView相比CDialog来说,多了个比较吸引人的优点:它继承自CScrollView。因此,天然的,CFormView就拥有了视图自动滚动的特性。
动态创建
继承自CFormView的子类,VS的代码生成器会自动使用如下的两个宏:
DECLARE_DYNCREATE(子类的头文件)
IMPLEMENT_DYNCREATE(子类的实现文件)
这两个宏经过展开后的即可使类具备动态创建的特性。我们还会注意到,子类的构造/析构被声明为protected,这明确的向它的使用者传达出了这样的概念:不要显式的创建我,请”动态创建”我。
也即,如下的代码是不能工作的:
MFC框架的参与
基于以上的原理,在文档视图结构中,我们不需要显式视图窗口,框架会我们做这件事情,魔法就在于这些类均支持动态创建特性。但是,有时候我们希望能手动创建视图,并
1) 保持构造/析构仍然是protected
2) 享受其天然支持的滚动特性