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,因此您看到它是空白的。
我正在尝试将 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,因此您看到它是空白的。