关于字体间距的一个小问题,回答马上给分.

clane 2003-12-16 03:05:00
我要用drawtext输出几行字符串时,发现字符对齐有问题.例如"B"就比"1"宽多了,10个'B'组成的一行比十个'1'组成的一行宽多了...有没有什么简便的方法可以解决这个问题???使得不同宽度组成的字符宽度也一样?
...全文
267 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ross33123 2003-12-16
  • 打赏
  • 举报
回复
如果设置成宋体也不行

那就检查是不是真的设置成宋体了
hezhudao 2003-12-16
  • 打赏
  • 举报
回复
可以直接使用等宽字体:

SelectObject(hdc,GetStockObject(ANSI_FIXED_FONT));
//DrawText(...)
chehw 2003-12-16
  • 打赏
  • 举报
回复
如果你使用的不是等宽字体,可能需要自已定义一个固定宽度,然后一个字符一个字符写。
SIZE size;
int cx=10; //可为任一指定的宽度。
TCHAR szBuffer[MAX_PATH]=...;//要显示的字符串。
int i;
//为简化程序,假设不含大于127的字符。如有中文需额外处理一下。
int x,y;
x=xLeft; //xLeft, yTop=文字的起始位置;
y=yTop;
for(i=0;i<lstrlen(szBuffer);i++)
{
GetTextExtentPoint32(hdc, &szBuffer[i], 1, &size);
//每个字符在固定宽度内居中显示。
TextOut(hdc, x+(cx-size.cx)/2,y, &szBuffer[i], 1);
x+=cx;
}
huqitu 2003-12-16
  • 打赏
  • 举报
回复
1.你可以用ExtTextOut,这里的最后一个参数是调整字间距的,你设置等长的就可以了,你可以用这个办法去做。
2.用DrawText的话得先知道Rect的大小,或者至少先知道要在多宽的地方显示文字,这样可以把Rect设置成这么宽,然后DrawText,再用SetTextJustification这个函数调整就可以了
clane 2003-12-16
  • 打赏
  • 举报
回复
第一个想到的方法就是这个.
但我设置成宋体也不行阿...汗....
wy2001wy 2003-12-16
  • 打赏
  • 举报
回复
9494,用等宽字体啊.
ross33123 2003-12-16
  • 打赏
  • 举报
回复
是啊,为什么不选择等宽字体呢?
bluebohe 2003-12-16
  • 打赏
  • 举报
回复
"B"就比"1"宽多了只字体特性,你只有通过改变字体才可能实现你的功能,系统有一些等宽字体,比如宋体等等,好多字体都是等宽字体
clane 2003-12-16
  • 打赏
  • 举报
回复
不行的...
CDC有一个成员函数也可以设置字体间距,但是很不幸.:(
carbon107 2003-12-16
  • 打赏
  • 举报
回复
BOOL CreateFont(
int nHeight, //字体的高度
int nWidth, //字体的宽度
int nEscapement, //字体显示的角度
int nOrientation, //字体的角度
int nWeight, //字体的磅数
BYTE bItalic, //斜体字体
BYTE bUnderline, //带下划线的字体
BYTE cStrikeOut, //带删除线的字体
BYTE nCharSet, //所需的字符集
BYTE nOutPrecision, //输出的精度
BYTE nClipPrecision, //裁减的精度
BYTE nQuality, //逻辑字体与输出设备的实际
//字体之间的精度
BYTE nPitchAndFamily, //字体间距和字体集
LPCTSTR lpszFacename //字体名称
);
是不是要用到这个参数呢?
BYTE nPitchAndFamily, //字体间距和字体集


因为没有做过,只能给你提点见意了
ISunwu 2003-12-16
  • 打赏
  • 举报
回复
不太好做.有一种字体是所有字符宽度都是一样的,你可以试试.
帮你顶一下.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧