在多文档中实现CTreeCtrl
来源:互联网 发布:java volatile 作用 编辑:程序博客网 时间:2024/06/05 14:33
从CTreeCtrl 派生一个类出来
主要用于树状控件的实现
响应控件的消息OnNotify
什么都不做,但实验结果Item还是收缩自如,这样可以确认想通过给父窗口的通知消息来控制
“展开/合拢”是不行的,控件自己在发生Notify之前就已经把自己的事情做完了,
现在的问题是修改CTreeCtrl的代码还是自定义一个继承自CTreeCtrl的Tree类,
重写某些处理函数达到期望目的。
主要用于树状控件的实现
响应控件的消息OnNotify
什么都不做,但实验结果Item还是收缩自如,这样可以确认想通过给父窗口的通知消息来控制
“展开/合拢”是不行的,控件自己在发生Notify之前就已经把自己的事情做完了,
现在的问题是修改CTreeCtrl的代码还是自定义一个继承自CTreeCtrl的Tree类,
重写某些处理函数达到期望目的。
#pragma once// CViewTreeclass CViewTree : public CTreeCtrl{DECLARE_DYNAMIC(CViewTree)public:CViewTree();virtual ~CViewTree();virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);protected:DECLARE_MESSAGE_MAP()};
#include "stdafx.h"#include "paint2.0.h"#include "ViewTree.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif// CViewTreeIMPLEMENT_DYNAMIC(CViewTree, CTreeCtrl)CViewTree::CViewTree(){}CViewTree::~CViewTree(){}BEGIN_MESSAGE_MAP(CViewTree, CTreeCtrl)END_MESSAGE_MAP()// CViewTree 消息处理程序BOOL CViewTree::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult){BOOL bRes = CTreeCtrl::OnNotify(wParam, lParam, pResult);NMHDR* pNMHDR = (NMHDR*)lParam;ASSERT(pNMHDR != NULL);if (pNMHDR && pNMHDR->code == TTN_SHOW && GetToolTips() != NULL){GetToolTips()->SetWindowPos(&wndTop, -1, -1, -1, -1, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOSIZE);}return bRes;}
#pragma once#include "ViewTree.h"class CDrawToolBar:public CMFCToolBar{public: virtual void OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL bDisableIfNoHndler) { CMFCToolBar::OnUpdateCmdUI((CFrameWnd*)GetOwner(), bDisableIfNoHndler); } virtual BOOL AllowShowOnList() const { return FALSE; } //定位工具栏是否在工具栏列表显示在 自定义 对话框的 工具栏 窗格中。private:};class CDrawView :public CDockablePane{public:CDrawView();virtual ~CDrawView();public:CViewTree m_wndDrawView;CImageList m_DrawViewImage;CDrawToolBar m_wndToolBar;public:void AdjustLayout(); // Call this method when the toolbar has been created to recalculate its size and position.DECLARE_MESSAGE_MAP()afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); // 创建时调用afx_msg void OnSize(UINT nType, int cx, int cy);// 和AdjustLayout() 共同的响应};
#include "stdafx.h"#include "DrawView.h"#include "Resource.h"CDrawView::CDrawView(){}CDrawView::~CDrawView(){}BEGIN_MESSAGE_MAP(CDrawView, CDockablePane)ON_WM_CREATE()ON_WM_SIZE()END_MESSAGE_MAP()void CDrawView::AdjustLayout(){if (GetSafeHwnd()==NULL) // 安全的获得 窗口句柄的指针{return;}CRect rectClient;GetClientRect(rectClient); // 获取view视图int cyTlb = m_wndToolBar.CalcFixedLayout(FALSE, TRUE).cy; //工具条的竖直高度m_wndToolBar.SetWindowPos(NULL, rectClient.left , rectClient.top,rectClient.Width(), cyTlb, SWP_NOACTIVATE | SWP_NOZORDER);//调整工具栏的高度m_wndDrawView.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + cyTlb + 1,rectClient.Width() - 2,rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER);//绘图的大小设置}int CDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CDockablePane::OnCreate(lpCreateStruct) == -1)return -1;// TODO: 在此添加您专用的创建代码CRect rectDummy;rectDummy.SetRectEmpty(); //const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;m_wndToolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_EXPLORER);m_wndToolBar.LoadToolBar(IDR_EXPLORER, 0, 0, TRUE /* 已锁定*/);if (!m_wndDrawView.Create(dwViewStyle, rectDummy, this, 4)){TRACE0("未能创建文件视图\n");return -1; // 未能创建}// 加载视图图像m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));//SetOwner Identifies the new owner of the window object. If this parameter is NULL, the window object has no owner.m_wndToolBar.SetOwner(this);// 所有命令将通过此控件路由,而不是通过主框架路由: //如果此参数是 TRUE,父框架将命令发送到工具栏。 否则,所有者将命令发送到工具栏。/*CMFCToolBar::SetRouteCommandsViaFrame指定父框架或所有者是否将命令发送到工具栏。void SetRouteCommandsViaFrame(BOOL bValue);*/m_wndToolBar.SetRouteCommandsViaFrame(FALSE);AdjustLayout();return 0;}void CDrawView::OnSize(UINT nType, int cx, int cy)//尺寸改变了响应{CDockablePane::OnSize(nType, cx, cy);// TODO: 在此处添加消息处理程序代码AdjustLayout();}
在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)加入// 创建停靠窗口if (!CreateDockingWindows()){TRACE0("未能创建停靠窗口\n");return -1;}m_wndDrawView.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndDrawView);添加基本的消息响应大概的框架就做出来了BOOL CMainFrame::CreateDockingWindows(){BOOL bNameValid;// 创建画图的视图CString strDrawName;bNameValid = strDrawName.LoadStringW(IDS_DRAW_VIEW);ASSERT(bNameValid);if (!m_wndDrawView.Create(strDrawName, this, CRect(0, 0, 200, 200), TRUE, ID_DRAW_DRAWVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){TRACE0("未能创建“文件视图”窗口\n");return FALSE; // 未能创建}SetDockingWindowIcons(theApp.m_bHiColorIcons);return TRUE;}void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons){HICON hFileViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_FILE_VIEW_HC : IDI_FILE_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);m_wndDrawView.SetIcon(hFileViewIcon, FALSE);UpdateMDITabbedBarsIcons();//Sets the icon for each MDI tabbed pane.}
0 0
- 在多文档中实现CTreeCtrl
- 在MFC中应用CTreeCtrl控件
- 【文档】 CTreeCtrl / CTreeView
- 对话框工程CTreeCtrl(checkbox风格)在OnInitDialog中调用CTreeCtrl::SetCheck()无效的问题
- 对话框工程CTreeCtrl(checkbox风格)在OnInitDialog中调用CTreeCtrl::SetCheck()无效的问题
- 在IOS中实现导入&导出文档
- 在IOS中实现导入&导出文档
- 在IOS中实现导入&导出文档
- 在 CTreeCtrl 中枚举系统中的所有窗口!(I)
- 在 CTreeCtrl 中枚举系统中的所有窗口!(II)
- 在MFC中应用CTreeCtrl控件的技巧
- 在 CTreeCtrl 中枚举系统中的所有窗口!(I)
- 在 CTreeCtrl 中枚举系统中的所有窗口!(II)
- 在MFC中应用CTreeCtrl控件的技巧
- 在MFC中应用CTreeCtrl控件的技巧(对话框重叠)
- 在CTreeView中给CtreeCtrl增加提示(tip)的功能
- 在MFC中应用CTreeCtrl控件的技巧
- 在MFC中应用CTreeCtrl控件的技巧
- sql语法:inner join on, left join on, right join on详细使用方法
- C++ 中常量字符串与字符数组
- hdoj problem 1203 I NEED A OFFER!(动态规划&&背包问题(01背包问题))
- Java IO/Netty/Linux/Socket/协程/Java Charset
- MVC 更新部分字段 (数据库先行)
- 在多文档中实现CTreeCtrl
- java中CyclicBarrier简单入门使用
- Proxy(代理对象)
- object-c set方法的内存管理
- Java连接MYSQL
- 仿制UISegmentedControl控件
- 几种比较和谐的文字背景颜色搭配
- HDOJ 题目2141 Can you find it?(二分搜索)
- WPF - 使用XML作为datagrid数据源进行binding