鱼C论坛

 找回密码
 立即注册
查看: 645|回复: 14

[已解决]CListCtrl--GetColumn

[复制链接]
发表于 2023-4-30 16:04:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

                               
登录/注册后可看大图

        LVCOLUMN Column = {0};
        Column.mask = LVIF_TEXT;
        TCHAR  ch[256] = {0};
        Column.cchTextMax = 256;
        Column.pszText = ch;

        BOOL b6= mylist4.GetColumn(1,&Column);//获取列标题
        /*
        参数1:int nCol 列号
        参数2:LVCOLUMN * pColumn  LVCOLUMN 结构的地址
        返回值:如果成功,则不为零,否则为零
        */

        CString str1 = Column.pszText;
        OutputDebugString(str1);


我的问题:b6返回1,说明GetColumn函数是成功的,可是str1返回值是""    ??
最佳答案
2023-4-30 16:05:32
从您的代码片段来看,您试图获取CListCtrl对象mylist4的第二列的标题。GetColumn()方法的返回值b6为1,表明调用是成功的。然而,您发现返回的标题字符串str1为空。

首先,请确保您已正确设置了该列的标题。在添加或修改列标题时,请检查以下代码:
LVCOLUMN lvColumn;
lvColumn.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
lvColumn.pszText = _T("Column Title");
lvColumn.cx = 100; // Column width
lvColumn.fmt = LVCFMT_LEFT; // Column format, e.g. left-aligned

// To add a new column
int result = mylist4.InsertColumn(1, &lvColumn);

// Or to modify an existing column
mylist4.SetColumn(1, &lvColumn);

如果您已设置列标题,请检查以下可能的原因:

1. 检查列索引。请注意,CListCtrl的列索引是从0开始的。您在GetColumn()中使用的列索引是1,确保这是您要访问的列。

2. 检查列是否存在。请确保您已将该列添加到CListCtrl中。如果尝试访问不存在的列,GetColumn()可能会返回错误的结果。

3. 确保在调用GetColumn()之前已初始化CListCtrl对象。例如,如果在对话框中使用CListCtrl,请确保在OnInitDialog()中初始化了CListCtrl对象。

如果以上建议都无法解决问题,请考虑提供更多关于您的代码和项目的详细信息,以便我能更好地帮助您解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-30 16:05:32 | 显示全部楼层    本楼为最佳答案   
从您的代码片段来看,您试图获取CListCtrl对象mylist4的第二列的标题。GetColumn()方法的返回值b6为1,表明调用是成功的。然而,您发现返回的标题字符串str1为空。

首先,请确保您已正确设置了该列的标题。在添加或修改列标题时,请检查以下代码:
LVCOLUMN lvColumn;
lvColumn.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
lvColumn.pszText = _T("Column Title");
lvColumn.cx = 100; // Column width
lvColumn.fmt = LVCFMT_LEFT; // Column format, e.g. left-aligned

// To add a new column
int result = mylist4.InsertColumn(1, &lvColumn);

// Or to modify an existing column
mylist4.SetColumn(1, &lvColumn);

如果您已设置列标题,请检查以下可能的原因:

1. 检查列索引。请注意,CListCtrl的列索引是从0开始的。您在GetColumn()中使用的列索引是1,确保这是您要访问的列。

2. 检查列是否存在。请确保您已将该列添加到CListCtrl中。如果尝试访问不存在的列,GetColumn()可能会返回错误的结果。

3. 确保在调用GetColumn()之前已初始化CListCtrl对象。例如,如果在对话框中使用CListCtrl,请确保在OnInitDialog()中初始化了CListCtrl对象。

如果以上建议都无法解决问题,请考虑提供更多关于您的代码和项目的详细信息,以便我能更好地帮助您解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-30 16:06:53 | 显示全部楼层
isdkz 发表于 2023-4-30 16:05
从您的代码片段来看,您试图获取CListCtrl对象mylist4的第二列的标题。GetColumn()方法的返回值b6为1,表明 ...

you are so fast
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-30 16:07:16 | 显示全部楼层

you are so fast too
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-30 16:09:07 | 显示全部楼层

it is why you have so many best answers
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-30 16:14:23 | 显示全部楼层
int i= mylist4.InsertColumn(0, _T("姓名"), LVCFMT_CENTER,100,-1);//在报告模式下插入一列
        i = mylist4.InsertColumn(1, _T("物理"), LVCFMT_CENTER, 70, -1);
        i = mylist4.InsertColumn(2, _T("化学"), LVCFMT_CENTER, 70, -1);

我已经插入列标题    可以看图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-30 16:41:15 | 显示全部楼层
可是  str1返回值还是 ""
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-30 16:55:41 | 显示全部楼层
lm68140318 发表于 2023-4-30 16:41
可是  str1返回值还是 ""

根据您提供的代码片段,您已成功在报告模式下为  CListCtrl  插入了列标题。然而,您提到的  str1  返回值为空字符串  "" 。在这个情况下,我们需要更多信息来判断问题所在。但是,您可以检查以下几点:

1. 确保您已正确插入项目和子项目(行数据)到  CListCtrl  中,如前面所示:
// 添加项目
int nItem = mylist4.InsertItem(LVIF_TEXT, 0, _T("Item Text"), 0, 0, 0, 0);
// 添加子项目
mylist4.SetItemText(nItem, 1, _T("Subitem Text"));

2. 如果您希望获取  CListCtrl  中的文本信息,请使用  GetItemText  函数。例如,如果您想获取第一个项目(行)的 "物理" 列的文本,请使用以下代码:
CString str1 = mylist4.GetItemText(0, 1); // 索引从 0 开始

这里, 0  表示项目(行)索引, 1  表示子项目(列)索引。返回值  str1  应包含您所需的文本信息。

请确保您在尝试获取项目和子项目文本之前已正确插入它们。如果问题仍然存在,请提供更多有关您的代码和环境的详细信息,以便我们可以更好地帮助您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-30 17:00:50 | 显示全部楼层
CString str1 = mylist4.GetItemText(0, 1); // 索引从 0 开始

这种方式不能获取 标题啊  ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-30 17:02:06 | 显示全部楼层
isdkz   请加我QQ    我传你代码   估计你看一下就明白了   我的QQ  389384675  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-30 17:11:00 | 显示全部楼层
我把放在百度网盘了   请大佬们下载看一下   
链接:https://pan.baidu.com/s/1Gm_Nx0BT4z20vAA5g9v2MA
提取码:6666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-1 09:24:34 | 显示全部楼层
根据你提供的代码,可能的问题是你没有正确地将获取到的列标题复制到字符串 ch 中,从而导致 Column.pszText 是一个空字符串。你可以尝试在获取列标题后使用 memcpy 函数将 Column.pszText 复制到一个 TCHAR 类型的字符串中,例如:
LVCOLUMN Column = {0};
Column.mask = LVIF_TEXT;
TCHAR ch[256] = {0};
Column.cchTextMax = 256;
Column.pszText = ch;

BOOL b6= mylist4.GetColumn(1,&Column);//获取列标题

CString str1 = ch;
OutputDebugString(str1);
这里将 Column.pszText 赋值给了 ch,然后将 ch 转换为 CString 类型的字符串。这样,你就可以在调试器中查看获取到的列标题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-1 18:55:10 | 显示全部楼层

                               
登录/注册后可看大图


问题在于 ch本身就是空   LVCOLUMN没有拿到标题 ??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-1 21:52:47 | 显示全部楼层
Col.mask = LVIF_TEXT;  是错误的
改成  Col.mask = LVCF_TEXT;    就对了
LVIF_TEXT;和  LVCF_TEXT;    有什么区别  ??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-1 21:58:34 | 显示全部楼层
LVIF_TEXT表示项的文本
LVCF_TEXT表示标题文本

对不 ??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-4 02:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表