我想知道用户何时点击了CListBox,但是在任何项目之外。我希望在包含对话框中获得一些通知,这样我就可以通过mylistbox.ItemFromPoint(flags,outside)
处理该点以确定它是否在项目中。但是列表框中的点击似乎不会导致此类事件。我应该在父对话框中查找哪些事件,以及需要设置哪些事件才能启用它?我真的不在乎是点击还是只是嘲笑。
我的目的是,如果用户点击任何项目之外的mylistbox.SetCurSel(-1)
,则取消选中所有项目。
附录:这是按照@mercurydime的建议实现的完整代码。
(标题)
#ifndef INCLUDE_CMYLISTBOX_H
#define INCLUDE_CMYLISTBOX_H
class CMyListBox : public CListBox
{
public:
CMyListBox();
void allow_deselect( bool allow = true );
protected:
bool m_allow_deselect;
afx_msg void OnLButtonDown( UINT flags, CPoint point );
DECLARE_MESSAGE_MAP()
};
#endif // INCLUDE_CMYLISTBOX_H
(身体)
#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 );
}
答案 0 :(得分:1)
1)使用类向导创建一个派生自CListBox的类:
CTRL + SHIFT + X
点击添加课程按钮
选择 MFC类菜单项
确保基类设置为 CListBox
2)为WM_LBUTTONDOWN添加消息处理程序
CTRL + SHIFT + X
点击消息标签
双击 WM_LBUTTONDOWN
3)在处理程序
中添加ItemFromPoint代码<soap12:address location="http://localhost:8080/dataRecovery/services"/>