Windows程序设计--文本输出(二)
2015-11-01 22:07
441 查看
今天要详细讲解一下TEXTOUT,它是显示文本最重要的GDI函数。CSDN是这样描述的:
The TextOut function writes a character string at the specified location, using the currently selected font, background color, and text color.
我们看看他的原型:
第一个参数就是设备环境句柄;
第二第三个参数决定了输出字符串在客户区的起始位置,注意的是该坐标为逻辑坐标,是相对于client的;
第四个参数是指向字符串的指针;
第五个参数是字符串中的字符数。
下面是简单应用:
TextOut函数完成了文本的输出,但是输出文本的字体、大小等属性却不是由TextOut来控制的,还是需要我们之前所说的设备环境。
那接下来不得不提就是函数GetTextMetrics,该函数把程序当前的字体信息,存放到TEXTMETRIC中。
TEXTMETRIC又是什么鬼?
windows把字符尺寸的各种值复制到类型为TEXTMETRIC的结构中。这个结构体有20个字段,我们关心几个;
注意tmHeight = tmAscent+tmDescent。
现在是时候看下函数GetTextMetrics了,原型如下:
hdc:设备环境句柄。
lptm:指向结构TEXTMETRIC的指针,该结构用于获得字体信息。
返回值:如果函数调用成功,返回值非零,如果函数调用失败,返回值是0。
The TextOut function writes a character string at the specified location, using the currently selected font, background color, and text color.
我们看看他的原型:
BOOL TextOut( _In_ HDC hdc, _In_ int nXStart, _In_ int nYStart, _In_ LPCTSTR lpString, _In_ int cchString );
第一个参数就是设备环境句柄;
第二第三个参数决定了输出字符串在客户区的起始位置,注意的是该坐标为逻辑坐标,是相对于client的;
第四个参数是指向字符串的指针;
第五个参数是字符串中的字符数。
下面是简单应用:
// Obtain the window's client rectangle GetClientRect(hwnd, &r); // THE FIX: by setting the background mode // to transparent, the region is the text itself // SetBkMode(hdc, TRANSPARENT); // Bracket begin a path BeginPath(hdc); // Send some text out into the world TCHAR text[ ] = "Defenestration can be hazardous"; TextOut(hdc,r.left,r.top,text, ARRAYSIZE(text)); // Bracket end a path EndPath(hdc); // Derive a region from that path SelectClipPath(hdc, RGN_AND); // This generates the same result as SelectClipPath() // SelectClipRgn(hdc, PathToRegion(hdc)); // Fill the region with grayness FillRect(hdc, &r, GetStockObject(GRAY_BRUSH));
TextOut函数完成了文本的输出,但是输出文本的字体、大小等属性却不是由TextOut来控制的,还是需要我们之前所说的设备环境。
那接下来不得不提就是函数GetTextMetrics,该函数把程序当前的字体信息,存放到TEXTMETRIC中。
TEXTMETRIC又是什么鬼?
windows把字符尺寸的各种值复制到类型为TEXTMETRIC的结构中。这个结构体有20个字段,我们关心几个;
typedef struct tagTEXTMETRIC { /* tm */ int tmHeight; //字符高度 int tmAscent; //字符上部高度 int tmDescent; //字符下部高度 int tmInternalLeading;//由tmHeight定义的字符高度的顶部空间数目 int tmExternalLeading;//夹在两行之间的空间数目 int tmAveCharWidth; //平均字符宽度 int tmMaxCharWidth;//最宽字符的宽度 ... } TEXTMETRIC;
注意tmHeight = tmAscent+tmDescent。
现在是时候看下函数GetTextMetrics了,原型如下:
BOOL GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm);
hdc:设备环境句柄。
lptm:指向结构TEXTMETRIC的指针,该结构用于获得字体信息。
返回值:如果函数调用成功,返回值非零,如果函数调用失败,返回值是0。
TEXTMETRIC tm; hdc = GetDc(hwnd); GetTextMetrics(hdc, &tm); TextOut();
相关文章推荐
- [NOIP 2001]数的划分 DP
- 关于SQLServer2008数据如何导入SQL2005的解决办法,高版本数据导入低版本中。
- Android之线程池的使用
- 技术帖子
- 使用传统Android组件实现高效数据加载
- [NOIP 2004]合唱队形 DP
- rgba()兼容IE8
- 笔试题目整理
- Java Web基础——Action+Service +Dao三层的功能划分
- 海量数据处理方法归类
- hdoj 5536 Chip Factory 【字典树】
- hdoj 5538 House Building 【正反扫 求表面积 简单题】
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- hdoj 5532 Almost Sorted Array 【LIS】
- hdoj 5533 Dancing Stars on Me 【醉了 o(╯□╰)o】
- [NOIP 2013]积木大赛 贪心
- 以前整理的C++资料(二)
- RHEL7系列之进程管理
- 深度学习 vs. 概率图模型 vs. 逻辑学
- hihocoder王胖浩与三角形【海伦公式+分类讨论】