| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 756 人关注过本帖
标题:ListView控件使用问题
只看楼主 加入收藏
郭云00
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2023-2-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
ListView控件使用问题
ListView用鼠标选择一个项,然后可以进入编辑状态。然后创建一个新的项,却无法进入编辑状态,问1.需要做那些设置,2.如何给这个项设置焦点。
搜索更多相关主题的帖子: 状态 控件 焦点 ListView 编辑 
2023-02-21 16:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
你这个 ListView控件 是什么?
即使是MFC中的,也有 ListBox改样式的 ListView,以及后来增添的类似属性列表式的 ListView。
沒代码,神仙都猜不出你错在哪里。
2023-02-21 19:51
郭云00
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2023-2-21
收藏
得分:0 
Listview派生自listbox控件。一个最重要的区别是listview默认使用扩展选择模式。listview还添加了一个名为view的属性,它使您能够以比自定义项目面板更丰富的方式自定义视图。
2023-02-22 11:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
云里雾里的看不懂,MFC 包含 CListBox、CListCtrl、CVSListBox 等等,我不知道你说的是哪个?

然后,我搜索“Listview派生自listbox控件。一个最重要的区别是listview默认使用扩展选择模式。listview还添加了一个名为view的属性”,原来是 WPF 呀!
这里是 C/C++板块,WPF等与C++毫无关系,WPF属于微软.Net的内容
2023-02-22 15:49
郭云00
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2023-2-21
收藏
得分:0 
程序入口时做了
    icc.dwSize = sizeof (INITCOMMONCONTROLSEX);
    icc.dwICC = ICC_LISTVIEW_CLASSES | ICC_TREEVIEW_CLASSES | ICC_TAB_CLASSES | ICC_UPDOWN_CLASS | ICC_BAR_CLASSES | ICC_COOL_CLASSES;
    InitCommonControlsEx (&icc);
初始化时做了
    hList = CreateWindowEx (WS_EX_CLIENTEDGE, ListViewClass, NULL, WS_CHILD | WS_VISIBLE | LVS_SHAREIMAGELISTS | LVS_EDITLABELS, 0, 0, 0, 0, hWnd, NULL, hInst, NULL);
然后,以下是对ListView的原有的项做更名操作(其他操作没有列出)
    switch (Msg)
    {
        case IDN_COMMAND)
            switch (LOWORD(wParam))
            {
                case IDM_RENAME:
                    lvi.mask = LVIF_PARAM;
                    dwCnt = SendMessage (hList, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
                    SendMessage (hList, LVM_GETITEMTEXT, (WPARAM)dwCnt, (LPARAM)&lvi);
                    SendMessage (v, LVM_EDITLABEL, lvi.iItem, 0);
                    break;
            }
            break
    }
    结果如期望所得,进入项目名称的编辑状态。
但是,对于新加入的项目操作
    switch (Msg)
    {
        case IDN_COMMAND)
            switch (LOWORD(wParam))
            {
                case IDM_CREATE:
                    dwCnt = SendMessage (hList, LVM_GETITEMCOUNT, 0, 0);
                    lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
                    lvi.iItem = dwCnt;
                    lvi.iSubItem = 0;
                    lvi.lParam = 1;
                    lvi.cchTextMax = 18;
                    lvi.iImage = 1;
                    lvi.pszText = FileName;
                    lvi.state = LVIS_SELECTED | LVIS_FOCUSED;
                    lvi.stateMask = -1;
                    if ((dwCnt = SendMessage (hList, LVM_INSERTITEM, 0, (LPARAM)&lvi)) != -1)
                    SendMessage (hList, LVM_EDITLABEL, dwCnt, 0);
                    break;
            }
            break
    }
    项目是产生了,但进不了编辑状态。
2023-02-22 22:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
首先是提问,既然用的是 SysListView32 就说是 SysListView32 ,而不要说成含糊不清的 ListView。
其次,当别人问你是什么 ListView 时,不要去网上抄袭一段毫无关系的文字来糊弄别人
最重要的是要给出代码,完整的代码,你在5楼的代码就不完整。不完整就需要猜,未必能100%猜准确;不完整就需要花费时间去补,这种故意浪费别人时间的行为是不道德的。  

你的代码是没问题的,但是这个逻辑...(我是想不通,也懒得去想了)...
你试试把你的
                    if ((dwCnt = SendMessage (hList, LVM_INSERTITEM, 0, (LPARAM)&lvi)) != -1)
                    SendMessage (hList, LVM_EDITLABEL, dwCnt, 0);
改为
                    if ((dwCnt = SendMessage (hList, LVM_INSERTITEM, 0, (LPARAM)&lvi)) != -1)
                    {
                        SetFocus( hList );
                        SendMessage (hList, LVM_EDITLABEL, dwCnt, 0);
                    }
2023-02-23 15:45
郭云00
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2023-2-21
收藏
得分:0 
谢谢楼上的回答。可是有些观点我不能苟同,ListView是这个控件的通用称呼,至于SysListView32是这个控件创建窗口时的名称。而且为了回答ListView和ListBox的区别,才复制了这么一段解释,并不想浪费大家的时间,如确实起到了浪费的效果,在这里给大家收对不起。
您提供的建议没有用,那只是对窗口设了焦点,并没有对其中的项目设焦点,再说我也试过了。
至于没有提供完整代码的问题,主要是代码很长,牵实到大量与本问题无关的操作,阅读全部与本问题无关的代码,才是浪费时间。我认为这里提供的代码应该已经讲清楚了,凡是用过ListView控件的,一看就明白的。
2023-02-23 17:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
其它的你听得进去就听,听不进去就算了。

我所指的“完整代码”,是指别人拷贝之后 无须增减 就能编译调试的代码,不应该包含与题目无关的代码。无关的代码你应该删除掉再贴出来。

您提供的建议没有用,那只是对窗口设了焦点,并没有对其中的项目设焦点,再说我也试过了
那段代码红色代码明明是在对控件设焦点,你没提供窗口句柄给我,我怎么有能力对窗口设焦点?
假如你没说谎,那在我这儿有效,在你那儿没用,更是进一步证明了“贴完整代码”的必要性。
2023-02-23 19:42
快速回复:ListView控件使用问题
数据加载中...
 
   



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

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