一段文本是变化的,当显示的长度超过边界就自动转到下一行显示
用CStatic不能既垂直居中,又自动换行
我的解决方法是用CButton代替CStatic,因为CButton的属性设置一下就可以达到效果,但是怎么让CButton的边框颜色都去掉???CButton重绘的话字体又不能自动换行了
用CStatic不能既垂直居中,又自动换行
我的解决方法是用CButton代替CStatic,因为CButton的属性设置一下就可以达到效果,但是怎么让CButton的边框颜色都去掉???CButton重绘的话字体又不能自动换行了
重绘的时候在要换行的地方文本后面加 \n不成么?
GDI+的DrawString可以考虑一下。它要求给定一个框然后在框里画字,到框的边缘自动换行。
{
// TODO: Add your code to draw the specified item
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rcClient;
GetClientRect( &rcClient ); CString sText;
GetWindowText( sText ); pDC->DrawText( sText,rcClient, DT_CENTER|DT_WORDBREAK );
}
注意要把Button的属性加上own draw
vc6 xp 下通过
另外,用DrawText也可以得到输出文字的高度。
{
CRect rect = lpDrawItemStruct->rcItem;
CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
int nSaveDC=pDC->SaveDC();
UINT state = lpDrawItemStruct->itemState;
//POINT pt ;
TCHAR strText[MAX_PATH + 1];
::GetWindowText(m_hWnd, strText, MAX_PATH);
//显示按钮的文本
if (strText!=NULL)
{ // CFont* hFont = GetFont();
CFont* hFont=new CFont;
hFont->CreateFont(23,0,0,0,
FW_DONTCARE,
0,
0,
0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,
_T("宋体")); CRect rect2;
GetWindowRect(&rect2);
GetParent()->ScreenToClient(rect2);
CFont* hOldFont = pDC->SelectObject(hFont);
delete hFont;
CSize szExtent;
if(!GetTextExtentPoint(pDC->m_hDC,strText,strlen(strText),&szExtent))
ASSERT(0);
//CSize szExtent = pDC->GetTextExtent(strText, lstrlen(strText));
CPoint pt( rect.CenterPoint().x - szExtent.cx / 2, rect.CenterPoint().y - szExtent.cy / 2);TRACE("strText=%s,szExtent.cx,cy=%d,%d\n",strText,szExtent.cx,szExtent.cy);
if(szExtent.cx<749)//761)
{
pDC->DrawText(strText,rect,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
TRACE("DT_VCENTER!!\n");
}
else if(szExtent.cx<1498)
{
// CString strss;
// strss.Format("szExtent.cx=%d",szExtent.cx);
rect.top+=30;
pDC->DrawText(strText,rect,DT_WORDBREAK|DT_LEFT);
TRACE("DT_WORDBREAK!\n");
}
else
{ rect.top+=16;
pDC->DrawText(strText,rect,DT_WORDBREAK|DT_LEFT);
TRACE("DT_WORDBREAK!\n"); }
pDC->SelectObject(hOldFont); }
pDC->RestoreDC(nSaveDC);
}
谢谢大家,我按照cnzdgs说的做,判断文本的长度,超过某一值就设置换行,否则就垂直居中显示,可以达到效果,谢谢大家