实战经验:TVN_SELCHANGED和TVN_SELCHANGING通知消息的应用

实战经验:TVN_SELCHANGED和TVN_SELCHANGING通知消息的应用

作者:BlogUpdater |  时间:2017-04-14 |  浏览:3691 |  评论已关闭 条评论

在使用CTreeCtrl控件时,有两个通知消息我们会经常用到,分别是:

TVN_SELCHANGING: 这个消息表示树结点即将从一个切换至另一个,但是请注意,切换只是即将开始,还没有真正进行。

TVN_SELCHANGED: 这个消息表示树结点已经完成从一个切换到另一个,从界面效果来看,当前选中的树结点的高亮色从一个变更到了另一个了。

 

TVN_SELCHANGING消息应用:

对于有些应用场景,我们需要控制用户是否可以进行树结点的切换,这时,TVN_SELCHANGING就派上了用场。

如下面的代码,可以通过返回0或者返回1来控制是否允许树控件进行结点切换:

void CMyDialog::OnTreeNodeSelectionChanging(NMHDR *pNMHDR, LRESULT *pResult)
{
    int a = 10;
    LPNMTREEVIEW pNMTreeView = (LPNMTREEVIEW)pNMHDR;
    if (/*Allow user to select new node */)
    {
        *pResult = 0;
    }
    else
    {
        *pResult = 1;
    }
}

TVN_SELCHANGED消息应用:

对于TVN_SELCHANGED消息,收到此消息的时候,树控件已经完成结点切换,一般处理流程是获取新选中结点的信息,代码如下:

void CMyDialog::OnTreeNodeSelectionChanged(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTREEVIEW pNMTreeView = (LPNMTREEVIEW)pNMHDR;
    HTREEITEM hNodeNew = pNMTreeView->itemNew.hItem;

    // Play with new node handle
}
标签:

评论已关闭。