码迷,mamicode.com
首页 > 其他好文 > 详细

在CDockablePane中嵌入对话框

时间:2014-12-11 00:00:49      阅读:2224      评论:0      收藏:0      [点我收藏+]

标签:des   style   ar   sp   on   log   bs   代码   ef   

CDockablePane类可以用来创建停靠栏。可以将其他控件集成到CDockablePane的派生类中。下文描述如何将对话框集成到CDockablePane中。

a)      创建单文档应用程序;

b)     加入对话框资源,注意,对话框必须有Child属性,Border设置为None

c)      为对话框创建类CDialogEmbeded,基类为CDialogEx

d)     创建派生自CDockablePane的类CDockableDlg

e)     为CDockableDlg添加CDialogEmbeded类型的成员变量m_dlgEmbeded;

f)      重载CDockableDlg的OnCreate函数

   int CDockableDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)

   {

      if (CDockablePane::OnCreate(lpCreateStruct) == -1)

           return -1;

      // TODO:  在此添加您专用的创建代码

m_dlgEmbeded.Create(CDialogEmbeded::IDD,this);

m_dlgEmbeded.ShowWindow(SW_SHOW);

return 0;

  }

g)     重载CDockableDlg的OnSize函数

void CDockableDlg::OnSize(UINT nType, int cx, int cy)

{

CDockablePane::OnSize(nType, cx, cy);

// TODO:  在此添加您专用的创建代码

if(m_dlgEmbeded.GetSafeHwnd())

{

     CRect rect;

     GetClientRect(&rect);

     m_dlgEmbeded.MoveWindow(rect);

    }

  }

h)     重载CDockableDlg的OnDestory函数

void CDockableDlg::OnDestroy()

{

   CDockablePane::OnDestroy();

   // TODO: 在此处添加消息处理程序代码

   m_dlgEmbeded.DestroyWindow();

}

i)       在框架类中添加CDockableDlg对象m_dockDlg

j)       在CMainFrame类的OnCreate函数中添加以下代码,Create函数里面的1001是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

   …

   EnableDocking(CBRS_ALIGN_ANY);

   m_dockDlg.Create("Dock Dlg",this,CRect(0,0,200,200),TRUE,1001,

   WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI);

   m_dockDlg.EnableDocking(CBRS_ALIGN_ANY);

   DockPane(&m_dockDlg);

   return 0;

}

k)      疑问:m_dockDlg什么时候销毁?

在CDockablePane中嵌入对话框

标签:des   style   ar   sp   on   log   bs   代码   ef   

原文地址:http://www.cnblogs.com/canger/p/4156535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!