lm68140318 发表于 2023-4-30 16:04:08

CListCtrl--GetColumn

https://i.postimg.cc/yWCN7D6H/q1.png


        LVCOLUMN Column = {0};
        Column.mask = LVIF_TEXT;
        TCHARch = {0};
        Column.cchTextMax = 256;
        Column.pszText = ch;

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

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


我的问题:b6返回1,说明GetColumn函数是成功的,可是str1返回值是""    ??

isdkz 发表于 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对象。

如果以上建议都无法解决问题,请考虑提供更多关于您的代码和项目的详细信息,以便我能更好地帮助您解决问题。

歌者文明清理员 发表于 2023-4-30 16:06:53

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

you are so fast

isdkz 发表于 2023-4-30 16:07:16

歌者文明清理员 发表于 2023-4-30 16:06
you are so fast

you are so fast too

歌者文明清理员 发表于 2023-4-30 16:09:07

isdkz 发表于 2023-4-30 16:07
you are so fast too

it is why you have so many best answers

lm68140318 发表于 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);

我已经插入列标题    可以看图

lm68140318 发表于 2023-4-30 16:41:15

可是str1返回值还是 ""

isdkz 发表于 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应包含您所需的文本信息。

请确保您在尝试获取项目和子项目文本之前已正确插入它们。如果问题仍然存在,请提供更多有关您的代码和环境的详细信息,以便我们可以更好地帮助您。

lm68140318 发表于 2023-4-30 17:00:50

CString str1 = mylist4.GetItemText(0, 1); // 索引从 0 开始

这种方式不能获取 标题啊?

lm68140318 发表于 2023-4-30 17:02:06

isdkz   请加我QQ    我传你代码   估计你看一下就明白了   我的QQ389384675

lm68140318 发表于 2023-4-30 17:11:00

我把放在百度网盘了   请大佬们下载看一下   
链接:https://pan.baidu.com/s/1Gm_Nx0BT4z20vAA5g9v2MA
提取码:6666

陶远航 发表于 2023-5-1 09:24:34

根据你提供的代码,可能的问题是你没有正确地将获取到的列标题复制到字符串 ch 中,从而导致 Column.pszText 是一个空字符串。你可以尝试在获取列标题后使用 memcpy 函数将 Column.pszText 复制到一个 TCHAR 类型的字符串中,例如:
LVCOLUMN Column = {0};
Column.mask = LVIF_TEXT;
TCHAR ch = {0};
Column.cchTextMax = 256;
Column.pszText = ch;

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

CString str1 = ch;
OutputDebugString(str1);
这里将 Column.pszText 赋值给了 ch,然后将 ch 转换为 CString 类型的字符串。这样,你就可以在调试器中查看获取到的列标题了。

lm68140318 发表于 2023-5-1 18:55:10

LVCOLUMN

问题在于 ch本身就是空   LVCOLUMN没有拿到标题 ??

lm68140318 发表于 2023-5-1 21:52:47

Col.mask = LVIF_TEXT;是错误的
改成Col.mask = LVCF_TEXT;    就对了
LVIF_TEXT;和LVCF_TEXT;    有什么区别??

lm68140318 发表于 2023-5-1 21:58:34

LVIF_TEXT表示项的文本
LVCF_TEXT表示标题文本

对不 ??
页: [1]
查看完整版本: CListCtrl--GetColumn