DWORD dwViewStyle = WS_CHILD|WS_VISIBLE|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT|TVS_EDITLABELS;
CRect rectDummy ;
GetClientRect(rectDummy);
if(!m_DeviceTree.Create(dwViewStyle,rectDummy,this,TreeID))
{
TRACE0("未能创建类视图\n");
return ; // 未能创建
}
解决方案 »
- 高分求助:存储一个较复杂的结构的问题,甚急,如好,愿将可用分倾囊相赠!!!
- 我想在2005下修改默认的工程路径宏,请问如何做?
- 如何获取子窗口句柄?
- 组合框控件Combo Box在初始化后当单击右侧的箭头时将弹出列表框,可实际操作后未出现列表?
- 又有问题请假大家啦 :) 感激不尽
- 为什么vc++不能编译应用程序
- 如何使获得焦点(focus)的button变得更明显?
- MDI获取View指针问题?????
- 自己写的类,在ClassWizard里找不到。要怎么样才能添加消息映射呢?
- 不管“大虾”,“小虾”,“菜鸟”,“老鸟”如有知道,请赐教!
- 一个关于CTabCtrl的问题
- TRACKMOUSEEVENT //的使用是当鼠标离开时;不启用跟踪光标呀???
http://download.csdn.net/detail/schlafenhamster/2960001
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code)
{
case TVN_BEGINDRAG:// The user wants to drag an item. Call the drag handler.
我在对话框拖拽一个树控件;可以响应此消息
我树视图里添加 原本是在树控件里这个消息ON_NOTIFY_REFLECT(TVN_BEGINDRAG, &CTreeCtrlEx::OnTvnBegindrag)
改成ON_NOTIFY(TVN_BEGINDRAG,treeID,&CTreeview::OnTvnBegindrag);换成你的创建属性也无法响应呀
SDK 中 树视图就 是 树控件
不用再创建
MFC 中 树视图包含 树控件
不用再创建“晕 我是自绘的呀”
把你的类 传上来,都被你 搞 “晕”了
给你说 CTreeView 有一个 CTreeCtrl ,不听 非要 创建一个:我改了:// CDevTree 消息处理程序
int sign = 0;
void CDevTree::OnInitialUpdate()
{ CTreeView::OnInitialUpdate();
// const DWORD dwViewStyle = WS_VISIBLE | WS_CHILD | WS_DLGFRAME | TVS_HASLINES |
// TVS_HASBUTTONS | TVS_LINESATROOT;
// tree.ModifyStyle(0,dwViewStyle);
CRect rectDummy ;
GetClientRect(rectDummy);
// if(!Obj.Create(dwViewStyle,rectDummy,this,TreeID))
// {
// TRACE0("未能创建类视图\n");
// return ; // 未能创建
// }
m_pImageList.Create(16,16,ILC_COLOR24|ILC_MASK,0,1);
m_pImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_pImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_pImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
//
CTreeCtrl &tree=GetTreeCtrl();
tree.SetImageList(&m_pImageList,TVSIL_NORMAL);
TVINSERTSTRUCT tv;
TVITEMEX tvMex;
tvMex.mask=TVIF_DI_SETITEM|TVIF_HANDLE|TVIF_IMAGE|TVIF_TEXT|TVIF_SELECTEDIMAGE;
tvMex.pszText="****县";
tvMex.iImage=0;
tvMex.iSelectedImage=1;
tvMex.cChildren=1;
tvMex.lParam=NULL;
tvMex.iIntegral=1;
tv.hInsertAfter=TVI_ROOT;
tv.hParent=NULL;
tv.itemex=tvMex;
HTREEITEM hRoot=tree.InsertItem(&tv);
int nItemCount=3;
for (int i=0; i<3; i++)
{
tv.hParent=hRoot;
tv.hInsertAfter=TVI_LAST;
tvMex.pszText="控制台";
tvMex.iImage= 1;
tvMex.iSelectedImage=1;
tv.itemex=tvMex;
HTREEITEM hItem=tree.InsertItem(&tv);
tv.hParent=hItem; //改变父节点
tvMex.iImage= 2;
tvMex.iSelectedImage=0;
tv.itemex=tvMex;
tv.itemex.pszText="摄像机";
HTREEITEM tempItem;
tempItem=tree.InsertItem(&tv);
tree.Expand(hItem,TVE_EXPAND);
} tree.Expand(hRoot ,TVE_EXPAND);
// TODO: 在此添加专用代码和/或调用基类
sign = 1;
}
2. 因为 treectrl 在 view 里 所以 要用: afx_msg void OnTvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult); BEGIN_MESSAGE_MAP(CDevTree, CTreeView)
ON_WM_SIZE()
ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnTvnBegindrag)
// ON_NOTIFY(TVN_BEGINDRAG,TreeID,OnTvnBegindrag)
END_MESSAGE_MAP()void CDevTree::OnTvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
afxDump << "OnTvnBegindrag\n" ;
*pResult = 0;
}
// 那个 obj 删除了。
const DWORD dwViewStyle = TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT;
tree.ModifyStyle(0,dwViewStyle);
tree.SetImageList(&m_pImageList,TVSIL_NORMAL);
你 没有办法 直接 连接一个tree 到 treeview
要不就用 view (你并不要他的 tree)
在CTreeView里 再加一个 Tree 没搞过。
Tree 的 完全 自绘 很麻烦的,通常 用 tree的 CustomDraw 就 可以 了。
要自己加:
h
afx_msg void OnCustDrawTree(NMHDR *pNMHRD,LRESULT *pResult)
event
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,OnCustDrawTree);
cpp
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,OnCustDrawTree)
{
...
}
上面是可用代码完全自绘,吃力不讨好。
到底怎么处理可以收到TVN_BEGINDRAG消息啊!!!!树控件按下消息都能收到
http://blog.chinaunix.net/uid-8193682-id-2513440.html
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
afxDump << "OnItemexpanded\n";
*pResult = 0;
}也·不·响应 !!!