Tag: datagrid

使用可编辑的子项正确处理listview中的子项目编辑(或取消子项目编辑)

介绍: 我正在尝试使用可编辑的子项实现listview控件。 对于项目/子项目的就地编辑,我使用编辑控件。 我相信我已经成功地将编辑控件放置在item / subitem上面。 问题: 我不知道我应该在哪些事件上结束/取消子项目编辑(隐藏编辑控件,设置子项目文本等)以及我该怎么做。 为了澄清,我说的是用户完成/取消现场编辑的时刻。 此时不再需要编辑控件,所以我应该隐藏它(我不喜欢每次都重新创建它;我相信创建它一次然后在需要时显示/隐藏它更有效)。 我的目标是Visual Studio中的属性窗口所具有的行为(请参阅附图,以查看我所指的窗口)。 当用户按下ESC键/点击另一个窗口/点击滚动条等时,我希望以与此窗口相同的方式实现编辑/取消。 我努力解决这个问题: 使用谷歌,我发现很少的例子,但它们已经陈旧,并没有解决所有相关案例,所以这就是我在这里寻求帮助的原因。 但是,我能够发现我必须考虑的事件之一是EN_KILLFOCUS ,用户按ESC / ENTER键的情况和用户点击编辑控件以外的其他情况。 编辑: 我设法处理ESC和ENTER键,以及用户点击另一个兄弟控件或用ALT + TAB切换窗口时的情况。 我已经更新了SSCCE的相关更改 题: 为了实现网格的默认行为(如果有一个用于Windows应用程序),我必须处理哪些消息/事件? 你还能指出我应该在哪里编辑子项并隐藏编辑控件,我应该在哪里隐藏编辑控件? 编辑: 我唯一的问题是当用户点击列表视图滚动条或主窗口的背景时处理这种情况。 我只是不知道如何处理这个,并希望得到我能得到的所有帮助。 相关信息: 我在Windows 7 x86上使用Visual Studio 2013; 我正在使用原始WinAPI在C ++中开发; SSCCE: 以下是我到目前为止的解决方案。 我试图彻底评论它,但如果需要更多信息,请留言,我将更新我的post。 #include #include // various listview macros etc #include #include // swprintf_s() // enable Visual […]