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

 

 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()之间写上消息映射。如果是单单处理一个消息的话那还可以忍受,消息一多的话不但麻烦还容易出错。
  
    所以我采取下面的方法:
    重写消息

BOOL CkaoguangView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: 在此添加专用代码和/或调用基类
if(wParam==110){//10001为你的控件ID  
   LPNMTREEVIEW pv= (LPNMTREEVIEW)lParam;  
   if(pv->hdr.code==NM_DBLCLK){  
    MessageBox(_T("ddd"));
    return   TRUE;  
   }  
}

return CView::OnNotify(wParam, lParam, pResult);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值