问题描叙:
我用VC编写一个SDI单文档视图程序,程序界面类似于Windows资源管理器那样的框架,不过左边部分我是用的CControlBar控件内嵌CTreeCtrl代替了一般常用的CTreeView视图。
但我在消息响应方面遇到了问题,请问怎样让CTreeCtrl响应菜单和选择CTreeCtrl子项时的消息呢?比方点击一个树控件子项或选择一个菜单时就弹出一个消息框。
十万火急!还望各位大虾多多帮忙啊,最好能有代码提示,小弟在此先谢谢各位了!
我用VC编写一个SDI单文档视图程序,程序界面类似于Windows资源管理器那样的框架,不过左边部分我是用的CControlBar控件内嵌CTreeCtrl代替了一般常用的CTreeView视图。
但我在消息响应方面遇到了问题,请问怎样让CTreeCtrl响应菜单和选择CTreeCtrl子项时的消息呢?比方点击一个树控件子项或选择一个菜单时就弹出一个消息框。
十万火急!还望各位大虾多多帮忙啊,最好能有代码提示,小弟在此先谢谢各位了!
解决方案 »
- txt文件的打印
- 怎么样才能点菜单按钮在视图中出现一行文字啊
- 急求:微机与数控机床控制系统的串口通讯的源程序!!!
- 大家好,为什么工作线程和用户界面线程(主线程)之间传递消息有时候不响应?
- flash->位图
- 谁在使用MSFlexGrid时见过这种问题,在线等待...
- 我用mciSendString播放一个AVI文件,请问如何让进度条与这个播放文件关联起来,实现文件在播放时,进度条也在跟着走?我都问了一个下午了
- 如何判断转化这段字符串?
- 有谁知道exe文件的文件结构?????
- Cannot open include file: 'afx.h'
- 动态创建CEdit对象时如何改变其背景颜色和输入字体的颜色?
- 请问怎样在状态栏里加入一个类似IE的进度条??
小弟在线等.... 问题一解决就给分!
再有就是我也想到了自己动手添加消息映射,
可这个ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTreeSurvey)有三个参数,我怎样将第二个参数IDC_TREE1和我的控件m_TreeCtrl联系起来啊? 我知道在对话框中用ClassWizard是很好解决的,但我用了外部的CControlBar,在ClassWizard中它就没有显示了
protected:
//{{AFX_MSG(CmyControlBar)
afx_msg void OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};.............
BEGIN_MESSAGE_MAP(CmyControlBar, CControlBar)
//{{AFX_MSG_MAP(CLeftView)
ON_NOTIFY(TVN_SELCHANGED,IDC_SHELL_TREE, OnSelchanged)
//}}AFX_MSG_MAP
// Standard printing commands
END_MESSAGE_MAP().............
void CmyControlBar::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
..............
}
OnSelchanged消息映射至于IDC_TREE1和控件变量m_TreeCtrl怎样联系起来,你可以这样
在CXXXBar类头文件中:
#define IDC_TREE1 0x1001 //常量可以自己随便定义,不要和已有程序中id号重复就行
在CXXXBar类源文件中:
// create the tree control.
if (!m_TreeCtrl.Create(WS_VISIBLE, CRect(0,0,0,0), this, IDC_TREE1))
{
TRACE0( "Unable to create tree control.\n" );
return -1;
}
这样你就将m_TreeCtrl与IDC_TREE1联系起来了!
按照 suya101(森林狼) 所说的我终于把IDC_TREE1和我的控件m_TreeCtrl联系起来了,
按照 byry(百事罐头) 所说的我也知道了要在CXXXBar类中定义自己的OnSelchanged消息映射,但是又出现了新的问题:
我用如下代码测试时:
// CmyControlBar.h
....
#define IDC_TREE1 0x1001
protected:
//{{AFX_MSG(CmyControlBar)
afx_msg void OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};// CmyControlBar.cpp
.............
BEGIN_MESSAGE_MAP(CmyControlBar, CControlBar) ON_NOTIFY(TVN_SELCHANGED,IDC_TREE1, OnSelchanged)
END_MESSAGE_MAP()// create the tree control.
if (!m_TreeCtrl.Create(WS_VISIBLE, CRect(0,0,0,0), this, IDC_TREE1))
{
TRACE0( "Unable to create tree control.\n" );
return -1;
}
..........................
void CmyControlBar::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
AfxMessageBox("Hit me!"); //测试代码
*pResult = 0;
}编译连接无错!
但当我点选树控件子项时居然一点反映都没有,按理说应该弹出"Hit me"消息框才对!
请问有哪位大虾知道是怎么回事啊
刚刚眼看有点希望,又陷入困境
我都晕死了!
多亏你打开了大家的思路呢!