标题:关于ListView控件的使用
只看楼主
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
结帖率:98.26%
已结贴  问题点数:100 回复次数:8 
关于ListView控件的使用
最近在做组长分配的一个项目,需要用到ListView控件的一些高级用法,上网找了这方面的资料,也没有适合的,所以来问问大家一下,希望可以得到大家们的帮助,我把问题描述一下:

我为ListView控件添加了复选框,我现在想要点击某一行时,如果该行上的数据满足某个条件时,就把该行上的复选框选中,否则不选中,
并且当我点击某行时不让该行被加亮,只有复选框选中与不选中之分!


希望大家可以帮忙一下啊!感激不尽啊!
搜索更多相关主题的帖子: 上网 项目 资料 
2012-02-17 19:25
慕羿
Rank: 4
等 级:业余侠客
帖 子:40
专家分:206
注 册:2012-2-16
得分:0 
什么环境呢?

而且,这个好像不是C的问题。。。
2012-02-17 19:33
慕羿
Rank: 4
等 级:业余侠客
帖 子:40
专家分:206
注 册:2012-2-16
得分:80 
如果是VS的话,我想可以这么做:

设置ListView为不可多选;
在Click事件中获取SelectedItems属性,从而得到你需要判断的条件参数;
判断后设置SelectedItems指定的项目中的复选框。

不加亮显示没想出办法来。

[ 本帖最后由 慕羿 于 2012-2-17 20:00 编辑 ]
2012-02-17 19:55
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:0 
你说的这个我也知道,可是代码不知道该怎么去实现

愿用余生致力编程
2012-02-17 19:57
慕羿
Rank: 4
等 级:业余侠客
帖 子:40
专家分:206
注 册:2012-2-16
得分:0 
呃,我现在没环境没法试验。
2012-02-17 20:00
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:10 
一定要用LISYVIEW?

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2012-02-17 20:46
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:0 
想了一晚上,换了另一种方法来实现我所想要的功能,把问题描述一下:
鼠标点击某一行时,仍然可以加亮该行,而是我去针对复选框来操作,通过代码知道鼠标点击了复选框,这样就可以获取该行的项目号,然后取得该行上的内容,判断是否满足条件,如果不满足,则复选框不会被选中,否则会被选中,代码如下:

程序代码:
BOOL Main_OnNotify(HWND hDlg, int id, LPNMHDR pnm) 
{ 
    switch(id) 
    { 
        case IDC_LIST:
            HWND hListView = GetDlgItem(hDlg, id);
            switch(pnm->code)
            {
                case NM_CLICK:
                case NM_DBLCLK:
                case NM_RCLICK:
                    POINT point;
                    GetCursorPos(&point); //获取当前鼠标的位置坐标,注意GetCursorPos获取的是相对于屏幕坐标,还需要使用ScreenToClient函数将其转换为客户区坐标
                    ScreenToClient(hListView, &point);

                    LVHITTESTINFO lvinfo;
                    lvinfo.pt = point;
                    lvinfo.flags = LVHT_ABOVE;
                    ListView_HitTest(hListView, &lvinfo);
                    if(LVHT_ONITEMSTATEICON == lvinfo.flags) //如果点击在复选框上
                    {
                        if()    //判断条件
                        ListView_SetItemState(hListView, lvinfo.iItem, 0, LVIS_STATEIMAGEMASK); //不满足条件,则复选框不被选中
                    }
                    break;
            }
            break;
    }
    return FALSE; 
}  


愿用余生致力编程
2012-02-18 14:02
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:10 
哇塞 你居然用SDK写....

不能用MFC写么?
VC对于ListCtrl 有个经典完善的源码库 ClistCtrlX 类
2012-02-18 14:55
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:0 
回复 8楼 hahayezhe
没有学过MFC啊,我写的这段程序还是参看MFC呢,来公司这段时间,每周都会做组长分配的一个项目,作为考察能力,时间比较紧,所以就只好用自己最熟悉的了!

愿用余生致力编程
2012-02-18 15:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-361089-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032884 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved