为什么这样做,CDialogBar的关于其子窗体产生事件的处理函数得不到执行?? 急盼回音...

eEric 2004-10-05 05:01:55
创建一CDialogBar派等类ZOnlineBar, 并为其添加一CTreeCtrl类型的成员对象m_wndTreeCtrl, 并在ZOnlineBar::OnCreate()中调用
CTreeCtrl::CreateEx()和CTreeCtrl::InsertItem()。
在CMainFrame::OnCreate()中 'Create' ZOnlineBar实例m_wndOlBar。

程序运行后,DialogBar和TreeCtrl的窗体显示一切正常, 但鼠标点击m_wndTreeCtrl的不同的item时,负责处理TVN_SELCHANGED消息的ZOnlineBar::OnTvnSelchangedTree1()却得不到执行,为什么 ??

但如果我通过资源编辑器在'dialog template' IDD_DIALOGBAR上拖放一个Tree Control(而不是手工 'Create' 一个m_wndTreeCtrl),并且通过VC自动生成的事件处理函数,却是能够响应TVN_SELCHANGED。我查看了自动生成的响应TVN_SELCHANGED消息的那部分代码,除了id外,与我手工添加的代码基本是一样的,不知这是什么原因 ??????

(平台为winxp sp1 + vs.net 2003 )

代码如下:

class ZOnlineBar : public CDialogBar
{
DECLARE_DYNAMIC(ZOnlineBar)

public:
ZOnlineBar();
virtual ~ZOnlineBar();

protected:
DECLARE_MESSAGE_MAP()
public:
CTreeCtrl m_wndTreeCtrl;
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult);/* 手工添加*/
};


BEGIN_MESSAGE_MAP(ZOnlineBar, CDialogBar)
ON_WM_CREATE()
ON_NOTIFY(TVN_SELCHANGED, 0x1005, OnTvnSelchangedTree1) /* 手工添加 */
END_MESSAGE_MAP()

int ZOnlineBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogBar::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rect;
GetClientRect(&rect);
m_wndTreeCtrl.CreateEx(WS_EX_STATICEDGE,
WS_VISIBLE | WS_TABSTOP | WS_CHILD | TVS_CHECKBOXE
|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_HASLINES|TVS_DISABLEDRAGDROP,
rect, this, 0x1005);
HTREEITEM ht0 = m_wndTreeCtrl.InsertItem("root");
HTREEITEM ht1 = m_wndTreeCtrl.InsertItem("home", ht0);
/* ... */
return 0;
}

void ZOnlineBar::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
/* ... */
*pResult = 0;
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
/* ...*/
/* ZOnlineBar m_wndOlBar; */
m_wndOlBar.Create(this, IDD_DIALOGBAR, CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_DIALOGBAR);
/* ...*/
}
...全文
203 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
eEric 2004-10-09
  • 打赏
  • 举报
回复
rivershan(笨猫)(www.rivershan.com) ( )
--------------------------------------------------------

能不能将它寄给我????

我的e-mail:
ehzhu@sina.com

万分感谢
rivershan 2004-10-09
  • 打赏
  • 举报
回复
我试着写了一个,没问题。。。
keiven 2004-10-08
  • 打赏
  • 举报
回复
帮你UP一下!
eEric 2004-10-08
  • 打赏
  • 举报
回复
哪位大哥能帮我写一个满足下列要求的程序:

1. 在单文档项目里,创建一个DialogBar(通过CDialogBar的一个派生类);
2. 在DialogBar派生类里手工Create一个TreeCtrl(不能在'dialog template' 里拖放treecontrol
控件);
3. 手工建立TVN_SELCHANGED至OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)的消
息映射;


我的e-mail: ehzhu@sina.com

收到后立即结贴!!!!
nineclock 2004-10-07
  • 打赏
  • 举报
回复
如果需要,你把工程发给我,我帮你调调
短信联系
eEric 2004-10-07
  • 打赏
  • 举报
回复
IDC_TREE_TEST 的 值是多少??
huaboy408 2004-10-07
  • 打赏
  • 举报
回复
ID号0x1005是否重复了,换一个试试,例如IDC_TREE_TEST
eEric 2004-10-06
  • 打赏
  • 举报
回复
这个问题已经困扰我好几天了...

等待一个能彻底解决它的高手
nineclock 2004-10-05
  • 打赏
  • 举报
回复
要不继承一个CTreeCtrl的类试试~??
nineclock 2004-10-05
  • 打赏
  • 举报
回复
实在找不出来原因~,帮你UP
eEric 2004-10-05
  • 打赏
  • 举报
回复
呵呵,好久没到这来了,这儿是不是因为过节人气不旺啊 :)
eEric 2004-10-05
  • 打赏
  • 举报
回复
"你把消息映射函数添加到CMainFrm或者CView类里试试!自己手动添加"

___________________________________________________________________

这种方法我试验过,仍旧不行。

最让我费解的就是为什么用拖放控件的方式自动生成代码反而能行?
Kudeet 2004-10-05
  • 打赏
  • 举报
回复
最好添加到CDialogBar的父窗口里去。
Kudeet 2004-10-05
  • 打赏
  • 举报
回复
你把消息映射函数添加到CMainFrm或者CView类里试试!自己手动添加
xmzh 2004-10-05
  • 打赏
  • 举报
回复
up!

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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