CListCTrl - 如何对齐指定列的文本?

CListCTrl - How to Align Text from specify Column?

我正在尝试将 header 文本居中对齐,而 body 数据将向左对齐。

这是我的插图:

OnInitDialog事件中,我添加了如下列:

mylistCtrl.Create(WS_CHILD | WS_VISIBLE | LVS_REPORT, CTRLrect, &m_cTab, IDC_ctrlist);
mylistCtrl.InsertColumn(1, L"Column1", LVCFMT_LEFT, 50);

然后我尝试像这样访问 CHeaderCtrl

m_checkHeadCtrl = mylistCtrl.GetHeaderCtrl(); 
if (m_checkHeadCtrl)
{
    m_checkHeadCtrl->ModifyStyle(1, HDS_HOTTRACK); //<--not sure this option
    HDITEM hdi = { 0 };

    m_checkHeadCtrl->GetItem(1, &hdi);
    hdi.mask = HDI_TEXT | HDI_FORMAT;
    hdi.fmt |= HDF_CENTER;
    m_checkHeadCtrl->SetItem(1, &hdi);
}

但是这不起作用?

我该如何解决这个问题?

尝试这样做:

HDITEM hdi{ 0 };
hdi.mask = HDI_TEXT | HDI_FORMAT;
pHeader->GetItem(1, &hdi)
hdi.fmt |= HDF_CENTER;
pHeader->SetItem(1, &hdi);

pHeader->ModifyStyle(0, HDS_HOTTRACK); // optional

当然,您必须确保您的文本在 header 控件中有效。

正确的方法是:

HDITEM hdi{ HDI_FORMAT };
hdi.fmt = HDF_CENTER;
pHeader->SetItem(1, &hdi);

通过设置 HDI_TEXT | 掩码,您还要求 header 项的文本,但不为其提供缓冲区。
然后,当您 m_checkHeadCtrl->SetItem(1, &hdi); 时,您实际上将空文本设置为 header,因此您看到它是空白的。