在我的基于MFC对话框的应用程序中,有一个CListCtrl。当用户点击列表控件中的空项时,我需要禁用按钮。我使用了NM_CLICK消息并实现了此功能。但是,如果用户将鼠标拖出列表控制区域并释放鼠标,则不起作用。我发现只有在接收到按钮启动消息时才会调用NM_CLICK的原因。是否有其他解决方案。检测单击列表控件中的空白项目
-1
A
回答
0
我找到了问题的解决方案。如果用户使用鼠标左键拖拽鼠标,即LVN_BEGINDRAG,则会出现一条消息。通过在OnBeginDrag函数中处理此消息,我更新按钮状态。只要用户尝试拖动鼠标,该按钮就会更新。该代码是如下: 在头部添加
afx_msg void OnBeginDrag(NMHDR* pNMHDR, LRESULT *pResult);
在实施添加消息映射和相应的功能:
BEGIN_MESSAGE_MAP(..)
ON_NOTIFY(LVN_BEGINDRAG,IDC_LIST1,OnBeginDrag)
END_MESSAGE_MAP
OnBeginDrag(....)
{
Updatebutton();
}
它解决了问题。谢谢大家的支持。
0
有一些可行的选择。 在父对话框中,MouseUp Handler函数可以用于此。
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
通过使用点,您可以检查鼠标释放是否发生CListCtrl。 如果是,您只需禁用该按钮。
此外,WindowFromPoint可以是另一种选择。
static CWnd* PASCAL WindowFromPoint(POINT point);
在诸如OnMouseMove中,如果使用此函数,则可以检查窗口是否被鼠标指向。
0
实现一个LVN_ITEMCHANGED处理程序,并在该处理程序中一旦selected item count为零就禁用该按钮。
1
但是,如果用户将鼠标拖出列表控制区域并释放鼠标,这不起作用。
这完全是由设计,你不应该想要这些点击“计数”。这是用户在点击过程中改变主意的唯一方式。它的工作原理是这样的:
- 开始到列表框控件对象(或空白区域)上单击
- 改变主意
- 尽管仍然按住鼠标按钮(即提交之前你单击),将鼠标指针拖到控件边界之外
- Think:Whew!这是一个密切的呼叫!
你会发现,在Windows中,动作永远不会发生,直到鼠标按钮发布(通常被称为“的MouseUp”)。如果这不被支持,那么用户就无法在任何用户界面的关键功能之前提前撤出操作。
相关问题
- 1. 我想检测一个项目双击WinForms列表框控件。 [如何处理点击空白区域?]
- 2. 检测列表框中的“空白”点击
- 3. 如何检测鼠标单击外部列表视图项目?
- 4. HTMLAgilityPack - 检测空白表?
- 5. 简单列表项检查点击检查多个项目
- 6. WPF禁用或检测CardView空白空间单击?
- 7. 检测鼠标单击控件数组
- 8. C#项目不在列表中,且不为空或空白
- 9. JQuery检查空的列表框项目
- 10. 删除列表框中的空白项
- 11. 如何在不影响其他列表视图项目中的控件的情况下单击列表视图项目中的单个控件?
- 12. 遍历列表并单击Robotium中的列表项目
- 13. 检测点击c中的控件#
- 14. 检测鼠标单击列表框项目与焦点设置为False
- 15. 如何检测Pull To Refresh Grid View中的空白点击?
- 16. VB.NET当在空白区域中单击鼠标时取消选择列表框中的项目
- 17. 检测空白用正则表达式
- 18. Espresso - 单击列表查看项目
- 19. 导航到单击列表组项目
- 20. 单击列表项目应显示与该列表项目相关的表格
- 21. 检测项目是否是列表中的最后一项
- 22. 从列表视图检索项目单击“_ID”值
- 23. 如何在Symbian中创建检查列表项目控件
- 24. 列表视图控件中的项目和子项目
- 25. 检测文本框中的空白
- 26. 检测模板中的空表单
- 27. php空白$ _GET []检测
- 28. 检测空白文本框
- 29. 检测单击在TableViewController上的CustomCell项目的索引
- 30. 单击空白区域
我同意你的看法,但我们正在谈论编程,当然程序员不能完全预测用户的想法。但需要一个解决方案。 – CodeRider 2013-04-05 09:24:55
这是一个标准的Windows设计实践。您将在整个操作系统和其他兼容程序中看到它。它不需要任何介意。试图绕过这个重要的用户界面特性只会让你很多愤怒的客户,并导致很多不可维护的代码。 – 2013-04-05 23:07:20