字符居中显示算法

目的:很多地方需要文字在中间显示,以改善显示效果,比如按键或矩形中间显示文字。

算法策略:

1. 用两个函数,分别计算返回需要显示文字的起始点x,y坐标。

2. 返回x起始点坐标:

2.1 计算客户区宽度(长度)的一半,(客户区半长)。

2.2 计算要显示文字长度的一半,(文字半长)。

2.3 计算返回:x起始点坐标 = 客户区半长 - 文字半长。


3. 返回y起始点坐标:

3.1 计算客户区高度的一半,(客户区半高)。

3.2 计算要显示文字高度的一半,(文字半高)。

3.3 计算返回:y起始点坐标 = 客户区半高 - 文字半高。

实现计算源程序:

int __fastcall TCRect::GetClientPosX(WORD wNum)//获取数字居中显示x位置
{
int iControlHalfWidth,iTextHalfWidth,iRe,iNumCount;

iControlHalfWidth = Width / 2;//控件宽度的一半
if(wNum < 10)
iNumCount = 1;
else
if(wNum < 100)
iNumCount = 2;
else
if(wNum < 1000)
iNumCount = 3;
else
if(wNum < 10000)
iNumCount = 4;
else
if(wNum < 100000)
iNumCount = 5;

switch(nbyFontSize)//根据当前字体大小,获得字体半宽
{
case def_FontSize_0808: iTextHalfWidth = (iNumCount * 8) / 2;
break;
case def_FontSize_1206: iTextHalfWidth = (iNumCount * 12) / 2;
break;
case def_FontSize_1608: iTextHalfWidth = (iNumCount * 16) / 2;
break;
}
iRe = iControlHalfWidth - iTextHalfWidth;

return iRe;
}

int __fastcall TCRect::GetClientPosY(WORD wNum)//获取数字居中显示y位置
{
int iControlHalfHeight,iTextHalfHeight,iRe;

iControlHalfHeight = Height / 2;//控件高度的一半
switch(nbyFontSize)//根据当前字体大小,获得半字体高度
{
case def_FontSize_0808: iTextHalfHeight = 4;
break;
case def_FontSize_1206: iTextHalfHeight = 3;
break;
case def_FontSize_1608: iTextHalfHeight = 4;
break;
}
iRe = iControlHalfHeight - iTextHalfHeight;//计算半高差
if(iRe < 0) iRe = 0;//防止负数出错

return iRe;
}

void __fastcall TCRect::SelfDraw(void)//自绘
{
if(bFillEnable) Draw.Fill(0, 0, Width, Height);//填充
if(bBorderEnable) Draw.Rect(0, 0, Width - 1, Height - 1);//-1实际尺寸小于控件
if(bTextEnable)//显示文本
{
switch(byAlignment)//显示文本
{
case def_TextAlignment_Left: Draw.IntToStr(4, GetClientPosY(123), 123);
break;
case def_TextAlignment_Center: Draw.IntToStr(GetClientPosX(123), GetClientPosY(123), 123);
break;
}
}
Draw.Updata();//更新绘制
}

posted @ 2016-03-23 18:24  hbg200  阅读(699)  评论(0编辑  收藏  举报