动态创建的控件如何绑定消息处理?

lixinwyh 2003-01-02 11:02:19
在mfc中动态创建的控件,如何给他分配一个事件处理函数呢?当他触发特定的事件后执行相应的处理程序。
...全文
452 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixinwyh 2003-01-02
  • 打赏
  • 举报
回复
大家的方法都有一个问题,如果我创建的控件都是一个类型,但是不只1个怎么办?我也不知道会创建多少个,
BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间的消息映射好像不能动态添加把?
cuterain 2003-01-02
  • 打赏
  • 举报
回复
gz
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
是楼上的楼上的。。。
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
楼上的:
class wizard怎么知道这个id_listctrl是属于那种控件类型?
akiy 2003-01-02
  • 打赏
  • 举报
回复
自己见几个ID然后把这些ID帮关联到控见上就行了!
tleon 2003-01-02
  • 打赏
  • 举报
回复
1. 在view->Resource Symbols中添加一ID值
2. 在Create的时候将该ID值给控件

Create(WS_VISIBLE,CRect(10,10,310,210),this,ID_LISTCTRL)
就是他______|

3. 在Class Wizard中就有该ID值,这时候就可以加消息了
马志1993 2003-01-02
  • 打赏
  • 举报
回复
kingcom_xu的办法我以前也用过,一定行
不过,派生一个控件类,用起来更方便
heartthrob 2003-01-02
  • 打赏
  • 举报
回复
手工添加阿。
你可以先在面板上放一个控件,然后处理一个消息,看这个控件产生了那些代码,这些代码就是你需要添加的。你只需要更改一下控件的ID和函数名称之类的就好了。
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
MFC动态创建控件的消息处理
  前些天有人在论坛里问在动态创建TreeCtrl后怎么响应消息,于是便写了一点自己的心得,现整理如下。

  本例在view中动态创建一个ListCtrl并响应其NM_CLICK消息,先写出动态创建的代码:

新建一SDI工程,给view加上一个成员变量:
CListCtrl m_list;
在view的OnCreate中创建它:
if(!m_list.Create(WS_BORDER |WS_CHILD|WS_VISIBLE|LVS_ICON |LVS_AUTOARRANGE|LVS_SHOWSELALWAYS|LVS_EDITLABELS,CRect(10,10,310,210),this,ID_LISTCTRL))
{
TRACE0("Failed to create ListCtrl window\n");
return -1;
}
//添加一些项
CString str;
for(int i=0;i<10;i++)
{
str.Format("item%d",i);
m_list.InsertItem(i,str);
}
其中的ID_LISTCTRL是这个控件的ID,当然你可以直接用数值来表示,但为了程序清淅还是定义一个常量的好,在主菜单View->Resource Symbols弹出的对话框中点击New按钮,在Name下面输入ID_LISTCTRL.

创建完毕,编译链接后就可以运行了,但你怎么点击它都没反应,当然,因为我们还没写消息处理的代码。
  通常做法是手动写消息处理函数及消息映射,至少得三步:1,在头文件中定义消息处理函数的原型,2,在cpp中实现这个函数,3,在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间写上消息映射。如果是单单处理一个消息的话那还可以忍受,消息一多的话不但麻烦还容易出错。
  
所以我采取下面的方法:
1.打开about对话框资源,放入一个ListCtrl控件到对话框中,并将其ID设为ID_LISTCTRL.
2.Ctrl+W,把Class Name由原来的CAboutDlg改为CxxxView,在左边的Object IDS中选择ID_LISTCTRL,这时右边会出现相应的通知消息,这时就可以跟平常一样双击添加消息映射了.
这样就跟在对话框里响应控件的消息一样可以很方便的添加消息处理函数了.
有一点需要注意,只有当打开你加入控件的那个对话框资源编辑器的时候按Ctrl+W时,Class Wizard中才会出现那个ID_LISTCTRL,还有发行时注意把对话框上的listctrl控件删掉.






仅供参考!!!!!!!!!!!!!!!!!!!!!!!!!!!记得变通...
m0772 2003-01-02
  • 打赏
  • 举报
回复
gz
lixinwyh 2003-01-02
  • 打赏
  • 举报
回复
ok,thanks
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
tolixinwyh(xin):
可用ON_CONTROL_RANGE,但你的控件的ID必须有一定的规则...
lixinwyh 2003-01-02
  • 打赏
  • 举报
回复
oncommand是个办法,还有一个onnotify好像也可以,但是没找到这方面的例子,有人知道吗?
象guanmj(雪在烧)所说的,应该没有哪个必要吧。
chen_jun_fen 2003-01-02
  • 打赏
  • 举报
回复
windowproc and oncommand
马志1993 2003-01-02
  • 打赏
  • 举报
回复
所以要用派生类呀,把类写好,所有的控件都作为这个类的实例

16,472

社区成员

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

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

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