之前写的复选框,只能双击才选中,原因是复选框的设置状态m_list_log.SetCheck,设置False时是选中,True时是非选中。通过判断点击点的位置,来判断是否点在复选框上。
UINT nFlag;
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list_log.ScreenToClient(&point);
m_list_log.HitTest(point, &nFlag);
if(nFlag == LVHT_ONITEMSTATEICON)
以下是详细代码:
void CLogManage::OnNMClickListLog(NMHDR *pNMHDR, LRESULT *pResult){
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
int nItem = pNMItemActivate->iItem;
if (nItem != -1)
{
bool curState = m_list_log.GetCheck(nItem);
UINT nFlag;
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list_log.ScreenToClient(&point);
m_list_log.HitTest(point, &nFlag);
if(nFlag == LVHT_ONITEMSTATEICON)
{
m_list_log.SetCheck(nItem,curState);
}
else
{
m_list_log.SetCheck(nItem,!curState);
}
}
*pResult = 0;
}
之前写的复选框,只能双击才选中,原因是复选框的设置状态m_list_log.SetCheck,设置False时是选中,True时是非选中。通过判断点击点的位置,来判断是否点在复选框上。
UINT nFlag;
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list_log.ScreenToClient(&point);
m_list_log.HitTest(point, &nFlag);
if(nFlag == LVHT_ONITEMSTATEICON)
以下是详细代码:
void CLogManage::OnNMClickListLog(NMHDR *pNMHDR, LRESULT *pResult){
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
int nItem = pNMItemActivate->iItem;
if (nItem != -1)
{
bool curState = m_list_log.GetCheck(nItem);
UINT nFlag;
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list_log.ScreenToClient(&point);
m_list_log.HitTest(point, &nFlag);
if(nFlag == LVHT_ONITEMSTATEICON)
{
m_list_log.SetCheck(nItem,curState);
}
else
{
m_list_log.SetCheck(nItem,!curState);
}
}
*pResult = 0;
}