我现在的程序是去读取一个数据库,将相应的服务器信息读到listctrl中。数据库中有两个字段:一个是bCheck, 一个是nResultlistctrl的风格为:
m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);bCheck 为1时,在listctrl中的这一行记录前的CheckBox就勾上。nResult 为1表示升级成功。为0时表示升级失败。现在想实现的是:当bCheck = 1即CheckBox勾上了,且nResult = 1 即升级成功,这一行的为灰色的,不能编辑,点checkbox也没反应的那种.
m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);bCheck 为1时,在listctrl中的这一行记录前的CheckBox就勾上。nResult 为1表示升级成功。为0时表示升级失败。现在想实现的是:当bCheck = 1即CheckBox勾上了,且nResult = 1 即升级成功,这一行的为灰色的,不能编辑,点checkbox也没反应的那种.
{
// TODO: Add your message handler code here and/or call default
UINT nFlag;
int nItem = HitTest(point, &nFlag);
if (nFlag == LVHT_ONITEMSTATEICON)
{
afxDump << nItem << " checkBox\n";
}
//
CListCtrl::OnMouseMove(nFlags, point);
}
以上代码可以检测鼠标在checkbox上。检测是不是checked,是时设个标记。
customdraw时让这项变灰
void CMyListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
DWORD dwPos = GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos) );
ScreenToClient(&point);
UINT nFlag;
int nItem = HitTest(point, &nFlag);
//判断是否点在checkbox上
if (nFlag == LVHT_ONITEMSTATEICON)
{
if(nItem==1)
{
*pResult = 1;// skip default
return;
}
}
*pResult = 0;// do default
}