Codejock: 如何添加一个docking pane到你的应用程序中
来源:互联网 发布:java filereader类 编辑:程序博客网 时间:2024/06/15 18:32
原文地址:http://purpletulipdyc.blog.sohu.com/110458716.html
The following is a tutorial on how to create an MDI application with Docking Pane using the Visual Studio 6.0 Application Wizard. The same technique can be used for later versions of Visual Studio . NET as well.
Create a simple MDI application using the MFC AppWizard:
- From Visual Studio select ‘File’ then ‘New’ and select the ‘Projects’ tab.
- Choose MFC Appwizard(exe) as your project type and enter ‘MDISample’ as the project name.
Add Empty Docking Pane
- Add the following line to your StdAfx.h file:
Xtreme Toolkit Pro users:
#include // Xtreme Toolkit Pro components
Xtreme DockingPane users:
#include // Xtreme DockingPane components
- Add CXTPDockingPaneManager member to CMainFrame class.
// Attributes
public:
CXTPDockingPaneManager m_paneManager;
- Add string resources for the titles of the future panes IDR_PANE_OPTIONS61446OptionsPROPERTIES61447Properties
在ResourseView中添加一个Dialog类。去掉边框等属性。命名为IDD_DIALOG_RESOURCE - Add following to CMainFrame::OnCreate.
// 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);改为 IDD_DIALOG_RESOURCE int nIDIcons[] = {IDD_DIALOG_RESOURCE, IDR_PANE_PROPERTIES};//同样的修改
CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane(
IDR_PANE_PROPERTIES, CRect(0, 0,200, 120),
dockBottomOf, pwndPane1);
Attach CWnd derived class to the panes:
- Add Cwnd derived class as member of CMainFrame.
// Attributes
public: CStatic m_wndOptions;
CEdit m_wndProperties;
//添加以下的成员变量
CXTPOfficeBorder<CStatic> m_wndOptions;
CXTPOfficeBorder<CEdit> m_wndProperties;
CXTPOfficeBorder<CEdit> m_wndTools;
CXTPOfficeBorder<CDialog> m_wndDialog; - Add OnDockingPaneNotify handler.
class="code">
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 IDD_DIALOG_RESOURCE:
{
if(m_wndDialog.GetSafeHwnd()==0)
{
m_wndDialog.Create(IDD_DIALOG_RESOURCE,this);//这一句话尤其重要
}
pPane->Attach(&m_wndDialog);
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;
}
Add image to pane.
- Create Bitmap with icons for created panes
- Add to CMainFrame::OnCreate.
nt nIDIcons[] = {IDR_PANE_OPTIONS, IDR_PANE_PROPERTIES};
m_paneManager.SetIcons(IDB_BITMAP_ICONS, nIDIcons,
_countof(nIDIcons), RGB(0, 255, 0));
Add Save/Load State
- Add following to the OnCreate function for CMainFrame. 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;
}
- Add the 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();
}
- Codejock: 如何添加一个docking pane到你的应用程序中
- 解决Codejock Xtreme Toolkit Pro MFC Static linked配置时拉动Docking Pane无鼠标的问题
- 如何添加自定义属性到你的view中
- codejock中托盘的实现
- 在Ubuntu的系统中如何将应用程序添加到开始菜单中
- 在Ubuntu的系统中如何将应用程序添加到开始菜单中
- 如何在Web应用程序中添加一个条形码图像?
- 添加源代码到你的sdk中
- fedora 17 如何把应用程序的图标添加到桌面上
- 如何便捷地将3D内容添加到你的Flash游戏中
- Android中为你的应用程序添加桌面快捷方式
- Android中为你的应用程序添加桌面快捷方式
- Android中为你的应用程序添加桌面快捷方式
- 如何在一个应用程序中打开其他的应用程序
- 如何在一个应用程序中打开其他的应用程序
- 如何把一个窗体添加到容器控件中
- 如何添加一个jni库模块到整理编译中?
- Android:如何把一个应用添加到Settings列表中...
- ubuntu下配置安装PYQT4
- Struct和Class的区别
- linux ps 命令参数详解
- 推荐一款数据修复软件 - Roadkil's Unstoppable Copier
- pyqt4信号与槽之间参数传递
- Codejock: 如何添加一个docking pane到你的应用程序中
- 关于WII光枪定位的设计
- Android Contacts(一)—— 读取联系人
- grep参数
- PeopleSoft 学习笔记 全球薪资 第 06 章 变量元素
- PyQt4 QLineEdit 使用方法
- ASP.Net缓存总结
- Server at localhost was unable to start within 45 seconds
- PyQt4学习资料