CPaneDialog的使用方法

27 篇文章 0 订阅

1. 在资源里添加dialog时,使用formview的dialog。
2. 给dialog添加类CParamsDlg,基类选CDialog,生成代码后,将代码中的CDialog改成CPanedialog

3. 创建CPaneDialog,其中m_wndFileView是一个CDockablePane子类的对象。

 


     if (!m_wndFileView.Create(strFileView,  this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI))
  {
  TRACE0("Failed to create File View window\n");
  return FALSE; // failed to create
 }


     if (!m_dlgParams.Create (_T("DialogBar"),  this, TRUE,
        MAKEINTRESOURCE (IDD_FORM_PARAMS), 
        WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI, 
        IDD_FORM_PARAMS))
     {
        TRACE0("Failed to create Dialog Bar\n");
        return FALSE;      // fail to create
    }


    m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
    m_dlgParams.EnableDocking(CBRS_ALIGN_ANY);
    DockPane(&m_wndFileView);
    
    m_dlgParams.DockToWindow (&m_wndFileView, CBRS_ALIGN_BOTTOM);

    
    
4. 在CParamsDlg中对控件添加响应事件,不能捕获到,初步想到的解决办法未,在CParamsDlg中添加一个通过控件id取得控件内容的函数,然后将窗体中的按钮响应事件,添加到mainframe中,这样由mainframe来捕获,在响应函数里调用CParamsDlg中的函数,来获得对应控件的值。
      最后,不知道,这种方法对不对,毕竟新出来的东西,资料基本没有,如果发现有更好的办法,请告诉我!!

Feedback

# re: vc++2008 feature package中CPaneDialog的使用方法  回复  更多评论   

2010-06-29 16:47 by  zgysx
改写CMainFrame的OnCmdMsg虚函数
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: 在此添加专用代码和/或调用基类
if(m_dlgParams.OnCmdMsg( nID, nCode, pExtra, pHandlerInfo ) )
return TRUE;

return CMDIFrameWndEx::OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
}

# re: vc++2008 feature package中CPaneDialog的使用方法  回复  更多评论   

2010-06-29 16:49 by  zgysx
改写CMainFrame的OnCmdMsg虚函数就可以解决CParamsDlg中不能捕获到控件消息的问题
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: 在此添加专用代码和/或调用基类
if(m_dlgParams.OnCmdMsg( nID, nCode, pExtra, pHandlerInfo ) )
return TRUE;

return CMDIFrameWndEx::OnCmdMsg( nID, nCode, pExtra, pHandlerInfo );
}

# re: vc++2008 feature package中CPaneDialog的使用方法  回复  更多评论   

2010-09-06 13:49 by  asd
OnCmdMsg这个东东很有启发!

可以控制ms按照CMainFrame-->CChildFrame-->CMyView的方向传递msg。

对于CPaneDialog的消息传递,可以重写CChildFrame的OnCmdMsg,是的msg能够路由到视图,这个时候的工具栏按钮等控件的msg就可以路由到视图进行处理了。

# re: vc++2008 feature package中CPaneDialog的使用方法  回复  更多评论   

2010-11-07 00:12 by  fool
最后,不知道,这种方法对不对,毕竟新出来的东西,资料基本没有,如果发现有更好的办法,请告诉我!! 


我有个很简单的方法,你肯定感兴趣: 
void CMyDlg::OnShowWindow(BOOL bShow, UINT nStatus) 

CDialogEx::OnShowWindow(bShow, nStatus); 

// TODO: 在此处添加消息处理程序代码 
this->BringWindowToTop(); 


就是响应WM_SHOWWINDOW 
而后把窗口提到最前面 

# re: vc++2008 feature package中CPaneDialog的使用方法  回复  更多评论   

2010-11-07 00:36 by  fool
sorry!我的情形同你的也许不一样! 
上面的方法也许成功,也许失败! 
我的代码情况:(你可以参考下) 
CDockablePane内含一个CMFCTabCtrl,CMFCTabCtrl含有个Dialog项, 

起初我和你一样,点击Dialog中的按钮,没有任何反应,于是跟踪消息路由,发现压根没有调用! 

试验了N种方法(属性页,FormView都试验过) 
找到了2个方法: 
1.就是上面(此时Dialog的parent window可以是framewnd) 
2.将Dialog的parent window设置为CMFCTabCtrl对象(要是开始就如此设置,也许就不会发生这些问题,实在是coding失误) 

也许两个方法还是帮助不了你!! 
最后enjoy coding
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值