首页 > 解决方案 > win api - TVN_BEGINLABELEDIT 和 InvalidateRect

问题描述

我见过以下 TVN_BEGINLABELEDIT 事件处理:

RECT rect={0};
TreeView_GetItemRect(hwnd, hitem, &rect, FALSE);
InvalidateRect(hwnd, &rect, TRUE);

在没有上述代码的情况下编辑树视图标签可以正常工作。它是多余的还是可能存在需要这种处理的情况?

标签: winapi

解决方案


备注部分包含TVN_BEGINLABELEDIT有关树视图控件内部的提示:

当标签编辑开始时,会创建一个编辑控件 [...]

默认情况下,该编辑控件的位置和大小可以覆盖要编辑的项目。没有立即明显的理由使即将被另一个控件覆盖的区域无效。

如果实现选择为编辑控件提供自定义大小和位置,那么使项目覆盖的区域无效甚至没有意义。到WM_PAINT处理消息时,树视图控件仍保留该项目的初始值,因此编辑控件未覆盖的部分仅按原样重绘。


推荐阅读