Chinaunix首页 | 论坛 | 博客
  • 博客访问: 262716
  • 博文数量: 45
  • 博客积分: 1618
  • 博客等级: 上尉
  • 技术积分: 530
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-11 10:13
文章分类

全部博文(45)

文章存档

2012年(1)

2011年(25)

2010年(19)

我的朋友

分类: C/C++

2011-02-25 18:48:54

当选择CTreeCtrl控件某一项时,或者类似的动作,需要进行消息处理,比如在选择控件的目录一项时,自动展开,不像VS提供的自动添加工具那样方便,需要自己添加消息处理,主要是用下面的宏

ON_NOTIFY( wNotifyCode, id, memberFxn )

wNotifyCode是消息通知,id是发送消息控件的ID,memberFxn 调用的函数,其原型必须如下

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );

所以首先添加如下函数原型

afx_msg void OnTvnSelchangedTreeCtl( NMHDR * pNotifyStruct, LRESULT * result );

该函数捕获CTreeCtrl控件的被选项改变的动作,捕获宏如下

BEGIN_MESSAGE_MAP(CBridgeWindow, CFrameWnd)
    ON_WM_CREATE()
    ON_NOTIFY(TVN_SELCHANGED, ID_TREELIST, &CBridgeWindow::OnTvnSelchangedTreeCtl)
END_MESSAGE_MAP()

现在就可以在afx_msg void OnTvnSelchangedTreeCtl( NMHDR * pNotifyStruct, LRESULT * result )函数里面实现我们想要的功能

afx_msg void CBridgeWindow::OnTvnSelchangedTreeCtl(NMHDR * pNotifyStruct, LRESULT * result)
{
    HTREEITEM hItem = treectrl.GetSelectedItem();
    
    if ((hItem != NULL) && treectrl.ItemHasChildren(hItem))
    {
     treectrl.Expand(hItem, TVE_EXPAND); //如果有子节点,就自动展开
     treectrl.EnsureVisible(hItem);
    }else{
        TVITEM item;
     TCHAR szText[1024];
     item.hItem = hItem;
     item.mask = TVIF_TEXT | TVIF_HANDLE;
     item.pszText = szText;
     item.cchTextMax = 1024;
     BOOL bWorked = treectrl.GetItem(&item);
     CBridgeView* pView = (CBridgeView*)GetActiveView();
     //pView->m_viewDialog->SendMessage();
    }
    
    return;
}

OK,大框架搭好了,开始我的细节喽!
阅读(2658) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~