MFC文档视图结构框架分析(3)

2019-03-09 22:08

ANIMATE_REG);

}

if (fToRegister & AFX_WNDCOMMCTL_INTERNET_REG) {

init.dwICC = ICC_INTERNET_CLASSES;

fRegisteredClasses |= _AfxInitCommonControls(&init, AFX_WNDCOMMCTL_INTERNET_REG);

}

if (fToRegister & AFX_WNDCOMMCTL_COOL_REG) {

init.dwICC = ICC_COOL_CLASSES;

fRegisteredClasses |= _AfxInitCommonControls(&init, AFX_WNDCOMMCTL_COOL_REG);

}

if (fToRegister & AFX_WNDCOMMCTL_USEREX_REG) {

init.dwICC = ICC_USEREX_CLASSES;

fRegisteredClasses |= _AfxInitCommonControls(&init, AFX_WNDCOMMCTL_USEREX_REG);

}

if (fToRegister & AFX_WNDCOMMCTL_DATE_REG) {

init.dwICC = ICC_DATE_CLASSES;

fRegisteredClasses |= _AfxInitCommonControls(&init, AFX_WNDCOMMCTL_DATE_REG);

}

if (fToRegister & AFX_WNDCOMMCTL_LINK_REG) {

init.dwICC = ICC_LINK_CLASS;

fRegisteredClasses |= _AfxInitCommonControls(&init, AFX_WNDCOMMCTL_

LINK_REG);

}

// save new state of registered controls

pModuleState->m_fRegisteredClasses |= fRegisteredClasses;

// special case for all common controls registered, turn on AFX_WNDCOMMCTLS_REG

if ((pModuleState->m_fRegisteredClasses & AFX_WIN95CTLS_MASK) == AFX_WIN95CTLS_MASK)

{

pModuleState->m_fRegisteredClasses |= AFX_WNDCOMMCTLS_REG; fRegisteredClasses |= AFX_WNDCOMMCTLS_REG; }

// must have registered at least as mamy classes as requested return (fToRegister & fRegisteredClasses) == fToRegister; }

他是在PreCreateWindow中调用的注册,

BOOL CFrameWnd::PreCreateWindow(CREATESTRUCT& cs) {

if (cs.lpszClass == NULL) {

VERIFY(AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG)); cs.lpszClass = _afxWndFrameOrView; // COLOR_WINDOW background }

if (cs.style & FWS_ADDTOTITLE) cs.style |= FWS_PREFIXTITLE;

cs.dwExStyle |= WS_EX_CLIENTEDGE; return TRUE; }

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {

if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE;

// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return TRUE; }

BOOL CView::PreCreateWindow(CREATESTRUCT & cs) {

ASSERT(cs.style & WS_CHILD); if (cs.lpszClass == NULL) {

VERIFY(AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG)); cs.lpszClass = _afxWndFrameOrView; // COLOR_WINDOW background }

if (cs.style & WS_BORDER) {

cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style &= ~WS_BORDER; }

return TRUE; }

BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs) {

// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs

return CView::PreCreateWindow(cs); }

有几点要说明

(1)m_pMainWnd,头文件里并没有这个变量呀? 噢,这个在基类里定义的public 类型的变量,所以,他是通过继承得到的。

(2) 你注意过吗,当我们一点运行,会默认出来一个视图窗口,这是谁调用的呢?哦,就是下面这几行,它调用了opendocument() 函数。

CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); if (!ProcessShellCommand(cmdInfo)) return FALSE; (3)这个函数有个关键的地方 CMultiDocTemplate* pDocTemplate;

pDocTemplate = new CMultiDocTemplate(IDR_myTYPE, RUNTIME_CLASS(CmyDoc),

RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架 RUNTIME_CLASS(CmyView)); if (!pDocTemplate) return FALSE;

AddDocTemplate(pDocTemplate); 通过它,把视图,窗口和文档结合起来。

4:主窗口CMainFrame的创建

(1)通过CMainFrame* pMainFrame = new CMainFrame;

我们得到的是不断调用的基类 CMainFrame::CMainFrame() {

// TODO: 在此添加成员初始化代码 }

CMDIFrameWnd::CMDIFrameWnd() {

m_hWndMDIClient = NULL; }

CFrameWnd::CFrameWnd() {

ASSERT(m_hWnd == NULL);

m_nWindow = -1; m_bAutoMenuEnable = TRUE; m_lpfnCloseProc = NULL; m_hMenuDefault = NULL; m_hAccelTable = NULL; m_nIDHelp = 0; m_nIDTracking = 0; m_nIDLastMessage = 0; m_pViewActive = NULL;

m_cModalStack = 0; m_phWndDisable = NULL; m_pNotifyHook = NULL; m_hMenuAlt = NULL;

m_nIdleFlags = 0; m_rectBorder.SetRectEmpty();

m_bHelpMode = HELP_INACTIVE; m_dwPromptContext = 0;

m_pNextFrameWnd = NULL;

m_bInRecalcLayout = FALSE; m_pFloatingFrameClass = NULL; m_nShowDelay = -1; AddFrameWnd();

// unknown window ID // auto enable on by default // initialize modality support// no idle work at start // not in Shift+F1 help mode // not in list yet // no delay pending


MFC文档视图结构框架分析(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017会计硕士考研备考研习:英语词汇强化练习题(四)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: