白送分啦!!!!超级简单!!!!我不会!!!! AVOID DOWN TO NEXT PAGE,HAVE TO UP 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以尝试以下的方法:(首先要选择List Box的样式为Horizontal Scroll和DISABLE NO SCROLL)CDC* pDC=m_List.GetDC();CString str;int cx=0,nCount,nChar;nCount=m_List.GetCount();TEXTMETRIC tm;pDC->GetTextMetrics(&tm);for (int i=0;i<nCount;i++){ m_List.GetText(i,str); nChar=str.GetLength(); if (tm.tmAveCharWidth*nChar>cx) cx=tm.tmAveCharWidth*nChar;}m_List.SetHorizontalExtent(cx);因为此处的tm.tmAveCharWidth不是十分准确,在一些比较长的字符串时会出现较大误差。 谢谢cloudshadow1(云影)我也是这么做的,在文字比较长时,就是不准,那么怎么改进呢? CDC* pDC = m_List.GetDC();CString str;int cx = 0, nWidth = 0;for (int i=m_List.GetCount()-1; i>=0; i--){ m_List.GetText(i, str); cx = (pDC->GetTextExtent(str)).cx; if(cx > nWidth) nWidth = cx;}//if(mList.GetHorizontalExtent() != nWidth)m_List.SetHorizontalExtent(nWidth);m_List.ReleaseDC(pDC); 忘记说一个事了,我对话框字体采用的是“宋体,9”,为的是在系统采用任何字体时,对话框客户区都保证原尺寸若采用System字体,azuo_lee()的代码工作的非常出色但现在应如何在采用我的字体的情况下仍可获得正常的滚动尺寸呢?我试过::DrawTextEx( pDC->m_hDC, (char *)(LPCTSTR)str, -1, &rc, DT_CALCRECT | DT_SINGLELINE, NULL );与azuo_lee()的代码出现同样的问题 GetDC之后加上:CFont * pFont = m_List.GetFont();CFont * pOldFont = pDC->SelectObject(pFont);ReleaseDC之前加上:pDC->SelectObject(pOldFont); 用GetTextExtent才能得到准确的显示宽度,当然在此之前必须先选好字体,GetTextMetrics只能得到平均宽度。 问题解决谢谢大侠 azuo_lee() 的尽心解答谢谢 jiagh(无会) 的激励谢谢 Belle(江雪) 的可爱谢谢 cloudshadow1(云影) 的支持谢谢 prettywolf(多情自古空余,此恨绵绵无绝期) 的very simple谢谢 horsehorse(老马) 的解释谢谢 lpt(独云) 的肯定另外,特别感谢fz_zhou(vcfan)HowUCan(怎么办)minkerui(你好)的奋力一推这个贴子分开的太少了,为表感谢,我已另开贴子加分,其中绝无不义之财,请尽兴加分贴子http://www.csdn.net/expert/topic/235/235732.shtm 简单问题,按钮的消息处理问题.谢谢. 拜求帮助~VC++ Tab控件-给标签加图标不显示 appface 在线等MFC扩展编程例子代码!!!! 为什么我的API函数(GetFileSizeEx)不能使用?有人遇到过这样的问题吗? 怎么没卖《深入浅出mfc》的了 === 请高人救急!!!===两个问题 200 分(Richedit 字体及Win98使用Win2K函数) Mediaplayer控件的注册问题!!! 初学 GDI+,被 Image 类难住了 怎样把卸载程序加到控制面板的”程序“里去? 库文件的问题:怎样创建库文件的问题 唉,第一次来,大家互相帮助吧
CDC* pDC=m_List.GetDC();
CString str;
int cx=0,nCount,nChar;
nCount=m_List.GetCount();
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
for (int i=0;i<nCount;i++)
{
m_List.GetText(i,str);
nChar=str.GetLength();
if (tm.tmAveCharWidth*nChar>cx)
cx=tm.tmAveCharWidth*nChar;
}
m_List.SetHorizontalExtent(cx);
因为此处的tm.tmAveCharWidth不是十分准确,在一些比较长的字符串时会出现较大误差。
CString str;
int cx = 0, nWidth = 0;
for (int i=m_List.GetCount()-1; i>=0; i--)
{
m_List.GetText(i, str);
cx = (pDC->GetTextExtent(str)).cx;
if(cx > nWidth)
nWidth = cx;
}
//if(mList.GetHorizontalExtent() != nWidth)
m_List.SetHorizontalExtent(nWidth);
m_List.ReleaseDC(pDC);
若采用System字体,azuo_lee()的代码工作的非常出色
但现在应如何在采用我的字体的情况下仍可获得正常的滚动尺寸呢?
我试过
::DrawTextEx( pDC->m_hDC,
(char *)(LPCTSTR)str,
-1,
&rc,
DT_CALCRECT | DT_SINGLELINE,
NULL
);
与azuo_lee()的代码出现同样的问题
CFont * pFont = m_List.GetFont();
CFont * pOldFont = pDC->SelectObject(pFont);
ReleaseDC之前加上:
pDC->SelectObject(pOldFont);
问题解决谢谢大侠 azuo_lee() 的尽心解答
谢谢 jiagh(无会) 的激励
谢谢 Belle(江雪) 的可爱
谢谢 cloudshadow1(云影) 的支持
谢谢 prettywolf(多情自古空余,此恨绵绵无绝期) 的very simple
谢谢 horsehorse(老马) 的解释
谢谢 lpt(独云) 的肯定另外,特别感谢
fz_zhou(vcfan)
HowUCan(怎么办)
minkerui(你好)
的奋力一推这个贴子分开的太少了,为表感谢,我已另开贴子加分,其中绝无不义之财,请尽兴
加分贴子http://www.csdn.net/expert/topic/235/235732.shtm