2798|3

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WINCE不支持斜角输出字符串吗?? [复制链接]

   
    使用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结构体内变量的控制,我们可以实现很多有趣的功能,如让字体变胖、变瘦、变歪、变成粗体字、细体字等,有兴趣的朋友可以自己研究。

文章出处:http://www.diybl.com/course/3_program/vc/vc_js/20071222/92950.html

我要在wince上实现以上倾斜90度显示字符串,能编译通过,但是画不出来!!

请问有没有高手知道如何解决??

最新回复

谢谢!确实90改成270就能画出来了.  详情 回复 发表于 2008-12-23 10:53
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
显示不出来,肯定是你的参数或用法不对!

可以肯定的是:这个功能可以实现。
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
-90,应该写成:270
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢!确实90改成270就能画出来了.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
直播报名最后1周:艾迈斯欧司朗 OSP 开放协议,从氛围灯动态照明到传感器交互融合
直播时间:4月22日(周二)10:00
直播奖励:京东卡、蓝牙温湿度计、定制水杯

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 15

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表