posts - 27, comments - 14, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

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

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

 


    
if (!m_wndFileView.Create(strFileView, this, CRect(00200200), 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

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

2011-07-27 11:26 by free keylogger download
很好的机制,

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

2011-07-27 15:16 by 笨笨
神啊!能不能看看你的效果!

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

2011-07-27 15:17 by 笨笨
看不了效果!

我也试试!

急死我了!

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理