多行文本绘制
来源:互联网 发布:php basename 编辑:程序博客网 时间:2024/04/30 01:08
CPaintDC dc(this); // 用于绘制的设备上下文
CString str= "abcde\r111 ";
dc.DrawText(str,CRect(10,10,100,100),DT_CENTER);
WIN32代码:
const char *p = "abcde\r111 ";
HDC hdc = ::GetDC(m_hWnd);
RECT rc={10,10,100,100};
::DrawText(hdc,p,strlen(p),&rc,DT_CENTER);
::ReleaseDC(m_hWnd,hdc);
TextOut()只能输出一行文本,因为DrawText()不能实现左,右,左下,下,右下的对齐方式所以还行用到TextOut(),但你就要计算要输出文本的行数,最大行宽,每行输出位置了,这些参数要你CDC用的CFont有关,可通过pDc-> GetTextExtent()得到当前字体输出时的长宽
//计算多行不压缩时,文本输出的长度和宽度
//参数:nSigleHeigth 单行平均高度
// nNum 行数
// 将每行字符放入strArray中
CSize CCell::CalMulLneTextSize(CDC* pDc, CStringArray& strArray, int& nSigleHeigth, int& nNum)
{
int nLength = m_strText.GetLength();
int nPrePos = -1; //上一个回车的位置
int nMaxCx = 0; //最长行的长度,最长行不一定字数最多
int nCy = 0;
nNum = 0;
CSize size(0,0);
for (int i=0; i <nLength; i++)
{
if(m_strText[i] == '\n ')
{
nNum++;
CString strTemp = m_strText.Mid(nPrePos+1,i-nPrePos);
strArray.Add(strTemp);
size = pDc-> GetTextExtent(strTemp);
nCy += size.cy;
if (size.cx > nMaxCx)
nMaxCx = size.cx;
nPrePos = i;
}
}
//最后一个不是回车换行
if (m_strText[nLength-1] != '\n ')
{
CString strTemp = m_strText.Mid(nPrePos+1,nLength-1-nPrePos);
strArray.Add(strTemp);
size = pDc-> GetTextExtent(strTemp);
nCy += size.cy;
nNum ++;
if (size.cx > nMaxCx)
nMaxCx = size.cx;
}
size.cx = nMaxCx;
size.cy = nCy;
if (nNum > 0)
nSigleHeigth = nCy/nNum;
else
nSigleHeigth = nCy;
return size;
}
CString str= "abcde\r111 ";
dc.DrawText(str,CRect(10,10,100,100),DT_CENTER);
WIN32代码:
const char *p = "abcde\r111 ";
HDC hdc = ::GetDC(m_hWnd);
RECT rc={10,10,100,100};
::DrawText(hdc,p,strlen(p),&rc,DT_CENTER);
::ReleaseDC(m_hWnd,hdc);
TextOut()只能输出一行文本,因为DrawText()不能实现左,右,左下,下,右下的对齐方式所以还行用到TextOut(),但你就要计算要输出文本的行数,最大行宽,每行输出位置了,这些参数要你CDC用的CFont有关,可通过pDc-> GetTextExtent()得到当前字体输出时的长宽
//计算多行不压缩时,文本输出的长度和宽度
//参数:nSigleHeigth 单行平均高度
// nNum 行数
// 将每行字符放入strArray中
CSize CCell::CalMulLneTextSize(CDC* pDc, CStringArray& strArray, int& nSigleHeigth, int& nNum)
{
int nLength = m_strText.GetLength();
int nPrePos = -1; //上一个回车的位置
int nMaxCx = 0; //最长行的长度,最长行不一定字数最多
int nCy = 0;
nNum = 0;
CSize size(0,0);
for (int i=0; i <nLength; i++)
{
if(m_strText[i] == '\n ')
{
nNum++;
CString strTemp = m_strText.Mid(nPrePos+1,i-nPrePos);
strArray.Add(strTemp);
size = pDc-> GetTextExtent(strTemp);
nCy += size.cy;
if (size.cx > nMaxCx)
nMaxCx = size.cx;
nPrePos = i;
}
}
//最后一个不是回车换行
if (m_strText[nLength-1] != '\n ')
{
CString strTemp = m_strText.Mid(nPrePos+1,nLength-1-nPrePos);
strArray.Add(strTemp);
size = pDc-> GetTextExtent(strTemp);
nCy += size.cy;
nNum ++;
if (size.cx > nMaxCx)
nMaxCx = size.cx;
}
size.cx = nMaxCx;
size.cy = nCy;
if (nNum > 0)
nSigleHeigth = nCy/nNum;
else
nSigleHeigth = nCy;
return size;
}
- 多行文本绘制
- 多行文本绘制
- 使用DrawTextEx绘制多行文本
- win32下绘制多行文本
- C#--GDI+绘制多行文本和格式化文本
- 打印多行文本
- 多行文本框
- 多行文本溢出
- 多行文本溢出
- 控制多行文本
- 多行文本居中
- SetDlgItemText显示多行文本
- 多行文本弹出窗口
- ORACLE 多行文本合并
- libgdx 多行文本域
- vim 注释多行文本
- vim注释多行文本
- 多行文本垂直居中
- 罂栗花的伤感空间日志:爱情、只是宿命摆下的一个局
- HDU 1732 Push Box
- struts2 jsonplugin includeProperties 对list集合的正则配置
- 小呆瓜的伤感亲情侣空间日志发布:亲爱的,离开你,我身不由己
- 接着上一次的
- 多行文本绘制
- 因为你的不在乎,让我学会了冷漠
- QQ空间背景音乐 链接制作
- jstl 获取字符串长度、字符串操作
- 烟花易冷,一指繁华了无痕:伤感QQ空间日志
- 她的爱情故事,你看了会哭嚒
- AJAX原理
- 什么是nurbs?如何设置参数绘制nurbs?