BCGControlBar使用心得--如何捕获Workspace bar类上的树控件的消息
2009-02-12 23:27
369 查看
我想在MainFrame中捕获Workspace
bar类上的树控件的通知消息 TVN_SELCHANGED,但是奇怪的是不能工作,而在非BCG的工程中确实可以的。
代码如下:
在BCG的网站上我看到了一个解决方法,就是你从CTreeCtrl 继承一个你自己的Tree Control类,在新类中处理消息。
我不想这样实现。于是我去查找问题的根源,我发现BCG的CBCGTabWnd类截获了OnNotify消息,导致mainframe捕获不到。
解决方法如下:
1、从CBCGTabWnd 继承一个自己的类。
2、在类中实现OnNotify虚函数。
3、在CWorkspaceBar类的OnCreate方法中确定你把CBCGTabWnd类改成你自己的类。
4、在CWorkspaceBar类中,实现你想捕获的通知消息。
bar类上的树控件的通知消息 TVN_SELCHANGED,但是奇怪的是不能工作,而在非BCG的工程中确实可以的。
代码如下:
********************************************************************** // WorkspaceBar.cpp : implementation of the CWorkspaceBar class // BEGIN_MESSAGE_MAP(CWorkspaceBar, CBCGSizingControlBar) //{{AFX_MSG_MAP(CWorkspaceBar) ON_WM_CREATE() ON_WM_SIZE() ON_NOTIFY(TVN_SELCHANGED, 1, OnSelectTree) //}}AFX_MSG_MAP END_MESSAGE_MAP() int CWorkspaceBar::OnCreate(LPCREATESTRUCT lpCreateStruct) { .... // Create tabs window: if (!m_wndTabs.Create (CBCGTabWnd::STYLE_3D, rectDummy, this, 1)) { TRACE0("Failed to create workspace tab window "); return -1; // fail to create } m_wndTabs.SetImageList (IDB_WORKSPACE, 16, RGB (255, 0, 255)); // Create tree windows. // TODO: create your own tab windows here: const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS; if (!m_wndTree1.Create (dwViewStyle, rectDummy, &m_wndTabs, 2) || !m_wndTree2.Create (dwViewStyle, rectDummy, &m_wndTabs, 3)) { TRACE0("Failed to create workspace view "); return -1; // fail to create } ... } void CWorkspaceBar::OnSelectTree(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; *pResult = 0; } ********************************************************************** // WorkspaceBar.h : interface of the CWorkspaceBar class // // Generated message map functions protected: //{{AFX_MSG(CWorkspaceBar) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnSelectTree(NMHDR* pNMHDR, LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
在BCG的网站上我看到了一个解决方法,就是你从CTreeCtrl 继承一个你自己的Tree Control类,在新类中处理消息。
我不想这样实现。于是我去查找问题的根源,我发现BCG的CBCGTabWnd类截获了OnNotify消息,导致mainframe捕获不到。
解决方法如下:
1、从CBCGTabWnd 继承一个自己的类。
2、在类中实现OnNotify虚函数。
BOOL CMyTabCtrl::OnNotify (WPARAM wParam, LPARAM lParam, LRESULT* pResult){ ASSERT_VALID (this); BOOL bRes = CBCGTabWnd::OnNotify (wParam, lParam, pResult); NMHDR* pNMHDR = (NMHDR*)lParam; ASSERT (pNMHDR != NULL); if (pNMHDR->code == TTN_SHOW && !m_bFlat) { m_ToolTip.SetWindowPos (&wndTop, -1, -1, -1, -1, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOSIZE); } if (pNMHDR->code == HDN_ITEMCHANGED) { SynchronizeScrollBar (); } if (wParam > 0) { CWnd* pChild = GetDlgItem(wParam); if (pChild) { if (IsChild(pChild)) { GetOwner()->SendMessage(WM_NOTIFY,wParam,lParam); } } } return bRes; }
3、在CWorkspaceBar类的OnCreate方法中确定你把CBCGTabWnd类改成你自己的类。
4、在CWorkspaceBar类中,实现你想捕获的通知消息。
ON_NOTIFY(NM_DBLCLK,ID_LIST,OnListDblClk)...void CWorkspaceBar::OnListDblClk(NMHDR* pNMHDR, LRESULT* pResult) { ... *pResult = 0;}
相关文章推荐
- 【转帖】BCGControlBar使用心得--如何捕获Workspace bar类上的树控件的消息
- 【转帖】BCGControlBar使用心得--如何捕获Workspace bar类上的树控件的消息
- 如何在BCGControlBar工程的工具栏里面新增下拉列表控件
- BCGControlBar控件使用方法(附加视频下载地址)
- BCGControlBar Grid网格控件如何绑定到数据源(附Demo下载)
- BCGControlBar如何整合计划控件到SDI应用程序中
- BCGControlBar使用入门指南
- BCGControlBar 的使用方法
- BCGControlBar使用
- progressBarControl控件(Devexpress)使用
- 关于BCGControlbar16.1版本的安装与使用
- MFC BCGControlBar 库 使用方法
- OCX控件中界面如何捕获键盘消息
- BCGControlBar使用(一)
- BCGControlBar 的使用方法 (转载)
- BCGControlBar使用工具教程
- bcgcontrolbar使用
- BCGControlBar入门使用手册
- BCGControlBar 的使用方法(转)
- BCGControlBar Pro MFC用户界面控件常见问题大全