MFC:显示文本项的表格显示
Posted
技术标签:
【中文标题】MFC:显示文本项的表格显示【英文标题】:MFC: Displaying a tabulated display of text items 【发布时间】:2009-12-08 16:16:18 【问题描述】:这看起来应该很简单,但我不能让它工作。我想要一个控件(我猜是 CListBox 或 CListCtrl),它以很好的表格方式显示文本字符串。
添加项目时,应沿一行添加,直到该行已满,然后开始新行。就像在您的文字处理器中输入一样 - 当行满时,项目开始添加到下一行,并且控件可以垂直滚动。
当我尝试使用列表模式 CListCtrl 时,我得到的是一个不断增长的单行,带有一个水平滚动条。我看不出有什么办法可以改变,一定有办法吗?
【问题讨论】:
【参考方案1】:您可能需要一个带有 LVS_REPORT 的列表控件。如果您希望用户使用键盘以交互方式添加项目,您可能需要一个数据网格,而不是列表。增加对列表控件子项的编辑并不容易,从CWnd开始会更容易。搜索“MFC Data Grid”可以找到一些实现该功能的开源类库。
如果您有能力将 /clr 添加到您的程序中,您可以使用 MFC 的 Windows 窗体托管支持尝试 Windows 窗体中的数据网格类。您会发现 Windows 窗体中数据网格类的编程资源比任何其他第三方 MFC 数据网格类库要多得多。
【讨论】:
【参考方案2】:如果你使用 CRichEditCtrl,你可以将它设置为自动换行,看看这个 sn-p 提取自:
http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.ui/2004-03/0111.html
(I've derived my own QRichEditCtrl from the MFC CRichEditCtrl,
and here's the relevant code:)
void QRichEditCtrl::SetWordWrap(bool bWrap)
RECT r;
GetWindowRect(&r);
CDC * pDC = GetDC();
long lLineWidth = 9999999; // This is the non-wrap width
if (bWrap)
lLineWidth = ::MulDiv(pDC->GetDeviceCaps(PHYSICALWIDTH),
1440, pDC->GetDeviceCaps(LOGPIXELSX));
SetTargetDevice(*GetDC(), lLineWidth);
【讨论】:
以上是关于MFC:显示文本项的表格显示的主要内容,如果未能解决你的问题,请参考以下文章