ITPub博客

首页 > 应用开发 > IT综合 > MFC动态创建控件的消息处理 (转)

MFC动态创建控件的消息处理 (转)

原创 IT综合 作者:worldblog 时间:2007-12-12 17:57:45 0 删除 编辑
MFC动态创建控件的消息处理 (转)[@more@]

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 windown");
 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控件删掉.


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992375/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    6241
  • 访问量
    2410343