看板 C_and_CPP 關於我們 聯絡資訊
各位板友大家好,小弟是MFC新手, 目前想做一個MFC dll的SDI子視窗, 父視窗也是SDI視窗,由父視窗AP呼叫此dll。 父視窗及子視窗都是用一般的做法如下.. -- CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CLogAccessDoc), RUNTIME_CLASS(CMainFrm), // main SDI frame window RUNTIME_CLASS(CLogAccessView)); AddDocTemplate(pDocTemplate); // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); //// Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) ::AfxMessageBox(_T("ProcessShellCommand Error")); return FALSE; -- 不過在調用過程發現dll的程式碼在「ParseCommandLine(cmdInfo);」會產生錯誤, 追蹤程式碼發現是斷在wincore.cpp的655行ASSERT(pWnd->m_hWnd == NULL); // only do once 也因為這樣,導致衍生自CView類別的自定類別的函式OnCreate無法進入,也就無法顯示 我希望出現的那些TabCtrl..等控制項。 若是將「CCommandLineInfo cmdInfo;」(含)以下的代碼註解,父子視窗是可順利開啟, 但是因此就不會跑衍生自CView類別的自定類別函式OnCreate了.. 查了兩本書發現SDI的用法皆是如此,不需要去new新的Doc或是View, 由CSingleDocTemplate類別去處理後續的訊息, 想請教板上神人是否我的用法有誤呢? 或是有其他方式能解決此問題呢? 謝謝大家。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.138.212 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1445266029.A.552.html ※ 編輯: BIAO (61.230.138.212), 10/19/2015 22:54:47
BIAO: 目前找到原因是m_hWnd有數值,AP有先調用過OnCreate, 10/20 03:40
BIAO: 後來dll內又有再調一次其自身框架的OnCreate 10/20 03:42