cformview的初始化函数是哪个

 我来答
EvenHHZ
2016-10-25 · 知道合伙人软件行家
EvenHHZ
知道合伙人软件行家
采纳数:13691 获赞数:18845
个人出版图书:《玩转Python网络爬虫》、《玩转Django2.0》

向TA提问 私信TA
展开全部
一.CFormView类优点:
MFC创建基于对话框的应用程序存在对话框大小无法改变大小的问题.程序移植遇到不同分辨率显示器就可能产生显示不全的问题.基于CFormView的派生类可以解决这个问题.
二.单文档应用程序使用:
两种方法.第一种是在创建单文档应用程序过程中直接将派生于CView类的CXXXView类的基类修改为CFormView,除了经典的文档视类结构之外,MFC将额外生成一个对话框资源,ID为"IDD_XXX_FORM".同时,该对话框通过枚举与"CXXXView"类关联.

[cpp] view plain copy
//View类派生于CFormView
class CSDITestView : public CFormView
{
protected: // 仅从序列化创建
CSDITestView();
DECLARE_DYNCREATE(CSDITestView)

public:
//主对话框与类关联
enum{ IDD = IDD_SDITEST_FORM };

第二种方法:已经按照默认流程创建完单文档应用程序了之后再创建基于CFormView类的对话框时最好不要手动修改CXXXView的基类为CFormView,再手动添加一个对话框.
而是要通过以下步骤实现:

1.新建一个单文档应用程序.
2.菜单栏”项目”选择”类向导”,在”添加类”弹出式对话框中输入类名,”基类”选择为”CFormView.
3.在单文档应用程序的CXXXApp的实现文件顶部添加”#include ‘新类的头文件名’”.
4.在CXXXApp类的”InitInstance()”函数的”CSingleDocTemplate”类型(注册应用程序的文档模板,文档模板将用作文档,框架窗口和视图之间的连接)连接视类时,将视类替换为我们新添加的CFormView类派生的对话框类.
5.编译通过运行之后发现对话框可以在单文档一启动就显示了.
[cpp] view plain copy
// 注册应用程序的文档模板。文档模板
// 将用作文档、框架窗口和视图之间的连接
CSingleDocTemplate* pDocTemplate;
//pDocTemplate = new CSingleDocTemplate(
// IDR_MAINFRAME,
// RUNTIME_CLASS(CSDITestDoc),
// RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
// RUNTIME_CLASS(CSDITestView));
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSDITestDoc),
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CSDIFormDlg));

接下来就可以像操作对话框应用程序一样直接操作单文档应用程序了.需要注意的是CFormView派生类没有"OnInitDialog"函数.对话框的初始化(或者说习惯开始函数)可以放在"OnInitialUpdate"中完成.
三.多文档应用程序中实现两个对话框以选项卡的方式显示.
1.按照上述方法创建两个派生于CFormView的对话框.
2.为了让不同的选项卡显示不同的名字,可以在字符串表(string table)里新建一个字符串资源以备使用.如下图所示.

3.将"CXXXApp"类的CMDITestApp::InitInstance()函数中的pDocTemplate修改为该类的成员变量.并且新加一个相同类型的成员变量.

[cpp] view plain copy
public:
CMultiDocTemplate* pDocTemplate;
CMultiDocTemplate* pChildDocTemplate;
4.新增的文档模板将第二个对话框与框架和文档连接起来.与pDocTemplate连接方法一致.函数的第一个参数可以设置为步骤2新建的那个字符串资源.

5.测试此时还是不能同时打开两个对话框.需要注释掉程序自动生成的新建文件函数,重载本类的新建文件函数

[cpp] view plain copy
//注释掉默认的文件新建函数
//ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen)
//重载使用自己的文件新建函数
ON_COMMAND(ID_FILE_NEW, &CMDITestApp::OnFileNew)
6.重载的文件新建函数中内容如下.

[cpp] view plain copy
void CMDITestApp::OnFileNew()
{
// TODO: 在此添加命令处理程序代码
pDocTemplate->OpenDocumentFile(NULL);
pChildDocTemplate->OpenDocumentFile(NULL);

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式