怎么调整CListCtrl控件的行高度? 注:(我这里的CListCtrl控件是带有网格条纹的报表形式,并且可以整栏选择) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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必须定义为成员变量 第一种方法是利用反射WM_MEASUREITEM消息,这个比较麻烦;第二种是个变通的方法,比较简单imagelist.Create( 24, 24, ILC_COLOR4, 10, 10 ); m_cList.SetImageList( &imageList, LVSIL_SMALL ); 就是加一个空的IMAGELIST,行高就变成IMAGELIST设定的大小了,呵呵 http://www.codeguru.com/Cpp/controls/listview/advanced/article.php/c1013/ http://www.codeguru.com/listview/change_row_height.shtml 在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; }} 借这位仁兄的地方问一下我按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 也不执行 http://www.codeproject.com/listctrl/changerowheight.asp 借这位仁兄的地方问一下我按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 也不执行======================我也是这种方法好像很不可靠,有的情况下可以,有的情况下不行.后来代码全部删掉了,好像也没什么影响,郁闷 CHtmlView是用的IE浏览器,有没有办法用火狐的? 有没有读写word的封装类 各位大侠救救小弟 很基础的问题 画线的 但是不知道为什么不能选中我的pen 如何读取点阵数据生成位图?在线等 编译器使用问题 请高手指教 都来把自己遇到的面试问题给大家说说,交流交流嘛! 为何编程动态加载驱动后驱动可运行而重启机器后该驱动未运行? 谢谢你,winphoenix vc++6.0中,关于tabcontrol控件的使用问题 这个语句为什么不能实现ListCtrl的插入功能? ==> Https代理是什么回事?我通过Https代理建1个到外 server 的 tcp 长连接,我应该怎么连?
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必须定义为成员变量
第二种是个变通的方法,比较简单
imagelist.Create( 24, 24, ILC_COLOR4, 10, 10 );
m_cList.SetImageList( &imageList, LVSIL_SMALL );
就是加一个空的IMAGELIST,行高就变成IMAGELIST设定的大小了,呵呵
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;
}
}
我按
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 也不执行
我按
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 也不执行======================我也是这种方法好像很不可靠,
有的情况下可以,有的情况下不行.后来代码全部删掉了,
好像也没什么影响,郁闷