<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0

     

     

    這類問(wèn)題的出現(xiàn)主要在bool CWinApp::ProcessShellCommand(CCommandLineInfo& rCmdInfo);

    函數(shù)的關(guān)鍵內(nèi)容: 
    BOOL bResult = TRUE; 
    switch (rCmdInfo.m_nShellCommand) 

    case CCommandLineInfo::FileNew:  //
    新建 
     if (!AfxGetApp()->OnCmdMsg(ID_FILE_NEW
    0 NULL NULL)) 
      OnFileNew(); 
     if (m_pMainWnd == NULL) <_pv


    3&­'  
      bResult = FALSE; 
     break; 
    case CCommandLineInfo::FileOpen: 
     if (!OpenDocumentFile(rCmdInfo.m_strFileName)) 
      bResult = FALSE; 
     break; 
    通過(guò)上面的內(nèi)容我們可以看出:如果沒(méi)有對(duì)ID_FILE_NEW做映射的話出現(xiàn)問(wèn)題就在OnFileNew(); 
    CWinApp
    對(duì)OnFileNew的默認(rèn)實(shí)現(xiàn)是調(diào)用m_pDocManager->OnFileNew();

    我們繼續(xù)解析cdocmanager,它究竟干了些什么? 
    (首先說(shuō)明一下CDocManager它主要的功能是幫助CWinApp是管理文檔模板鏈表和注冊(cè)文件類型.

    //如果模板列表為空的話 
    if (m_templateList.IsEmpty()) 
    { r;Rg">h


    q  
     TRACE0("Error: no document templates registered with CWinApp. 
    "); 
     AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);  //報(bào)錯(cuò)并返回.這里不會(huì)報(bào)建立新文檔出錯(cuò)。 
     return; q3,7I
    ?m
     
    }

    cdoctemplate* pTemplate = (CDocTemplate*)m_templateList.GetHead(); 
    if (m_templateList.GetCount() > 1) 

     // more than one document template to choose from 
     // bring up dialog prompting user 
     CNewTypeDlg dlg(&m_templateList); 
     int nID = dlg.DoModal(); 
     if (nID == IDOK) 
      pTemplate = dlg.m_pSelectedTemplate;
    Mj8F  
     else 
      return;     // none - cancel operation mT?#=


    w  
    }

    assert(ptemplate != NULL); ­Mv


    ]kW  
    ASSERT_KINDOF(CDocTemplate pTemplate);

    ptemplate->opendocumentfile(null);

    通過(guò)上面的代碼我們可以看出,cwinapponfilenewonfileopen分別調(diào)用cdocmanager的虛擬函數(shù)onfilenewonfileopen。而在cdocmanager里面。通過(guò)模板鏈表選擇不同的模板來(lái)調(diào)用文檔模板的opendocumentfile(); 
    如果傳入?yún)?shù)NULL表示新建文件。

    下面我們來(lái)看看cdoctemplate::opendocumentfile()它是一個(gè)最關(guān)鍵的函數(shù)。因?yàn)樗翘摂M函數(shù),我們考慮CSingleDocTemplate::OpenDocumentFile的情況。 z


    4RqL=  
    這個(gè)函數(shù)里面有一段代碼: 
    其中:AFX_IDP_FAILED_TO_CREATE_DOC 就是字符建立空文檔失敗的資源id 
    // create a new document 
    pDocument = CreateNewDocument(); 
    ASSERT(pFrame == NULL);     // will be created below 
    bCreated = TRUE; 
    if (pDocument == NULL)
    N+  

    AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); 
    return NULL; 

    ASSERT(pDocument == m_pOnlyDoc);?#Z  
    if (pFrame == NULL) 

    ASSERT(bCreated);

    // create frame - set as main document frame


    @(m`w  
    BOOL bAutoDelete = pDocument->m_bAutoDelete; 
    pDocument->m_bAutoDelete = FALSE; 
    // don’t destroy if something goes wrong 
    pFrame = CreateNewFrame(pDocument NULL); 
    pDocument->m_bAutoDelete = bAutoDelete;
    1nD{WwQ  
    if (pFrame == NULL) 

     AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
    %BvyG
     
     delete pDocument;       // explicit delete on error 
     return NULL; 
    }

    通過(guò)觀察上面的代碼我們很容易的看出有兩個(gè)可能出錯(cuò)的原因:1 CreateNewDocument返回為NULL 2 createnewframe 返回為空。

    先看 CreateNewDocument() 一般來(lái)說(shuō)這個(gè)函數(shù)很少失敗。不過(guò)在調(diào)試時(shí)也不能掉以輕心。


    6GYC
    >'@  
    再看看CreateNewFrame()  里面有一個(gè)函數(shù)LoadFrame是造成這種建立新文檔失敗錯(cuò)誤的源泉所在。 
    只要它返回False就會(huì)彈出這樣的提示。 
    我們?cè)趤?lái)看看LoadFrame() 里面調(diào)用CFrameWnd::Create()來(lái)創(chuàng)建窗口,創(chuàng)建窗口失敗返回Fasle 
    這樣問(wèn)題就變的比較簡(jiǎn)單了。

    看看createcreateex函數(shù)的動(dòng)作就知道怎么回事了。 H-@


    [V:!R  
    ****************************************************************S_zS  
    1如果找不到菜單資源返回False 同時(shí)也彈出建立空文檔失敗” 
    HINSTANCE hInst = AfxFindResourceHandle(lpszMenuName
    RT_MENU); 
    if ((hMenu = ::LoadMenu(hInst
    lpszMenuName)) == NULL) 

     TRACE0("Warning: failed to load menu for CFrameWnd. Dq
    dtg
     
    "); 
     PostNcDestroy();            // perhaps delete the C++ object 
     return FALSE; 
    } v

     7* ­C
     
    2重載了PreCreateWindow而且返回False也會(huì)導(dǎo)致彈出建立空文檔失敗” 
    3OnCreate 里面返回-1 也會(huì)導(dǎo)致彈出建立空文檔失敗 
    ******************************************************************

    以上就是我分析的出現(xiàn)這樣建立空文檔失敗問(wèn)題的大致原因。也許還有其他的原因。我這里就不一一列舉了。

    posted on 2008-11-29 16:01 何克勤 閱讀(9122) 評(píng)論(0)  編輯  收藏 所屬分類: VC++/MFC

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成在人线av无码免费高潮喷水| 一区视频免费观看| 免费观看国产精品| 一级特黄录像免费播放肥| 亚洲蜜芽在线精品一区| 成人免费777777| 久久久久久av无码免费看大片| 91嫩草私人成人亚洲影院| 四虎在线视频免费观看| 中文字幕不卡免费高清视频| 亚洲伊人久久大香线蕉| AV在线播放日韩亚洲欧| 老司机在线免费视频| 一个人看的免费高清视频日本| 亚洲老熟女@TubeumTV| 波多野结衣视频在线免费观看| 四虎国产精品永久免费网址| WWW亚洲色大成网络.COM | 无码中文字幕av免费放| 四虎影视久久久免费观看| 亚洲中文字幕无码av在线| 久久亚洲国产精品成人AV秋霞| 一级特黄录像视频免费| 亚洲成电影在线观看青青| 亚洲午夜激情视频| 性做久久久久久免费观看| 在线观看肉片AV网站免费| 蜜臀亚洲AV无码精品国产午夜.| 亚洲精品国产成人专区| 亚洲AV中文无码乱人伦| 两个人的视频高清在线观看免费 | 国产成人免费在线| 精品无码一级毛片免费视频观看| 四虎必出精品亚洲高清| 亚洲视频一区在线| 亚洲AV无码一区二区乱子伦| 亚洲VA综合VA国产产VA中| 夜夜嘿视频免费看| 麻豆视频免费播放| 无码精品人妻一区二区三区免费看| 一级毛片免费播放男男|