最近需要使用MFC显示列表信息,自然想到了常用的自带控件CListCtrl。由于界面上空间有限,而需要显示的列数较多,这就造成无法在一个页面显示所有列信息,于是搜索其他控件,找到了功能强大的列表控件CGridCtrl。
其他功能不多赘述,这里重点介绍如何实现在CGridCtrl单元格中显示多行字符串。
分为两个步骤:
- 第一步
在CGridDefaultCell::CGridDefaultCell() 里把默认的|DT_SINGLELINE注释掉。
m_nFormat = DT_LEFT|DT_VCENTER/*|DT_SINGLELINE*/|DT_NOPREFIX | DT_END_ELLIPSIS; //change by jg for multi line.
- 第二步
void CGridCtrl::OnEndEditCell(int nRow, int nCol, CString str)里添加一句RedrawWindow();
CString strCurrentText = GetItemText(nRow, nCol);
if (strCurrentText != str)
{
SetItemText(nRow, nCol, str);
if (ValidateEdit(nRow, nCol, str) &&
SendMessageToParent(nRow, nCol, GVN_ENDLABELEDIT) >= 0)
{
SetModified(TRUE, nRow, nCol);
RedrawCell(nRow, nCol);
RedrawWindow();
}
else
{
SetItemText(nRow, nCol, strCurrentText);
}
}
CGridCellBase* pCell = GetCell(nRow, nCol);
if (pCell)
pCell->OnEndEdit();
完成以上两步后,CGridCtrl单元格中就可以使用"\r\n"实现换行功能了。