关于字体间距的一个小问题,回答马上给分. 我要用drawtext输出几行字符串时,发现字符对齐有问题.例如"B"就比"1"宽多了,10个'B'组成的一行比十个'1'组成的一行宽多了...有没有什么简便的方法可以解决这个问题???使得不同宽度组成的字符宽度也一样? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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, //字体间距和字体集因为没有做过,只能给你提点见意了 不行的...CDC有一个成员函数也可以设置字体间距,但是很不幸.:( 1.你可以用ExtTextOut,这里的最后一个参数是调整字间距的,你设置等长的就可以了,你可以用这个办法去做。2.用DrawText的话得先知道Rect的大小,或者至少先知道要在多宽的地方显示文字,这样可以把Rect设置成这么宽,然后DrawText,再用SetTextJustification这个函数调整就可以了 如果你使用的不是等宽字体,可能需要自已定义一个固定宽度,然后一个字符一个字符写。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;} 可以直接使用等宽字体: SelectObject(hdc,GetStockObject(ANSI_FIXED_FONT)); //DrawText(...) 相同的dll用MFC调用就行,用C++调用就报错 请问类似CSplitterWnd的拖动效果是怎么实现的 能不能将物理上一块硬盘分成逻辑上的两块硬盘? delete 出错!问? vc来操作sql数据库时出现的一个小问题 CString ,CSocket 之类的对象要手工释放内存吗? 求一api函数 是我的问题吗? 哪位大哥有用CTabCtrl控件的例子,小弟不胜感激!! (100高分悬赏)txt文件操作 与格式转换的问题!!?? 问关于与对话框中控件作用的问题 急问:怎么实现动态移动图形?
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, //字体间距和字体集
因为没有做过,只能给你提点见意了
CDC有一个成员函数也可以设置字体间距,但是很不幸.:(
2.用DrawText的话得先知道Rect的大小,或者至少先知道要在多宽的地方显示文字,这样可以把Rect设置成这么宽,然后DrawText,再用SetTextJustification这个函数调整就可以了
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;
}
//DrawText(...)