c – 如何找到树形视图等于字符串变量的树视图节点?

c – 如何找到树形视图等于字符串变量的树视图节点?,第1张

概述首先,我要感谢所有花时间查看此主题并尝试提供帮助的人. 我在Internet上搜索过,找不到选择树视图节点的示例,该节点的标签文本与字符串变量的文本相同. 在MSDN上我找到了消息TVM_GETISEARCHSTRING但我不知道它是否可以用来解决我的问题.即使它可以,我仍然不知道如何使用它. 我有一个字符串变量,用于保存数据库中的文本. 程序加载时,树视图应该有一个选择了相同文本的节点. 请帮忙 首先,我要感谢所有花时间查看此主题并尝试提供帮助的人.

我在Internet上搜索过,找不到选择树视图节点的示例,该节点的标签文本与字符串变量的文本相同.

在MSDN上我找到了消息TVM_GETISEARCHSTRING但我不知道它是否可以用来解决我的问题.即使它可以,我仍然不知道如何使用它.

我有一个字符串变量,用于保存数据库中的文本.
程序加载时,树视图应该有一个选择了相同文本的节点.

请帮忙处理一些说明或代码片段,因为我不知道如何开始编码.

我使用纯WIN32 API在Windows XP上使用纯WIN32 API在MS Visual Studio Express 2008中工作.

这就是全部,再次感谢所有试图帮助的人.非常感谢你们!

编辑:

这两个答案对我都有好处,但我不知道如何标记它们,似乎在这个网站上只有一个答案可以接受.

我不可能只是忽略了他们所投入的所有工作来帮助我,所以我写这个是为了试图回报Jonathan至少通过正式声明他的解决方案对我来说也是可以接受的,这只是Tim的解决方案更适合我的编码风格.我也会提出两个答案.

解决方法 treevIEw控件不提供用于搜索标签的API.您必须手动遍历项目并将它们与您的字符串进行比较.

如果您的树视图深度超过一个级别,则必须决定如何遍历项目(首先是深度或先是宽度).如果有多个项目具有相同的标签,则这些策略可能会返回不同的项目.

实现可能如下所示:

// Helper function to return the label of a treevIEw itemstd::wstring GetItemText( HWND hwndTV,HTREEITEM htItem ){    static const size_t maxLen = 128;    WCHAR buffer[ maxLen + 1 ];    TVITEMW tvi = { 0 };    tvi.hItem = htItem;         // TreevIEw item to query    tvi.mask = TVIF_TEXT;       // Request text only    tvi.cchTextMax = maxLen;    tvi.pszText = &buffer[ 0 ];    if ( TreeVIEw_GetItem( hwndTV,&tvi ) )    {        return std::wstring( tvi.pszText );    }    else    {        return std::wstring();    }}

这是实际遍历发生的地方.递归调用该函数,直到无法搜索任何项目或找到匹配项.此实现使用区分大小写的比较(wstring :: operator ==(const wstring&)).如果您需要不同的谓词,则必须根据需要修改实现.

HTREEITEM FindItemDepthFirstImpl( HWND hwndTV,HTREEITEM htStart,const std::wstring& itemText ){    HTREEITEM htItemmatch = NulL;    HTREEITEM htItemCurrent = htStart;    // Iterate over items until there are no more items or we found a match    while ( htItemCurrent != NulL && htItemmatch == NulL )    {        if ( GetItemText( hwndTV,htItemCurrent ) == itemText )        {            htItemmatch = htItemCurrent;        }        else        {            // Traverse into child items            htItemmatch = FindItemDepthFirstImpl( hwndTV,TreeVIEw_GetChild( hwndTV,htItemCurrent ),itemText );        }        htItemCurrent = TreeVIEw_GetNextSibling( hwndTV,htItemCurrent );    }    return htItemmatch;}

以下函数包装递归并将根元素作为起始点传递.这是您在代码中调用的函数.如果找到一个HTREEITEM,它将返回HTREEITEM,否则返回NulL.

HTREEITEM FindItem( HWND hwndTV,const std::wstring& itemText ){    HTREEITEM htiRoot = TreeVIEw_GetRoot( hwndTV );    return FindItemDepthFirstImpl( hwndTV,htiRoot,itemText );}
总结

以上是内存溢出为你收集整理的c – 如何找到树形视图等于字符串变量的树视图节点?全部内容,希望文章能够帮你解决c – 如何找到树形视图等于字符串变量的树视图节点?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1245964.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存