Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在CListCtrl上设置排序指示符将清除列标题_C++_Mfc_Clistctrl - Fatal编程技术网

C++ 在CListCtrl上设置排序指示符将清除列标题

C++ 在CListCtrl上设置排序指示符将清除列标题,c++,mfc,clistctrl,C++,Mfc,Clistctrl,在特定列上设置排序指示器时,清除该列的标题 代码片段 HDITEM headerInfo = {0}; for (int colindex = 0; colindex < n; colindex++) { if (TRUE == pHDR->GetItem(colindex, &headerInfo)) { headerInfo.mask = HDI_FORMAT; // column match? if (coli

在特定列上设置排序指示器时,清除该列的标题

代码片段

HDITEM headerInfo = {0};

for (int colindex = 0; colindex < n; colindex++)
{
    if (TRUE == pHDR->GetItem(colindex, &headerInfo))
    {

        headerInfo.mask = HDI_FORMAT;
    // column match?
        if (colindex == column)
        {
            if (ascending)
            {
                headerInfo.fmt |= HDF_SORTUP;
                headerInfo.fmt &= ~HDF_SORTDOWN;
            }
            else
            {
                headerInfo.fmt |= HDF_SORTDOWN;
                headerInfo.fmt &= ~HDF_SORTUP;
            }
        }
        // switch off sort arrows
        else
        {
            headerInfo.fmt &= ~HDF_SORTDOWN & ~HDF_SORTUP;
        }       
        pHDR->SetItem(colindex, &headerInfo);
    }
}
HDITEM headerInfo={0};
对于(int colindex=0;colindexGetItem(colindex和headerInfo))
{
headerInfo.mask=HDI_格式;
//列匹配?
if(colindex==列)
{
if(升序)
{
headerInfo.fmt |=HDF|u SORTUP;
headerInfo.fmt&=~HDF\u SORTDOWN;
}
其他的
{
headerInfo.fmt |=HDF|u SORTDOWN;
headerInfo.fmt&=~HDF\u SORTUP;
}
}
//关闭排序箭头
其他的
{
headerInfo.fmt&=~HDF\u SORTDOWN&~HDF\u SORTUP;
}       
pHDR->SetItem(colindex和headerInfo);
}
}
如果我删除
headerInfo
初始化,它在调试模式下工作正常,但在发布模式下崩溃。
HDITEM
headerInfo


科隆的头衔是他的名字。单击它后,它将被清除

您有一些地方出错

首先,如果调用
GetItem
,并将
headerInfo.mask
设置为0,则不会返回任何内容。对于后续调用,它将设置为
HDI\u FORMAT
,因此您将获得格式信息

第二,不管怎么说,
GetItem
调用您需要什么都不清楚;您不使用任何字段。您仅测试此调用是否返回
TRUE
,但所有有效列索引都应返回该值


最后,在您的
SetItem
中,您声明
fmt
成员有效,但它不包含
HDF\u字符串
标志,因此该项上不会显示任何文本。

最后我得到了答案,我们必须在
GetItem
之前应用
HDI\u格式。如果我们在
GetItem
之后应用,它将清除屏蔽标志。我进行了测试,它工作正常

HDITEM headerInfo = {0};
headerInfo.mask = HDI_FORMAT;

for (int colindex = 0; colindex < n; colindex++)
{
if (TRUE == pHDR->GetItem(colindex, &headerInfo))
{
    // column match?
    if (colindex == column)
    {
        if (ascending)
        {
            headerInfo.fmt |= HDF_SORTUP;
            headerInfo.fmt &= ~HDF_SORTDOWN;
        }
        else
        {
            headerInfo.fmt |= HDF_SORTDOWN;
            headerInfo.fmt &= ~HDF_SORTUP;
        }
    }
    // switch off sort arrows
    else
    {
        headerInfo.fmt &= ~HDF_SORTDOWN & ~HDF_SORTUP;
    }       
    pHDR->SetItem(colindex, &headerInfo);
}
}
HDITEM headerInfo={0};
headerInfo.mask=HDI_格式;
对于(int colindex=0;colindexGetItem(colindex和headerInfo))
{
//列匹配?
if(colindex==列)
{
if(升序)
{
headerInfo.fmt |=HDF|u SORTUP;
headerInfo.fmt&=~HDF\u SORTDOWN;
}
其他的
{
headerInfo.fmt |=HDF|u SORTDOWN;
headerInfo.fmt&=~HDF\u SORTUP;
}
}
//关闭排序箭头
其他的
{
headerInfo.fmt&=~HDF\u SORTDOWN&~HDF\u SORTUP;
}       
pHDR->SetItem(colindex和headerInfo);
}
}

谢谢大家的建议和输入。

是否有足够的空间显示标题和排序指示器?@IIinspectable是的,可能会显示一些屏幕抓图…@AndrewTruckle更新了屏幕截图,列标题是Name,单击后,如果使用
headerInfo.mask |=HDI_格式,则其将被删除并添加排序指示符级别改进
附加标志而不是替换,因为任何现有的指定文本标题的
HDI\u文本
都将被删除?只是一个想法。需要调用
GetItem
。如果不这样做,header控件将删除所有未在后续调用
SetItem
中设置的
fmt
标志。实际上,OP使用的是
fmt
字段。@Vlad:但是如果我删除了headerInfo@iam:它在调试模式下“工作不正常”。幸运的是,调试运行时使用位模式(
0xCD
)填充未初始化的内存,该位模式恰好设置了所需的位(
HDI_FORMAT
,0x04)。发布运行时没有,你会得到内存位置中的任何垃圾。是的,你设置了掩码来声明你想要得到的项目。现在我在您的原始代码中看到了这个错误。做得好。