BEGIN_MESSAGE_MAP(CHexCtrl, CListCtrl)
//{{AFX_MSG_MAP(CHexCtrl)
ON_NOTIFY_REFLECT(LVN_ITEMCHANGING, OnItemchanging)
ON_WM_ERASEBKGND()
ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void CHexCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
m_bBeginSel = FALSE;
ReleaseCapture();

*pResult = 0;
}void CHexCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
m_bBeginSel = TRUE;

CWnd* pWnd = SetCapture();

LVHITTESTINFO  lvhit;
lvhit.pt = point;
int item = SubItemHitTest(&lvhit);

if (item != -1 && (lvhit.flags & LVHT_ONITEM))
{
int subitem = lvhit.iSubItem;
if (subitem > 0 && subitem < 17)
{
m_nBeginItem = MAKELONG(subitem, item);
m_nEndItem = m_nBeginItem;
}
}

Invalidate();
CListCtrl::OnLButtonDown(nFlags, point);
}void CHexCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CListCtrl::OnMouseMove(nFlags, point); if (m_bBeginSel)
{
LVHITTESTINFO  lvhit;
lvhit.pt = point;
int item = SubItemHitTest(&lvhit);
if (item != -1 && (lvhit.flags & LVHT_ONITEM))
{
int subItem = lvhit.iSubItem;
int id = MAKELONG(subItem, item);
if (id == m_nEndItem)
return;

if (subItem > 0 && subItem < 17)
{
m_nEndItem = id;

//TRACE("%08X~%08X", min(m_nBeginItem,m_nEndItem), max(m_nBeginItem,m_nEndItem));

CRect  rcSubItem;
GetItemRect(item, rcSubItem, LVIR_BOUNDS);

//InvalidateRect(&rcSubItem);
Invalidate();
}
}
}
}void CHexCtrl::OnLButtonUp(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
m_bBeginSel = FALSE;
ReleaseCapture();

CListCtrl::OnLButtonUp(nFlags, point);
}
class CHexCtrl : public CListCtrl以上代码发现,当鼠标按下,按出List,放开鼠标,OnLButtonUp并不响应,何解?
还有发现当鼠标快速点击,OnLButtonUp也不响应,而响应了OnClick,这又何解?