C++ 如何使用方向、中心对齐和换行字(VCL C+;+;)绘制文本?
我试图在画框画布上绘制一个文本,方向=900,居中对齐,并在画布矩形中对文本进行文字换行。文本应如下图所示C++ 如何使用方向、中心对齐和换行字(VCL C+;+;)绘制文本?,c++,canvas,vcl,drawtext,C++,Canvas,Vcl,Drawtext,我试图在画框画布上绘制一个文本,方向=900,居中对齐,并在画布矩形中对文本进行文字换行。文本应如下图所示 我使用的是AcjCabrReXe5C++,我尝试了下面的例子,但是它不起作用。 void __fastcall TForm1::PBoxPaint(TObject *Sender) { TRect R , DrawRect ; unsigned int DrawFlags = 0; TDrawTextParams DrawParams ;
我使用的是AcjCabrReXe5C++,我尝试了下面的例子,但是它不起作用。
void __fastcall TForm1::PBoxPaint(TObject *Sender)
{
TRect R , DrawRect ;
unsigned int DrawFlags = 0;
TDrawTextParams DrawParams ;
PBox->Font->Orientation = 900 ;
PBox->Canvas->Rectangle(PBox->ClientRect) ;
String S = L"Angualar Text" ;
R = PBox->ClientRect ;
InflateRect(R,-2,-2) ;
DrawRect = R ;
DrawFlags = DT_END_ELLIPSIS | DT_NOPREFIX | DT_WORDBREAK | DT_EDITCONTROL | DT_CENTER ;
DrawText(PBox->Canvas->Handle, S.c_str() , -1 , &DrawRect, DrawFlags | DT_CALCRECT) ;
DrawRect.Right = R.Right;
if (DrawRect.Bottom < R.Bottom)
{
OffsetRect( DrawRect, 0, ( R.Bottom - DrawRect.Bottom ) / 2 );
}
else
{
DrawRect.Bottom = R.Bottom;
}
DrawParams.iTabLength = 0 ;
DrawParams.iLeftMargin = 0 ;
DrawParams.iRightMargin = 0 ;
DrawParams.uiLengthDrawn = 0 ;
DrawParams.cbSize = sizeof(DrawParams) ;
DrawTextEx(PBox->Canvas->Handle,S.c_str(),-1,&DrawRect,DrawFlags,&DrawParams) ;
}
void\uu fastcall TForm1::pbopaint(TObject*Sender)
{
TRect R,DrawRect;
无符号整数DrawFlags=0;
TDrawTextParams-DrawParams;
PBox->Font->Orientation=900;
PBox->Canvas->矩形(PBox->ClientRect);
字符串S=L“角度文本”;
R=PBox->ClientRect;
充气式(R,-2,-2);
DrawRect=R;
DrawFlags=DT|u END|u省略号| DT|u NOPREFIX | DT|u断字| DT|u编辑控制| DT|u中心;
DrawText(PBox->Canvas->Handle,S.c_str(),-1,&DrawRect,DrawFlags | DT_CALCRECT);
DrawRect.Right=R.Right;
if(DrawRect.BottomCanvas->Handle、S.c_str()、-1、&DrawRect、DrawFlags和DrawParams);
}
谁能帮我在画布上画一个文本(如上图)吗?
非常感谢。所有Win32函数都会返回一个错误标志(实际错误代码可从
GetLastError()
获得)。我看不出你在检查它们中的任何一个。@KhouriGiordano:并非所有Win32函数都检查。特别是,GDI函数,如OP正在使用的函数,不会通过GetLastError()
报告错误。除非函数的文档明确说明使用了GetLastError()
,否则不能假定它是。