注:(我这里的CListCtrl控件是带有网格条纹的报表形式,并且可以整栏选择)

解决方案 »

  1.   

    CFont m_font;
    VERIFY(m_font.CreateFont(
    MulDiv(11,-pDC->GetDeviceCaps(LOGPIXELSY),72), //FONTSIZE=11
    0,
             0,
    0,
    FW_NORMAL,
    0,
    0,
    0,
    DEFAULT_CHARSET,
    OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,
    DEFAULT_QUALITY,
    VARIABLE_PITCH |0x04| FF_DONTCARE, //DEFAULT_PITCH&FF_DONTCARE,
    _T("宋体")));
    m_ListCtrl->SetFont(&m_font);//,FALSE);
    修改字体可以改变行高。
    注意,m_font必须定义为成员变量
      

  2.   

    第一种方法是利用反射WM_MEASUREITEM消息,这个比较麻烦;
    第二种是个变通的方法,比较简单
    imagelist.Create( 24, 24, ILC_COLOR4, 10, 10 ); 
    m_cList.SetImageList( &imageList, LVSIL_SMALL ); 
    就是加一个空的IMAGELIST,行高就变成IMAGELIST设定的大小了,呵呵
      

  3.   

    http://www.codeguru.com/Cpp/controls/listview/advanced/article.php/c1013/
      

  4.   

    http://www.codeguru.com/listview/change_row_height.shtml
      

  5.   

    在ListCtrl所在的对话框中重载此函数:
    CYouDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
    {
    // TODO: Add your message handler code here and/or call default
    if(nIDCtl == IDC_YOU_LIST)
    {
    lpMeasureItemStruct->itemHeight = 20;
    }
    }
      

  6.   

    借这位仁兄的地方问一下
    我按
    http://www.codeguru.com/Cpp/controls/listview/advanced/article.php/c1013/
    中的方法去做了不行,ON_WM_MEASUREITEM_REFLECT对应的函数afx_msg void MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct )根本就没有执行,有人这样做成功过吗?引用http://www.codeguru.com/Cpp/controls/listview/advanced/article.php/c1013/
    afx_msg LRESULT OnSetFont(WPARAM wParam, LPARAM);
    afx_msg void MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct );//{{AFX_MSG(CMyListCtrl)
    :
    :
    //}}AFX_MSG
    afx_msg LRESULT OnSetFont(WPARAM wParam, LPARAM);
    afx_msg void MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct );
    DECLARE_MESSAGE_MAP()
    BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    //{{AFX_MSG_MAP(CMyListCtrl)
    :
    :
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_SETFONT, OnSetFont)
    ON_WM_MEASUREITEM_REFLECT( )
    END_MESSAGE_MAP()LRESULT CMyListCtrl::OnSetFont(WPARAM wParam, LPARAM)
    {
    LRESULT res =  Default(); CRect rc;
    GetWindowRect( &rc ); WINDOWPOS wp;
    wp.hwnd = m_hWnd;
    wp.cx = rc.Width();
    wp.cy = rc.Height();
    wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
    SendMessage( WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp ); return res;
    }
    void CMyListCtrl::MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
    {
    LOGFONT lf;
    GetFont()->GetLogFont( &lf ); if( lf.lfHeight < 0 )
    lpMeasureItemStruct->itemHeight = -lf.lfHeight; 
    else
    lpMeasureItemStruct->itemHeight = lf.lfHeight; 
    }如果我没有调用SetFont函数,连OnSetFont函数都不执行,调用之后MeasureItem 也不执行
      

  7.   

    http://www.codeproject.com/listctrl/changerowheight.asp
      

  8.   

    借这位仁兄的地方问一下
    我按
    http://www.codeguru.com/Cpp/controls/listview/advanced/article.php/c1013/
    中的方法去做了不行,ON_WM_MEASUREITEM_REFLECT对应的函数afx_msg void MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct )根本就没有执行,有人这样做成功过吗?引用http://www.codeguru.com/Cpp/controls/listview/advanced/article.php/c1013/
    afx_msg LRESULT OnSetFont(WPARAM wParam, LPARAM);
    afx_msg void MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct );//{{AFX_MSG(CMyListCtrl)
    :
    :
    //}}AFX_MSG
    afx_msg LRESULT OnSetFont(WPARAM wParam, LPARAM);
    afx_msg void MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct );
    DECLARE_MESSAGE_MAP()
    BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    //{{AFX_MSG_MAP(CMyListCtrl)
    :
    :
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_SETFONT, OnSetFont)
    ON_WM_MEASUREITEM_REFLECT( )
    END_MESSAGE_MAP()LRESULT CMyListCtrl::OnSetFont(WPARAM wParam, LPARAM)
    {
    LRESULT res =  Default(); CRect rc;
    GetWindowRect( &rc ); WINDOWPOS wp;
    wp.hwnd = m_hWnd;
    wp.cx = rc.Width();
    wp.cy = rc.Height();
    wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
    SendMessage( WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp ); return res;
    }
    void CMyListCtrl::MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
    {
    LOGFONT lf;
    GetFont()->GetLogFont( &lf ); if( lf.lfHeight < 0 )
    lpMeasureItemStruct->itemHeight = -lf.lfHeight; 
    else
    lpMeasureItemStruct->itemHeight = lf.lfHeight; 
    }如果我没有调用SetFont函数,连OnSetFont函数都不执行,调用之后MeasureItem 也不执行======================我也是这种方法好像很不可靠,
    有的情况下可以,有的情况下不行.后来代码全部删掉了,
    好像也没什么影响,郁闷