// [!output INPLACE_FRAME_IMPL] : [!output INPLACE_FRAME_CLASS] 類別的實作 // #include "stdafx.h" #include "[!output APP_HEADER]" #include "[!output INPLACE_FRAME_HEADER]" #ifdef _DEBUG #define new DEBUG_NEW #endif // [!output INPLACE_FRAME_CLASS] IMPLEMENT_DYNCREATE([!output INPLACE_FRAME_CLASS], [!output INPLACE_FRAME_BASE_CLASS]) BEGIN_MESSAGE_MAP([!output INPLACE_FRAME_CLASS], [!output INPLACE_FRAME_BASE_CLASS]) ON_WM_CREATE() [!if CONTEXT_HELP && HELPSTYLE_WINHELP] // 全域說明命令 ON_COMMAND(ID_HELP_FINDER, &[!output INPLACE_FRAME_BASE_CLASS]::OnHelpFinder) ON_COMMAND(ID_HELP, &[!output INPLACE_FRAME_BASE_CLASS]::OnHelp) ON_COMMAND(ID_DEFAULT_HELP, &[!output INPLACE_FRAME_BASE_CLASS]::OnHelpFinder) ON_COMMAND(ID_CONTEXT_HELP, &[!output INPLACE_FRAME_BASE_CLASS]::OnContextHelp) [!endif] END_MESSAGE_MAP() // [!output INPLACE_FRAME_CLASS] 建構/解構 [!output INPLACE_FRAME_CLASS]::[!output INPLACE_FRAME_CLASS]() { [!if ACCESSIBILITY] EnableActiveAccessibility(); [!endif] } [!output INPLACE_FRAME_CLASS]::~[!output INPLACE_FRAME_CLASS]() { } int [!output INPLACE_FRAME_CLASS]::OnCreate(LPCREATESTRUCT lpCreateStruct) { if ([!output INPLACE_FRAME_BASE_CLASS]::OnCreate(lpCreateStruct) == -1) return -1; // CResizeBar 實作現用調整大小。 if (!m_wndResizeBar.Create(this)) { TRACE0("建立調整大小列失敗\n"); return -1; // 無法建立 } // 依照預設,登錄與框架視窗無關的 // 置放目標是很好的作法。它可防止將 // "falling through" 置放於支援拖放的容器。 m_dropTarget.Register(this); return 0; } [!if DOCKING_TOOLBAR] // 架構所呼叫的 OnCreateControlBars 會在容器應用程式的 // 視窗建立控制項列。pWndFrame 是容器的上層框架視窗, // 且永遠是非 NULL。pWndDoc 是 doc 階層框架視窗, // 且當容器是 SDI 應用程式時是 NULL。伺服器應用程式 // 可以在其中一個視窗放置 MFC 控制列。 BOOL [!output INPLACE_FRAME_CLASS]::OnCreateControlBars(CFrameWnd* pWndFrame, CFrameWnd* pWndDoc) { // 如果您使用 pWndDoc,請移除 UNREFERENCED_PARAMETER(pWndDoc); // 設定擁有人至此視窗,所以會將訊息傳遞到正確的應用程式 m_wndToolBar.SetOwner(this); // 在用戶端的框架視窗上建立工具列 [!if CMD_BAR_BROWSERSTYLE] if (!m_wndToolBar.CreateEx(pWndFrame) || [!else] if (!m_wndToolBar.CreateEx(pWndFrame, TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || [!endif] [!if APP_TYPE_MDI] !m_wndToolBar.LoadToolBar(IDR_[!output SAFE_DOC_TYPE_NAME]TYPE_SRVR_IP)) [!else] !m_wndToolBar.LoadToolBar(IDR_SRVR_INPLACE)) [!endif] { TRACE0("無法建立工具列\n"); return FALSE; } [!if CMD_BAR_BROWSERSTYLE] // 設定擁有人至此視窗,所以會將訊息傳遞到正確的應用程式 m_wndDlgBar.SetOwner(this); // 在用戶端框架視窗上建立對話方塊列 [!if APP_TYPE_MDI] if (!m_wndDlgBar.Create(pWndFrame, IDR_[!output SAFE_DOC_TYPE_NAME]TYPE_SRVR_IP, [!else] if (!m_wndDlgBar.Create(pWndFrame, IDR_SRVR_INPLACE, [!endif] CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR)) { TRACE0("無法建立對話方塊列\n"); return FALSE; } // 設定此視窗的擁有人,所以會將訊息傳遞到正確的應用程式 m_wndReBar.SetOwner(this); // 在用戶端框架視窗上建立 Rebar if (!m_wndReBar.Create(pWndFrame) || !m_wndReBar.AddBar(&m_wndToolBar) || !m_wndReBar.AddBar(&m_wndDlgBar)) { TRACE0("無法建立 Rebar\n"); return FALSE; } // TODO: 如果您不需要工具提示,請移除此項目 m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); m_wndDlgBar.SetBarStyle(m_wndDlgBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); [!else] // TODO: 如果您不要可以固定工具列,請刪除這三行 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); pWndFrame->EnableDocking(CBRS_ALIGN_ANY); pWndFrame->DockControlBar(&m_wndToolBar); [!endif] return TRUE; } [!endif] BOOL [!output INPLACE_FRAME_CLASS]::PreCreateWindow(CREATESTRUCT& cs) { // TODO: 在此經由修改 CREATESTRUCT cs 達到修改視窗類別或樣式的目的 return [!output INPLACE_FRAME_BASE_CLASS]::PreCreateWindow(cs); } // [!output INPLACE_FRAME_CLASS] 診斷 #ifdef _DEBUG void [!output INPLACE_FRAME_CLASS]::AssertValid() const { [!output INPLACE_FRAME_BASE_CLASS]::AssertValid(); } #endif //_DEBUG // [!output INPLACE_FRAME_CLASS] 命令