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

原创 2003年01月02日 09:17:00

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控件删掉.

MFC控件使用说明书

VC++控件工具箱: 2 按钮(Button):用来接收用户的命令,应用程序在接收到用户命令后,通常需要进行一些后台工作。按钮可以响应单击或双击动作,在按钮接收到鼠标动作后,向其父窗口发送...
  • miko_xiaoming
  • miko_xiaoming
  • 2015年08月14日 09:23
  • 3331

MFC中各种控件透明的实现方法总结

Button: 资料来源: http://www.cnblogs.com/songsu/articles/1370665.html 关键是其中的OnEraseBkgnd。OnDrawItem只是...
  • zhengbei2
  • zhengbei2
  • 2013年06月04日 17:49
  • 2223

MFC基本控件使用——列表控件(ListCtrl)

咳咳
  • SmallStoneSK
  • SmallStoneSK
  • 2014年05月03日 20:42
  • 9323

MFC 自定义控件使用实践

MFC 自定义控件使用实践(1) 转载前记:说实在的,这个方法太麻烦了,我感觉最方便的方法是, 1从CWnd或者CView派生一个类, 2在对话框或者普通窗口上,定义类对象 theObj, 3在On...
  • worldy
  • worldy
  • 2013年11月15日 10:50
  • 6375

MFC中常用控件使用方法总结

1、提示框操作: INT_PTR nRes;         nRes = MessageBox(_T("是否需要进行数据擦除?"), _T("数据擦除"),MB_YESNOCANCEL);   ...
  • mytt2013
  • mytt2013
  • 2016年10月08日 14:25
  • 881

MFC 树形控件与列表控件

初始化区域代码: // TODO: 在此添加额外的初始化代码 srand(time(NULL)); // 添加位图资源,必须要全局变量才行 m_treeImageListRoot.Cr...
  • fulianzhou
  • fulianzhou
  • 2015年10月07日 21:44
  • 2160

MFC控件的Z序

1. 创建4个按钮 CRect rcCreate(0,0,80,80); m_btTest1.Create(TEXT("Test1"),WS_CHILD|WS_VISIBLE,rc...
  • PerfectToday
  • PerfectToday
  • 2015年06月03日 14:34
  • 3478

mfc中设置控件颜色

在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:   afx_msg HB...
  • echojiangyq
  • echojiangyq
  • 2014年04月23日 09:28
  • 3558

MFC控件使用大全

MFC控件使用大全
  • daoming1112
  • daoming1112
  • 2017年01月23日 23:41
  • 2968

MFC中使用日期控件设置,获取日期时间

日期时间控件为用户输入或选择特定日期提供了直观简洁的方法,
  • u011619422
  • u011619422
  • 2014年11月20日 12:43
  • 5235
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC动态创建控件的消息处理
举报原因:
原因补充:

(最多只允许输入30个字)