MFC:显示文本项的列表显示

时间:2009-12-08 16:16:19

标签: mfc

看起来应该很简单,但我无法让它发挥作用。我想要一个控件(我猜CListBox或CListCtrl)以一个很好的表格方式显示文本字符串。

添加项目时,应沿行添加它们,直到该行已满,然后开始新行。就像在wordprocessor中输入一样 - 当行已满时,项目开始被添加到下一行,控件可以垂直滚动。

尝试使用列表模式时,我得到的是CListCtrl是一个只有一个不断增长的行,带有一个水平滚动条。我看不出改变它的方法,必须有一个?

2 个答案:

答案 0 :(得分:2)

你可能需要一个列表控件和LVS_REPORT。如果您希望用户使用键盘以交互方式添加项目,则可能需要数据网格,而不是列表。添加编辑到列表控件子项并不容易,从CWnd开始会更容易。搜索“MFC数据网格”以查找实现该功能的一些开源类库。

如果您可以为程序添加/ clr,则可以使用MFC的Windows窗体托管支持在Windows窗体中尝试数据网格类。您将在Windows窗体中找到比任何其他第三方MFC数据网格类库更多的数据网格类编程资源。

答案 1 :(得分:0)

如果您使用CRichEditCtrl,您可以将其设置为自动换行,请查看从以下内容中提取的代码段:

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);
}