StdAfx.h
文件中加入下面一行:
#define _XTP_STATICLINK //此处为译者修改 using mfc in static link lib #include <XTToolkitPro.h> //在rc2文件中添加 #include "xttoolkitpro.rc"
// Attributes public: CXTPDockingPaneManager m_paneManager;
IDR_PANE_OPTIONS 61446 Options IDR_PANE_PROPERTIES 61447 Properties
// 只有在所有控制栏对象被创建和停靠以后,初始化停靠面板管理器并设置面板的初始值. m_paneManager.InstallDockingPanes(this); m_paneManager.SetTheme(xtpPaneThemeOffice); //CXTPDockingPane* pwndPane1 = m_paneManager.CreatePane( // IDR_PANE_OPTIONS, CRect(0, 0,200, 120), dockLeftOf); //CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane( // IDR_PANE_PROPERTIES, CRect(0, 0,200, 120), dockBottomOf, pwndPane1) // 创建停靠面板,注意dockLeftOf改为xtpPaneDockLeft xtpPaneDockBottom 译者修改 CXTPDockingPane* pwndPane1 = m_paneManager.CreatePane( IDR_PANE_OPTIONS, CRect(0, 0,200, 120), xtpPaneDockLeft); CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane( IDR_PANE_PROPERTIES, CRect(0, 0,200, 120), xtpPaneDockBottom, pwndPane1); return 0;
// Attributes public: CStatic m_wndOptions; CEdit m_wndProperties;
OnDockingPaneNotify
面板停靠通知消息句柄.
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() //}}AFX_MSG_MAP ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify) END_MESSAGE_MAP() //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG afx_msg LRESULT OnDockingPaneNotify(WPARAM wParam,LPARAM lParam); DECLARE_MESSAGE_MAP() LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam,LPARAM lParam) { //wParam消息 LPARAM 对象 if (wParam ==XTP_DPN_SHOWWINDOW) { CXTPDockingPane* pPane=(CXTPDockingPane*)lParam; if (!pPane->IsValid()) { switch(pPane->GetID()) { case IDR_PANE_PROPERTIES: { if (m_wndProperties.GetSafeHwnd()==0) { //子窗口,垂直滚动,多行编辑 m_wndProperties.Create(WS_CHILD| ES_AUTOVSCROLL|ES_MULTILINE, CRect(0,0,0,0),this,0); } pPane->Attach((&m_wndProperties)); break; } case IDR_PANE_OPTIONS: { if (m_wndOptions.GetSafeHwnd()==0) { m_wndOptions.Create(_T("\n\nOptions"), WS_CHILD|WS_CLIPCHILDREN| WS_CLIPSIBLINGS|SS_CENTER, CRect(0,0,0,0),this,0); } pPane->Attach(&m_wndOptions); break; } } } return TRUE; } return FALSE; }
给停靠面板选项页添加图像:
CMainFrame::OnCreate 中添加如下代码
int nIDIcons[] = {IDR_PANE_OPTIONS, IDR_PANE_PROPERTIES}; m_paneManager.SetIcons(IDB_BITMAP_ICONS, nIDIcons, _countof(nIDIcons), RGB(0, 255, 0)); return 0;
添加保存和装载状态句柄:
OnCreate
函数. 恢复先前停靠栏状态:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... // 加载先前停靠栏状态. CXTPDockingPaneLayout layoutNormal(&m_paneManager); if (layoutNormal.Load(_T("NormalLayout"))) { m_paneManager.SetLayout(&layoutNormal); } return 0; }
OnClose
消息句柄,调用基类前添加如下代码. 将保存最近停靠栏状态:
void CMainFrame::OnClose() { // TODO: Add your message handler code here and/or call default CXTPDockingPaneLayout layoutNormal(&m_paneManager); m_paneManager.GetLayout(&layoutNormal); layoutNormal.Save(_T("NormalLayout")); CMDIFrameWnd::OnClose(); }
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Chapter 4: Tutorials for Using Xtreme Toolkit Pro v13.2 |
Up | Previous | Next
|
StdAfx.h
file:
#include <XTToolkitPro.h> // Xtreme Toolkit Pro component library
// Attributes public: CXTPDockingPaneManager m_paneManager;
IDR_PANE_OPTIONS 61446 Options IDR_PANE_PROPERTIES 61447 Properties
// Initialize the docking pane manager and set the // initial them for the docking panes. Do this only after all // control bars objects have been created and docked. m_paneManager.InstallDockingPanes(this); m_paneManager.SetTheme(xtpPaneThemeOffice); // Create docking panes. CXTPDockingPane* pwndPane1 = m_paneManager.CreatePane( IDR_PANE_OPTIONS, CRect(0, 0,200, 120), dockLeftOf); CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane( IDR_PANE_PROPERTIES, CRect(0, 0,200, 120), dockBottomOf, pwndPane1)
// Attributes public: CStatic m_wndOptions; CEdit m_wndProperties;
OnDockingPaneNotify
handler.
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() //}}AFX_MSG_MAP ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify) END_MESSAGE_MAP() LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam, LPARAM lParam) { if (wParam == XTP_DPN_SHOWWINDOW) { CXTPDockingPane* pPane = (CXTPDockingPane*)lParam; if (!pPane->IsValid()) { switch (pPane->GetID()) { case IDR_PANE_PROPERTIES: { if (m_wndProperties.GetSafeHwnd() == 0) { m_wndProperties.Create(WS_CHILD| ES_AUTOVSCROLL|ES_MULTILINE, CRect(0, 0, 0, 0), this, 0); } pPane->Attach(&m_wndProperties); break; } case IDR_PANE_OPTIONS: { if (m_wndOptions.GetSafeHwnd() == 0) { m_wndOptions.Create(_T("\n\nOptions"), WS_CHILD|WS_CLIPCHILDREN| WS_CLIPSIBLINGS|SS_CENTER, CRect(0, 0, 0, 0), this, 0); } pPane->Attach(&m_wndOptions); break; } } } return TRUE; } return FALSE; }
CMainFrame::OnCreate
int nIDIcons[] = {IDR_PANE_OPTIONS, IDR_PANE_PROPERTIES}; m_paneManager.SetIcons(IDB_BITMAP_ICONS, nIDIcons, _countof(nIDIcons), RGB(0, 255, 0));
Add Save and Load State Handlers:
OnCreate
function forCMainFrame. This will restore the previous state of docking panes:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... // Load the previous state for docking panes. CXTPDockingPaneLayout layoutNormal(&m_paneManager); if (layoutNormal.Load(_T("NormalLayout"))) { m_paneManager.SetLayout(&layoutNormal); } return 0; }
OnClose
message handler to CMainFrame and the following before the call to the base class. This will save the current state of your docking pane:
void CMainFrame::OnClose() { // Save the current state for docking panes. CXTPDockingPaneLayout layoutNormal(&m_paneManager); m_paneManager.GetLayout(&layoutNormal); layoutNormal.Save(_T("NormalLayout")); CMDIFrameWnd::OnClose(); }