对话框中关于CTreeCtrl事件响应的问题?

wirror800 2009-03-04 10:02:16
我新建了一个对话框工程,然后我往对话框中添加了一个CTreeCtrl变量,同时添加了OnCreate函数,具体定义如下:
int CMy33Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_tree)
m_tree.Create(WS_CHILD|WS_VISIBLE|TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS,CRect(0,0,0,0),this,ID_FILETREE);
HTREEITEM hti,hti2,hti3;
hti = m_tree.InsertItem(_T("一层目录"));
m_tree.InsertItem(_T("一层目录2"));
hti2 = m_tree.InsertItem(_T("二层目录"), hti);
hti3 = m_tree.InsertItem(_T("三层目录"), hti2);
m_tree.InsertItem(_T("四层目录"), hti3);
m_tree.InsertItem(_T("二层目录2"), hti);
m_tree.InsertItem(_T("三层目录2"), hti2);
m_tree.InsertItem(_T("四层目录2"), hti3);

hti = m_tree.GetRootItem();
m_tree.SelectItem(hti);
m_tree.Expand(hti,TVE_EXPAND);

return 0;
}

然后我想为m_tree添加两个事件,一个是鼠标双击,一个时节点展开。
首先,在头文件中定义了#define ID_FILETREE 96367
然后,头文件中加了
afx_msg void OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);

消息映射中加了:
ON_NOTIFY(TVN_ITEMEXPANDING, ID_FILETREE, OnItemexpanding)
ON_NOTIFY(NM_DBLCLK, ID_FILETREE, OnDblclk)


OnItemexpanding和OnDblclk也做了简单定义:
void CMy33Dlg::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
MessageBox("dbclick");
}

void CMy33Dlg::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult)
{
MessageBox("expand");
}

为什么鼠标的双击事件可以正常响应,而节点展开却不能响应相关的函数呢?
很是郁闷啊。。。。

希望各位告诉帮忙解决一下哦~
...全文
291 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wirror800 2009-03-28
  • 打赏
  • 举报
回复
怎么没人给点意见啊
wirror800 2009-03-13
  • 打赏
  • 举报
回复
能够说下具体原因吗?感觉很不自然啊。。。
绿豆蛙2013 2009-03-07
  • 打赏
  • 举报
回复
控件的创建最好在oninitDialog中吧,我都是在oninitDialog中创建
wirror800 2009-03-06
  • 打赏
  • 举报
回复
我是在oncreate中创建的cctrltree,后来我改在oninitDialog中创建,好像又可以响应了,不知道为什么?
lwx300 2009-03-04
  • 打赏
  • 举报
回复
只有双击含有子节点的节点,才会响应 TVN_ITEMEXPANDING 消息。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧