CListCtrl CheckBox编辑

今晚又失眠 2012-03-17 03:20:59
我现在的程序是去读取一个数据库,将相应的服务器信息读到listctrl中。数据库中有两个字段:一个是bCheck, 一个是nResult

listctrl的风格为:
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也没反应的那种.

...全文
197 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
今晚又失眠 2012-03-20
  • 打赏
  • 举报
回复
参照4楼给出的方法,当点击某些指定的checkbox的时候,就给出提示,不让用户改变这一行的状态

结帖了
今晚又失眠 2012-03-20
  • 打赏
  • 举报
回复
参照4楼给出的方法,当点击某些指定的checkbox的时候,就给出提示,不让用户改变这一行的状态

结帖了
schlafenhamster 2012-03-18
  • 打赏
  • 举报
回复
点checkbox也没反应的方法如下:
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
}
Eleven 2012-03-17
  • 打赏
  • 举报
回复
你得自绘CListCtrl控件了,重写DrawItem虚函数。为每个item项关联一个enable/disable标记。
schlafenhamster 2012-03-17
  • 打赏
  • 举报
回复
void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
// 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时让这项变灰。。。
lang14 2012-03-17
  • 打赏
  • 举报
回复
把数据从数据库中取出,在判断,不过在listctrl中我倒没做过使某一行不可用,你上网找找资料看有没有

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧