请教诸位高手一个关于动态创建CTreeCtrl控件后,如何使该控件来响应消息的问题

guo_xp 2003-03-19 09:51:41
请教诸位高手一个问题,是关于动态创建CTreeCtrl控件后,如何使该控件来响应消息的。

我建立了一个MDI窗体,为了能够获取类似VC界面的效果,就按照一些网络资源的方法,使用了
一个被称之为CSizingControlBar的类(派生自CControlBar).同时,我在MainFrm的创建过程中
动态创建了CTreeCtrl控件。下面是相关的一些代码:
if (!m_wndCoolBar.Create(_T("命令导航栏"), this, 123))
{
TRACE0("Failed to create mybar\n");
return -1; // fail to create
}

//创建树状控件
if (!m_wndTree.Create(WS_CHILD|WS_VISIBLE|
TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,
CRect(0, 0, 0, 0), &m_wndCoolBar, ID_Tree_View))
{
TRACE0("Failed to create instant bar child\n");
return -1;
}
m_wndTree.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
上面分别是创建命令导航栏和CTreeCtrl控件的代码。命令导航栏所属窗体是MainFrm。

现在,我想让CtreeCtrl控件能够响应鼠标单击事件。
一种方法是定义CTreeCtrl控件的派生类,在派生类中些OnClick事件。然而,如果把Click事件
在派生类中写死的话,该派生类将不能适用其他情况,因此我不愿意使用。
另外,也听人说过子类化、或者直接在手工写消息映射的函数,或者处理PreTranslateMessage()
可是,这些方法我就不会了。如何让动态创建的CTreeCtrl控件响应消息呢?
希望能得到大家的帮助,越详细越好。这个问题不解决,小弟我很难睡着觉了……
CTreeCtrl的ID在创建时候指定为ID_Tree_View(100).谢谢。
...全文
367 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
njtu 2003-03-24
  • 打赏
  • 举报
回复
up
guo_xp 2003-03-19
  • 打赏
  • 举报
回复
to yndfcd(YNDFCD)
谢谢您,从您的回答中,我领会了一些我以前从来未曾想到过的内容
当然,具体的理论道理您没有讲
我会自己更加努力的去学习和实践的,再次感谢您的回答。

那么,我想,如果在MainFrm能否处理相应的消息呢?---经过尝试,我发现,在Mainfrm中按您的方法进行处理,也是可以得到相应的结果的,谢谢!
分数就给您送上了,希望下次还能得到您的帮助。:)
guo_xp 2003-03-19
  • 打赏
  • 举报
回复
谢谢 yndfcd(YNDFCD)
我马上去尝试您的办法
我一直喜欢VC,喜欢C++,可惜缺乏学习环境(导师要用Delphi),进步很慢,希望能多得到诸位高手的指点。
yndfcd 2003-03-19
  • 打赏
  • 举报
回复
为了不把Click事件在派生类中定死,将响应函数声明为虚函数。子类化与派生类的方法一样。只不过多调用了SubclassWindow函数而巳。

自己加入消息映射的方法应该可以,在CCoolBar的消息映射宏中加入
ON_NOTIFY(wNotifyCode, id, memberFxn)
wNotifyCode为事件代号,如 LVN_DBCLK等等,id为你的TreeCtrl的ID,即100.memberFxn的声明如下afx_msg void memberFxn(NMHDR* pNMHDR, LRESULT* pResult);
如果确定只有TreeCtrl会发Notify消息时也可以这样声明:
afx_msg void memberFxn(NMTREEVIEW* pNMHDR, LRESULT* pResult);
在该函数中,如果希望处理完后,进行默认处理的话,可以这样做*pResult = 0;
guo_xp 2003-03-19
  • 打赏
  • 举报
回复
谢谢两位的回复。刚才我网络故障,现在才来看。
至于动态创建按钮,我知道一点:应该是在.h文件和.cpp文件分别声明好对应的消息以及其函数,并绑定其ID,然后在写相应的函数代码。

然而,在MDI框架里,我该如何去做呢?CTreeCtrl类在CControlBar的派生类上,它们相当于工具栏上的控件,我是在不知道该如何去捕获相应的消息。
而且,消息原型该如何写呢?我也是在没有经验,不得不来CSDN求助诸位高手。

我本人有以前的CSDN的离线浏览器,也查阅了相关的资料。可惜,还是搞不掂MDI框架下的这个问题,我的基本功应该是很差了。希望能出诸位的回复中得到帮助。

谢谢
GoogleGeek 2003-03-19
  • 打赏
  • 举报
回复
搂住:
动态创建的按钮的消息相应方法你应该回吧!
推而广之,CTreeCtrl也是一样的,只不过消息圆形复杂一些罢了,
winphoenix 2003-03-19
  • 打赏
  • 举报
回复
up

15,980

社区成员

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

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