忘川echo 2023-05-19 09:30 采纳率: 20%
浏览 76
已结题

MFC属性网格去除多余部分

静态创建了一个属性网格CMFCPropertyGridCtrl,怎么把下方图片红线所示区域去除啊?

img

  • 写回答

4条回答 默认 最新

  • 技术宅program 2023-05-21 00:38
    关注

    以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

    在MFC属性网格中去除多余的空白部分,可以采取以下几种方法:

    1. 调整列宽
      可以适当缩窄属性网格的列宽,使之刚好适配属性内容,这样可以避免出现空列。设置列宽的方法是:
    cpp
    m_wndPropGrid.SetColumnWidth(nColumn, nWidth); 
    
    
    1. 隐藏空白列
      通过判断属性网格中的每一列是否为空,如果为空则隐藏这一列。代码如下:
    cpp 
    for (int i = 0; i < m_wndPropGrid.GetColumnCount(); i++)
    {
        CString strCellText = m_wndPropGrid.GetItemText(0, i);
        if (strCellText.IsEmpty())
        {
            m_wndPropGrid.ShowColumn(i, FALSE);
        }
    }
    
    
    1. 调整行高
      如果属性网格中最后几行为空,可以设置这几行的行高为0,隐藏空白行。代码如下:
    cpp
    for (int i = m_wndPropGrid.GetRowCount() - 1; i >= 0; i--) 
    {
        CString strItemText = m_wndPropGrid.GetItemText(i, 0);
        if (strItemText.IsEmpty())
        {
            m_wndPropGrid.SetRowHeight(i, 0);
        }
        else
        {
            break;
        }
    }
    
    
    1. 隐藏空白单元格
      通过遍历属性网格中的每一个单元格,如果单元格为空则隐藏此单元格。代码如下:
    cpp
    for (int row = 0; row < m_wndPropGrid.GetRowCount(); row++)
    {
        for (int col = 0; col < m_wndPropGrid.GetColumnCount(); col++) 
        {
            CString strItemText = m_wndPropGrid.GetItemText(row, col);
            if (strItemText.IsEmpty())
            {
                m_wndPropGrid.SetItemState(row, col, 0,rgb);
            }
        }
    }
    
    

    以上4种方法可以有效去除MFC属性网格中的空白部分,使界面的显示更加紧凑。

    评论

报告相同问题?

问题事件

  • 系统已结题 5月27日
  • 赞助了问题酬金15元 5月19日
  • 创建了问题 5月19日