<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 何克勤 閱讀(9119) 評(píng)論(0)  編輯  收藏 所屬分類: VC++/MFC

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 在线观看永久免费| 国产精品久久久久影院免费| 羞羞的视频在线免费观看| 亚洲精品无码av人在线观看 | 精品久久久久成人码免费动漫| 免费很黄无遮挡的视频毛片| 亚洲日本VA中文字幕久久道具| 亚洲另类激情综合偷自拍| 亚洲日韩在线观看| 亚洲国产亚洲片在线观看播放| 超清首页国产亚洲丝袜| 久久激情亚洲精品无码?V| 成人免费视频观看无遮挡| 中国性猛交xxxxx免费看| 色婷婷亚洲一区二区三区| 亚洲美女aⅴ久久久91| 国产AV无码专区亚洲AV男同| 亚洲综合另类小说色区色噜噜| 国产又粗又猛又爽又黄的免费视频| 国产精品成人免费视频网站京东 | 亚洲成av人片在线观看无码不卡| 亚洲成av人片一区二区三区| 国产片免费在线观看| 在线jyzzjyzz免费视频| 成人看的午夜免费毛片| 一个人在线观看视频免费| 美女18一级毛片免费看| 中文有码亚洲制服av片| 久久精品国产亚洲一区二区三区| 国产不卡免费视频| 久久99精品免费视频| 91国内免费在线视频| 久青草视频在线观看免费| 国产黄色免费观看| 男女一边摸一边做爽的免费视频| www.xxxx.com日本免费| 中文毛片无遮挡高清免费| 中文精品人人永久免费| 国产精品免费福利久久| 99ee6热久久免费精品6| 国产成人精品免费视频大|