091025(星期天)CTreeCtrl的msdn描述

本文深入探讨了MFC中CTreeCtrl控件的使用方法,包括控件创建、数据填充、响应用户交互及处理通知消息等关键步骤,并通过具体实例展示了如何自定义双击事件处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1025

屏蔽掉CTreeCtrl双击事件的原有逻辑,加上自己的逻辑,做到了这个功能,MFC的消息机制才算是有了理解。

尝试对CTreeCtrl::Expand函数进行跟踪,断点没有停住。继续看看msdn关于CTreeCtrl的描述。

Typical usage of a tree control (CTreeCtrl) follows the pattern below:

 

The control is created. If the control is specified in a dialog box template or if you're using CTreeView, creation is automatic when the dialog box or view is created. If you want to create the tree control as a child window of some other window, use the Create member function. 目前是使用对话框模板进行创建的。

If you want your tree control to use images, set an image list by calling SetImageList. You can also change the indentation by calling SetIndent. A good time to do this is in OnInitDialog (for controls in dialog boxes) or OnInitialUpdate (for views). 使用图片就不看了。

Put data into the control by calling the CTreeCtrl's InsertItem function once for each data item. InsertItem returns a handle to the item you can use to refer to it later, such as when adding child items. A good time to initialize the data is in OnInitDialog (对话框的初始化for controls in dialog boxes) or OnInitialUpdate (for views).

目前使用了HTREEITEM hItemDir = pTree->InsertItem(FindFileData.cFileName, 0, 1, hItemParent, TVI_LAST);进行树项目的添加。

 

As the user interacts with the control, it will send various notification messages通知消息是怎样的使用方法呢?对话框中的消息大量集中在控件,想熟练使用对话框,控件消息的道理跳不过去. You can specify a function to handle each of the messages you want to handle by adding an ON_NOTIFY_REFLECT macro in your control window's message map or by adding an ON_NOTIFY macro to your parent window's message map.

重点看一下这段话。处理控件通知消息的两种方法:1,加ON_NOTIFY_REFLECT宏到控件的消息映射集,或者2,加ON_NOTIFY宏到其父亲窗口(主要考虑对话框)的消息映射集。

搜索当前项目:

使用wizard生成的MESSAGE_MAP,双击CTreeCtrl的语句。

ON_NOTIFY(NM_DBLCLK, IDC_TREE_SMBLIST, OnDblclkTreeSmblist)

#define ON_NOTIFY(wNotifyCode, id, memberFxn)  

{

WM_NOTIFY, (WORD)(int)wNotifyCode, (WORD)id, (WORD)id, AfxSig_vNMHDRpl,   (AFX_PMSG)(void (AFX_MSG_CALL CCmdTarget::*)(NMHDR*, LRESULT*))&memberFxn

},

 

另外一个加在CSheetTabCtrl控件的MESSAGE_MAP中。分别对应msdn的描述。

BEGIN_MESSAGE_MAP(CSheetTabCtrl, CTabCtrl)

        //{{AFX_MSG_MAP(CSheetTabCtrl)

        ON_NOTIFY_REFLECT(TCN_SELCHANGE, OnSelchange)

        //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

 

Call the various Set member functions to set values for the control. Changes that you can make include setting the indentation and changing the text, image, or data associated with an item.

Use the various Get functions to examine the contents of the control. You can also traverse the contents of the tree control with functions that allow you to retrieve handles to parents, children, and siblings of a specified item. You can even sort the children of a particular node.

When you're done with the control, make sure it's properly destroyed. If the tree control is in a dialog box or if it's a view, it and the CTreeCtrl object will be destroyed automatically在对话框中的CTreeCtrl会自动销毁. If not, you need to ensure that both the control and the CTreeCtrl object are properly destroyed.

问题还是没解决,新添加的处理Notify消息的函数几乎为空:

void CDlgSmbList::OnDblclkTreeSmblist(NMHDR* pNMHDR, LRESULT* pResult)

{

       // TODO: Add your control notification handler code here

       *pResult = 0;

}

那么是什么逻辑使Item展开/合起 了呢??

内容概要:本文从关键概念、核心技巧、应用场景、代码案例分析及未来发展趋势五个维度探讨了Python编程语言的进阶之路。关键概念涵盖装饰器、生成器、上下文管理器、元类和异步编程,这些概念有助于开发者突破基础认知的核心壁垒。核心技巧方面,介绍了内存优化、性能加速、代码复用和异步处理的方法,例如使用生成器处理大数据流、numba库加速计算密集型任务等。应用场景展示了Python在大数据处理、Web开发、人工智能和自动化运维等多个领域的广泛运用,特别是在FastAPI框架中构建异步API服务的实战案例,详细分析了装饰器日志记录、异步数据库查询和性能优化技巧。最后展望了Python的未来发展趋势,包括异步编程的普及、类型提示的强化、AI框架的深度整合以及多语言协同。 适合人群:已经掌握Python基础语法,希望进一步提升编程技能的开发者,特别是有意向从事数据科学、Web开发或AI相关工作的技术人员。 使用场景及目标:①掌握Python进阶概念和技术,如装饰器、生成器、异步编程等,提升代码质量和效率;②学习如何在实际项目中应用这些技术,如通过FastAPI构建高效的异步API服务;③了解Python在未来编程领域的潜在发展方向,为职业规划提供参考。 阅读建议:本文不仅提供了理论知识,还包含了丰富的实战案例,建议读者在学习过程中结合实际项目进行练习,特别是尝试构建自己的异步API服务,并通过调试代码加深理解。同时关注Python社区的发展动态,及时掌握最新的技术和工具。
内容概要:本文档《Rust系统编程实战》详细介绍了Rust在系统编程领域的应用,强调了其内存安全、零成本抽象和高性能的特点。文档分为三个主要部分:核心实战方向、典型项目案例和技术关键点。在核心实战方向中,重点讲解了unsafe编程、FFI(外部函数接口)和底层API调用,涉及操作系统组件开发、网络编程、设备驱动开发、系统工具开发和嵌入式开发等多个领域,并列出了每个方向所需的技术栈和前置知识。典型项目案例部分以Linux字符设备驱动为例,详细描述了从环境搭建到核心代码实现的具体步骤,包括使用bindgen生成Linux内核API的Rust绑定,定义设备结构体,以及实现驱动核心函数。 适合人群:对系统编程有兴趣并有一定编程基础的开发者,尤其是那些希望深入了解操作系统底层机制、网络协议栈或嵌入式系统的工程师。 使用场景及目标:①掌握Rust在不同系统编程场景下的应用,如操作系统组件开发、网络编程、设备驱动开发等;②通过实际项目(如Linux字符设备驱动)的学习,理解Rust与操作系统内核的交互逻辑;③提高对unsafe编程、FFI和底层API调用的理解和运用能力。 阅读建议:由于文档内容较为深入且涉及多个复杂概念,建议读者在学习过程中结合实际操作进行练习,特别是在尝试实现Linux字符设备驱动时,务必按照文档提供的步骤逐步进行,并多加调试和测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值