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

MFC:显示文本项的列表显示,mfc,Mfc,这看起来应该很简单,但我不能完全让它工作。我想要一个控件(我猜是CListBox或CListCtrl),它以一种很好的列表方式显示文本字符串 添加项目时,应沿一行添加项目,直到该行已满,然后开始新行。就像在wordprocessor中输入一样,当行满时,项开始添加到下一行,控件可以垂直滚动 当我尝试使用列表模式CListCtrl时,我得到的是一个不断增长的单行,带有一个水平滚动条。我看不出有什么办法可以改变这一点,一定有办法?您可能需要一个包含LVS_报表的列表控件。如果希望用户使用键盘以交互方

这看起来应该很简单,但我不能完全让它工作。我想要一个控件(我猜是CListBox或CListCtrl),它以一种很好的列表方式显示文本字符串

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


当我尝试使用列表模式CListCtrl时,我得到的是一个不断增长的单行,带有一个水平滚动条。我看不出有什么办法可以改变这一点,一定有办法?

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


如果您有能力向程序中添加/clr,可以使用MFC的Windows窗体宿主支持尝试Windows窗体中的数据网格类。您将在Windows窗体中的数据网格类上找到比任何其他第三方MFC数据网格类库多得多的编程资源

如果使用CRichEditCtrl,可以将其设置为word wrap,请查看以下代码段:

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