① pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS (CTestDoc), RUNTIME_CLASS(CMainFrame), //主SDI框架窗口 RUNTIME_CLASS(CTestView)); if(!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate);这一段什么意思j
时间: 2024-04-01 07:31:28 浏览: 23
这是在 MFC 框架下创建一个 Single Document Interface(SDI)应用程序的关键代码之一。这段代码的作用是创建一个单文档模板(CSingleDocTemplate),并将其添加到应用程序的文档模板列表中(通过 AddDocTemplate 函数实现)。
具体来说,这个单文档模板包括了以下几个参数:
- IDR_MAINFRAME:资源文件 ID,用于指定主框架窗口的菜单、工具栏等。
- RUNTIME_CLASS (CTestDoc):运行时类(Runtime Class),用于指定应用程序的文档类。
- RUNTIME_CLASS(CMainFrame):运行时类,用于指定应用程序的主框架窗口类。
- RUNTIME_CLASS(CTestView):运行时类,用于指定应用程序的视图类。
这个单文档模板的作用是在程序启动时创建一个空的文档,并将其与一个视图关联起来,最终显示在主框架窗口中。
相关问题
为什么有的mfc项目中的InitInstance不用到这段代码① pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS (CTestDoc), RUNTIME_CLASS(CMainFrame), //主SDI框架窗口 RUNTIME_CLASS(CTestView)); if(!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate);
这段代码是用来初始化 MFC 应用程序的单文档模板(Single Document Template,SDT),即指定了应用程序的主框架窗口、文档类和视图类。如果应用程序只有一个文档视图,那么需要使用这段代码来初始化 SDT。但如果应用程序不需要文档视图,或者有多个文档视图,则可以不需要这段代码。
请注意,这段代码不是必需的,因为在 MFC 应用程序的 InitInstance 函数中,还可以使用其他方式来初始化文档视图,比如使用 CWinAppEx::InitInstance 函数中的 AddDocTemplate 函数。所以在某些情况下,可能会选择不使用这段代码。
VC6创建MFC视图模式封装第三方ocx VSFlexGrid例子
好的,我会尽力回答您的问题。
首先,您需要在您的MFC项目中添加VSFlexGrid ActiveX控件。添加方法是:打开“工具”菜单,选择“工具栏”中的“工具箱”,然后在工具箱中右键单击,并选择“添加/删除项目”选项。接下来,在弹出的“添加/删除项目”对话框中,选择“控件”选项卡,然后在列表中找到“VSFlexGrid”,选择它并单击“添加”按钮。
然后,您需要创建一个自定义的视图类,并从CView类派生。您可以在VC6中使用“添加类”向导来创建它。在向导中,您需要选择“视图类”选项,并指定您的新类的名称和基类。在此示例中,让我们称它为“CVSFlexGridView”。
接下来,您需要在您的新视图类中添加一个成员变量来保存VSFlexGrid控件的指针。您可以使用“类向导”中的“添加变量”功能来添加它。在“添加变量”对话框中,选择您的VSFlexGrid控件的ID,并将其声明为一个指向VSFlexGrid控件的指针类型。例如:
```
class CVSFlexGridView : public CView
{
public:
CVSFlexGridView();
virtual ~CVSFlexGridView();
protected:
VSFlexGrid *m_pFlexGrid; // VSFlexGrid控件指针
// ...
};
```
现在,您需要在您的新视图类中覆盖CView类的一些虚拟函数,以便在视图创建和销毁时创建和销毁VSFlexGrid控件。例如:
```
CVSFlexGridView::CVSFlexGridView()
{
m_pFlexGrid = NULL;
}
CVSFlexGridView::~CVSFlexGridView()
{
if (m_pFlexGrid != NULL)
{
m_pFlexGrid->DestroyWindow();
delete m_pFlexGrid;
}
}
BOOL CVSFlexGridView::PreCreateWindow(CREATESTRUCT& cs)
{
// 在此处修改视图窗口样式和扩展样式
// 调用基类函数
return CView::PreCreateWindow(cs);
}
void CVSFlexGridView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// 创建VSFlexGrid控件
if (m_pFlexGrid == NULL)
{
m_pFlexGrid = new VSFlexGrid;
m_pFlexGrid->Create(NULL, _T("VSFlexGrid"), WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 0);
}
}
void CVSFlexGridView::OnDraw(CDC* /*pDC*/)
{
// 不需要实现此函数
}
```
最后,您需要将您的新视图类与您的文档类相关联。您可以在应用程序初始化代码中完成此操作。例如:
```
BOOL CMyApp::InitInstance()
{
// ...
// 注册文档模板
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MYTYPE,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子窗口框架
RUNTIME_CLASS(CVSFlexGridView)); // 自定义视图类
AddDocTemplate(pDocTemplate);
// ...
}
```
好了,以上就是一个简单的示例,演示了如何在VC6中创建一个MFC视图模式封装第三方OCX的VSFlexGrid控件。希望对您有所帮助!
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)