今天看到了单文档视图,因为学习了一段时间的JAVA,中间间隔的时间比较长,再回头看C++的代码,略感吃力,不过好歹算是又拾起来了十之七八吧。
这仍然是MFC Windows程序中的一个例程,只不过不用向导(类的添加用的类向导,当然内部东西都是自己写的)的日子确实很痛苦,但是很充实。继续,代码。
//首先当然是App类了。
//SquaresApp.h
#pragma once
#include"resource.h"
class CSquaresApp :
public CWinApp
{
public:
virtual BOOL InitInstance();
};
//SquaresApp.cpp
#include "stdafx.h"
#include "SquaresApp.h"
#include "MainFrame.h"
#include "SquaresDoc.h"
#include "SquaresView.h"
CSquaresApp squareApp;
BOOL CSquaresApp::InitInstance()
{
SetRegistryKey(_T("Squares"));
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSquaresDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CSquaresView));
AddDocTemplate(pDocTemplate);
EnableShellOpen();
RegisterShellFileTypes(TRUE);
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if(!ProcessShellCommand(cmdInfo))
return FALSE;
//m_pMainWnd->ShowWindow(SW_SHOW);
//m_pMainWnd->UpdateWindow();
m_pMainWnd->DragAcceptFiles(TRUE);
return 1;
}
这是把所有的冗余代码去掉了的结果。
首先创建文档模板,然后添加到App中,设置在文件浏览器中可以打开,注册文件类型,运行浏览器命令(比如说双击打开,还是新建文档,默认0,就是newFile)。
pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CSquaresDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CSquaresView));
这一句,运行类,跟Java中的Class.forName();很像,也就是将窗口类,文档类,视图类加入到文档模板中,然后就是模板来操作之了。
所以就算不用类模板,实现单文档也是很容易的,不过各种消息函数到一个类里,看看就难受。。。
本来是一步步跟代码的,结果真到写的时候不知道要写什么了。。。好像觉得没什么东西好写了。。