editbox文本上下居中(垂直居中)的有效方法

http://blog.csdn.net/bwmwm/archive/2009/04/21/4097166.aspx

在多行模式下的CEdit类提供void CEdit::SetRectNP( LPCRECT lpRect)函数,此函数用来调整文本编辑的区域,用这个函数可以设置上下左右Margins,而void SetMargins( UINT nLeft, UINT nRight)函数只能设置左右Margins。

 

CRect rc = CRect(0,0,0,0);
edit.GetClientRect(&rc);

rc.DeflateRect(10,10,10,10);
edit.SetRectNP(&rc);

 

这段代码设置上下左右Margin都是10。

 

水平有限,到目前还没找到单行模式下让文本框的文本垂直居中的办法,因此想到了利用多行文本框来模拟单行然后设置垂直居中的办法。

CRect rc = CRect(0,0,0,0);
edit.GetClientRect(&rc);

 

CDC* pDC = edit1.GetDC();
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
int nFontHeight = tm.tmHeight + tm.tmExternalLeading;
int nMargin = (rc.Height() - nFontHeight) / 2;

rc.DeflateRect(0,nMargin);
edit.SetRectNP(&rc);

 

将文本框的属性设置为ES_MULTILINE | ES_AUTOHSCROLL且不能ES_AUTOVSCROLL | ES_WANTRETURN。

----------------------------------------

http://blog.tianya.cn/blogger/post_show.asp?BlogID=597570&PostID=16065562

使用VC如何按一定斜角输出字符串

使用VC开发时,常常需要在窗口上画一些图表。有时要把一些文字竖着写,有时需要倾斜一定的角度。对于老手们,这当然算不上什么问

题,而新手却常常找不到方法。
新手们往往会在CDC的成员函数里四处寻觅,企图找到一个带斜角参数的TextOut之类的函数,当然是找不到的。输出角度虽然看起来应该

是个“输出”行为,事实上却不在画图时决定,而是由字体决定的。
VC的字体由一个结构体定义:



typedef struct tagLOGFONT {
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement; // 输出角度
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT, *PLOGFONT;



其中lfEscapement就是输出方向和X轴的夹角,以0.1度为单位。例如:如果我们斜向上45度输出文字,那么字体的lfEscapement应为450。
知道这一点后,就很容易了。先取出当前DC的字体,没置字体的输出角度后,再生成一种新的字体让DC选用,然后输出的文字就有一定的

角度了。
获取DC的字体用GetCurrentFont函数,获取字体的LOGFONT结构体用CFont的GetLogFont函数。
我们现在做一个函数,来设置DC字体的输出角度,并作为示例:




/** *//**
输入: pDC 当前的输出DC
angle 输出角度,一周360度,可以用小数
*/
void SetTextOutputAngle(CDC * pDC, float angle)
...{
ASSERT(pDC);

CFont * pFont=NULL,
NewFont;
LOGFONT LogFont;

if (NULL == (pFont = pDC->GetCurrentFont()) // 获得原来字体
return;

if (! pFont->GetLogFont(&LogFont)) // 获得字体描述结构体
return;

LogFont.lfEscapement = angle*10; // 修改输出角度

if (NewFont.CreateFontIndirect(&LogFont)) // 生成新字体
return;

pDC->SelectObject(NewFont); // 应用新字体
}


使用这个函数:
正常输出:SetTextOutputAngle(pDC, 0);
斜向上45度:SetTextOutputAngle(pDC, 45);
从上往下:SetTextOutputAngle(pDC, -90);
调用了函数之后,所有调用这个DC输出的文字都会按相应的角度输出,但重新设置了字体后,设置将失效。
事实上,通过对LOGFONT结构体内变量的控制,我们可以实现很多有趣的功能,如让字体变胖、变瘦、变歪、变成粗体字、细体字等,有

兴趣的朋友可以自己研究。

你可能感兴趣的:(struct,null,360,float,byte,文本编辑)