Mfc 在CListBox的非项目区域中单击鼠标
我想知道用户何时在CListBox中单击,但在任何项目之外。我希望在包含对话框中得到一些通知,以便通过Mfc 在CListBox的非项目区域中单击鼠标,mfc,clistbox,Mfc,Clistbox,我想知道用户何时在CListBox中单击,但在任何项目之外。我希望在包含对话框中得到一些通知,以便通过mylistbox.ItemFromPoint(标志,外部)处理该点以确定它是否在项目内部。但在列表框中单击似乎不会导致此类事件。我应该在父对话框中查找什么事件,需要设置什么来启用它?我真的不在乎它是点击还是鼠标向下 我这样做的目的是,如果用户使用mylistbox.SetCurSel(-1)在任何项目之外单击,则取消选择所有项目 附录:这是@mercurydime建议实现的类的完整代码 (标
mylistbox.ItemFromPoint(标志,外部)
处理该点以确定它是否在项目内部。但在列表框中单击似乎不会导致此类事件。我应该在父对话框中查找什么事件,需要设置什么来启用它?我真的不在乎它是点击还是鼠标向下
我这样做的目的是,如果用户使用mylistbox.SetCurSel(-1)
在任何项目之外单击,则取消选择所有项目
附录:这是@mercurydime建议实现的类的完整代码 (标题) (正文) 1) 使用类向导创建从CListBox派生的类:
- Ctrl+Shift+X
- 单击添加类按钮上的向下箭头
- 选择MFC类菜单项
- 确保基类设置为CListBox
- Ctrl+Shift+X
- 单击消息选项卡
- 双击WM_LBUTTONDOWN
void CMyListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
BOOL bOutside = TRUE;
UINT uItem = ItemFromPoint(point, bOutside);
if (bOutside)
{
// do whatever
}
CListBox::OnLButtonDown(nFlags, point);
}
好吧,我接受这个方法。我希望在不子类化控件的情况下从父级进行操作,但是既然我已经子类化了CStatic和Cmbobox,为什么不呢?这将让我以后做其他调整+我在原始问题中添加了实现类的完整代码。再次感谢。
#include "stdafx.h"
#include "CMyListBox.h"
CMyListBox::CMyListBox()
: CListBox(), m_allow_deselect( false )
{
}
void CMyListBox::allow_deselect( bool allow )
{
m_allow_deselect = allow;
}
BEGIN_MESSAGE_MAP( CMyListBox, CListBox )
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CMyListBox::OnLButtonDown( UINT flags, CPoint point )
{
if( m_allow_deselect )
{
BOOL outside( TRUE );
ItemFromPoint( point, outside );
if( outside )
SetCurSel( -1 );
}
CListBox::OnLButtonDown( flags, point );
}
void CMyListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
BOOL bOutside = TRUE;
UINT uItem = ItemFromPoint(point, bOutside);
if (bOutside)
{
// do whatever
}
CListBox::OnLButtonDown(nFlags, point);
}