【问题标题】:MFC: Displaying a tabulated display of text itemsMFC:显示文本项的表格显示
【发布时间】:2009-12-08 16:16:18
【问题描述】:

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

添加项目时,应沿一行添加,直到该行已满,然后开始新行。就像在您的文字处理器中输入一样 - 当行满时,项目开始添加到下一行,并且控件可以垂直滚动。

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

【问题讨论】:

    标签: mfc


    【解决方案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);
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        相关资源
        最近更新 更多