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:显示文本项的表格显示的主要内容,如果未能解决你的问题,请参考以下文章

如何填充另一个文本项

MFC做表格的控件

如何在表格中显示文本区域的换行符?

MFC的编辑框里不能按时间依次显示递增的数字

自己写了一个HTML表格,想在MFC上显示出来,怎么做?跪求!!!是要用到CHtmlEditView ?

MFC程序怎样实现“复制”“粘贴”功能,我做了一个程序,在窗口客户区显示表格和文字,但不能复制粘贴