如题,需要动态调整CStatic的大小,使其刚好放得下其内容,请问有没有什么方法可以准确计算出CStatic的大小?比如:CString strContent = "abfjdsalkfjdsafjkdfjjjjjjjjjjddddddddddddddddddsssssssefsfdssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\r\newfffffffffffffffffff";
调试欢乐多
看看孙鑫老师讲的文本编程那一章的卡拉ok例子,可能对你有所帮助。
我是想让宽度固定,然后求行数啊。
比如说CStatic控件的right和对话框的right相同,CStatic的内容很多,需要动态调整它的高度,使所有内容都能完成的显示出来,有什么办法?
通过GetTextExtent计算宽度
如果超过你的限定就换行
如果遇到换行符也换行
写了个函数,直接传字符串进去,CEditBox就能自动调整大小(当然,宽度是要固定的)
void CdsDlg::SetEditTextAutoLine(CString strText)
{
const int iEditShowWidth = 100; //固定宽度为50(高度根据内容自动调整) CRect rcEditShowString;
m_editShowString.GetWindowRect(&rcEditShowString); //获取edit控件的原始大小
ScreenToClient(&rcEditShowString); //因edit控件已具有自动换行属性,所以SetWindowText并调整
//控件宽度后,得到的行数即是editbox内容的准确行数
m_editShowString.SetWindowText(strText);
rcEditShowString.right = rcEditShowString.left + iEditShowWidth;
m_editShowString.MoveWindow(rcEditShowString);
int iLines = m_editShowString.GetLineCount(); //计算当前字体下,一行字符所占高度
CClientDC dc(this);
CSize szText = dc.GetTextExtent(strText); int iAllTextHeight = (szText.cy - 3) * iLines; //所有文字所需的总高度【cy-3:更准确】 rcEditShowString.bottom = rcEditShowString.top + iAllTextHeight; //根据已得到的文字内容的高度调整editbox,使其显示正好容纳下所有字符
m_editShowString.MoveWindow(rcEditShowString);
}
不显示垂直/水平流动条且Multiline为True