模態MFC框架視窗
介紹 有時,它可能是有用的和文件/檢視結構,模態視窗工具欄/狀態列支援(即基本功能實現MFC框架視窗)。如何讓這些沒有實現所有這些功能在CDialog-derived類?這裡給出的CModalFrame實用程式類可以幫助您實現一個模態對話方塊的行為對任何CFrameWnd-derived視窗類的一個簡單的方法。 如果你要使用它,有一點時間,請新增一個評論這一頁的底部,告訴,您決定使用這段程式碼的上下文。我會很感興趣。 背景 一些基本的事實: 所有必需的功能已經實現CFrameWnd-derived類。 模態的基本支援訊息迴圈已經CWnd類中實現。 簡短描述:實現 該實用程式程式碼只使用CFrameWnd類介面和不做任何建議任何CFrameWnd-derived類的內部實現細節。 CModalFrame:建立內部CModalDialogLock類的一個例項,執行: 商店模態迴圈的背景下, 執行模態訊息迴圈, 支援多個模態執行框架。 CModalDialogLock子類建立的框架視窗提供: 更新命令幀的UI WM_KICKIDLE訊息, 退出模態WM_NCDESTROY訊息和訊息迴圈, 恢復標準模態視窗行為ncactivate訊息的資訊。 你不應該使用WS_CHILD視窗風格的框架。因為它的父視窗在模態迴圈是禁用的。所以孩子框架視窗也將被禁用(例如,MDI子幀)! 使用的程式碼 所需檔案: ModalFrame.h ModalFrame.cpp 用法:樣本隱藏,複製Code
void CMyView::OnRunModalFrame() { CCreateContext context; context.m_pNewViewClass = RUNTIME_CLASS(CMyOtherView); context.m_pCurrentDoc = GetDocument(); context.m_pNewDocTemplate = GetDocument()->GetTemplate(); context.m_pLastView = this; context.m_pCurrentFrame = GetParentFrame(); CRuntimeClass * pFrameClass = RUNTIME_CLASS(CMyModalFrame); if (!CModalFrame::Run(*pFrameClass, false, IDR_MYFRAMERESOURCE, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, this, &context)) { AfxMessageBox(AFX_IDP_COMMAND_FAILURE); } } // don't forget close modal frame like a modal dialog box! void CMyModalFrame::OnClose() { int nModalResult = -1; CModalFrame::End(this, nModalResult); }
看到演示專案程式碼的更多細節。 歷史 版本1.2 修復Bug。 更準確的處理一堆模態幀。 版本1.1 實現支援多種執行模式框架。 更準確的恢復活動視窗後的模態訊息迴圈。 版本1.0 最初的版本。 本文轉載於:http://www.diyabc.com/frontweb/news5438.html