应用BCGCB写的一个界面上,左边是一棵树。这个树的实现类为WorkspaceBar.cpp然后在MainFrm中定义
CWorkspaceBar m_wndWorkSpace; 在MainFrm.cpp中m_wndWorkSpace.Create()来建立这个树。现在的问题是我点击了树中的项目,希望产生的消息执行OnSelchanged和OnClick函数,
定义的消息如下:
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
消息定义是在WorkspaceBar.cpp中的,而且我希望是在WorkspaceBar,但是目前点了树没有产生现有的消息,不知是定义的消息不对呢还是不能在WorkspaceBar定义?
小弟刚学VC,还请大家帮忙!!!
CWorkspaceBar m_wndWorkSpace; 在MainFrm.cpp中m_wndWorkSpace.Create()来建立这个树。现在的问题是我点击了树中的项目,希望产生的消息执行OnSelchanged和OnClick函数,
定义的消息如下:
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
消息定义是在WorkspaceBar.cpp中的,而且我希望是在WorkspaceBar,但是目前点了树没有产生现有的消息,不知是定义的消息不对呢还是不能在WorkspaceBar定义?
小弟刚学VC,还请大家帮忙!!!
加ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnTvnSelchanged)
定义的话只能用于自身响应消息,这是CTreeCtrl控件自身的消息响应函数。
你要WorkspaceBar响应的话,可以在TreeCtrl的OnTvnSelchanged函数中给WorkspaceBar发一条你自定义的消息。
或者把WorkspaceBar的指针给TreeCtrl,在TreeCtrl的OnTvnSelchanged函数中直接调用WorkspaceBar的某个函数,执行相应操作。
,你说的TreeCtrl的OnTvnSelchanged应该在哪里实现啊?
请给些实例代码好啊
单文档的话,View的父窗口就是MainFrame,用GetParent()就能找到。
或者用全局的App对象也能找到:CMainFrame * pMainFrame = (CMainFrame *)theApp.GetMainWnd();
然后pMainFrame->m_wndToolBar 就行了。
关于第一个问题,你的意思就是让我自己从CTreeCtrl派生一个tree类,然后再这个类中加入OnTvnSelchanged函数。我在想我需要的操作就在OnTvnSelchanged中完成,而不再通过接调用WorkspaceBar的某个函数,这样可以吗?
在我定义的tree类中如何获得WorkspaceBar中的某个函数的指针啊?
现在的情况大概你的TreeCtrl的父窗口就是WorkspaceBar,直接用:
CWorkspaceBar * pBar=(CWorkspaceBar *)GetParent();
然后 pBar-> 某一个函数() 就行了。不过函数的定义必须是public的。
如果想直接把WorkspaceBar的指针给TreeCtrl,就在TreeCtrl的头文件中定义一个WorkspaceBar的指针,你在WorkspaceBar中Create TreeCtrl之后,马上把自己的指针赋给TreeCtrl中的那个变量就行了。
如在TreeCtrl.h中:CWorkspaceBar * m_pBar;
在WorkspaceBar中Create TreeCtrl之后:m_wndTree.m_pBar=this;
就行了,之后m_pBar->某个函数()。