MFC) 使 TreeCtrl 失去其项目焦点
MFC) Making TreeCtrl loses its item focus
我已经使用TVN_SELCHANGED消息来找出用户在项目树(菜单)中选择的内容。
但是,如果用户不断单击同一项目,则不会出现该消息。
我希望 treeCtrl 丢失其发生TVN_SELCHANGED的项目选择。(换句话说,即使用户连续单击同一项目,我也想使事件发生)
我该怎么做?
TVN_SELCHANGE无济于事。不会更改任何内容,因此不会发送通知。即使这对我来说也没有意义。如果用户单击已选择的项目,UI 应该怎么做?无。。。我猜。
如果你想处理这个问题,你必须自己做。
- 您可以使用WM_LBUTTONDOWN或NM_CLICK来跟踪点击。
- 而不是使用TVM_HITTEST来检查用户单击的内容。
- 现在您可以比较当前选择(TVM_GETNEXTITEM并检查TVGN_CARET)
- 比较新旧选择。
- 毕竟,将单击传递给默认处理程序。
TreeCtrl 在选择项目时收到通知的唯一时间是:TVN_SELCHANGE。如果选择相同,这将无济于事。但是还有另一种方法可以得到通知。在使用 TreeCtrl 的对话框类中添加预翻译消息命令,并添加下面编写的代码。
//---------------------------------------------------------------------------
BOOL MyDlgClass::PreTranslateMessage(MSG* pMsg)
{
UINT msgValue = pMsg->message;
//here I have compared L button down event, you can use any
//mouse/keyboard event that you want to compare.
if (msgValue == WM_LBUTTONDOWN)
{
CPoint point;
point.x = (int)(short)LOWORD(pMsg->lParam);
point.y = (int)(short)HIWORD(pMsg->lParam);
OnLButtonDown(pMsg->message, point);
}
}
void MyDlgClass::OnLButtonDown(UINT nType, CPoint point)
{
UINT uFlags;
HTREEITEM hItem = m_treeCtrl.HitTest(point, &uFlags);
if ((hItem != NULL) && (TVHT_ONITEMBUTTON & uFlags))
{
return;
}
//TVHT_ONITEMBUTTON detects if user has clicked + or - button of tree
//view.
//Add code to perform your operations on hItem.
}
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 如何维护资源管理器项目视图中当前可见的项目列表
- MFC) 使 TreeCtrl 失去其项目焦点
- 如何以编程方式设置QMenu项目的焦点