TextOut是用於显示文字的最常用的GDI函式。语法是:
TextOut(hdc,x,y,psText,iLength);
以下将详细地讨论这个函式。
第一个参数是装置内容代号,它既可以是GetDC的传回值,也可以是在处理WM_PAINT讯息时BeginPaint的传回值。
装置内容的属性控制了被显示的字串的特徵。例如,装置内容中有一个属性指定文字颜色,内定颜色为黑色;内定装置内容还定义了白色的背景。在程式向显示器输出文字时,Windows使用这个背景色来填入字元周围的矩形空间(称为「字元框」)。
该
文字背景色与定义视窗类别时设置的背景并不相同。视窗类别中的背景是一个画刷,它是一种纯色或者非纯色组成的画刷,Windows用它来擦除显示区域,它
不是装置内容结构的一部分。在定义视窗类别结构时,大多数Windows应用程式使用WHITE_BRUSH,以便内定装置内容中的内定文字背景颜色与
Windows用以擦除显示区域背景的画刷颜色相同。
psText参数是指向字串的指标,iLength是字串中字元的个数。如果
psText指向Unicode字串,则字串中的位元组数就是iLength值的两倍。字串中不能包含任何ASCII控制字元(如回车、换行、制表或退
格),Windows会将这些控制字元显示为实心块。Text0ut不识别作为字串结束标志的内容为零的位元组(对於Unicode,是一个短整数型态的
0),而需要由nLength参数指明长度。
TextOut中的x和y定义显示区域内字串的开始位置,x是水平位置,y是垂直位置。
字串中第一个字元的左上角位於座标点(x,y)。在内定的装置内容中,原点(x和y均为0的点)是显示区域的左上角。如果在TextOut中将x和y设为
0,则将从显示区域左上角开始输出字串。
当您阅读GDI绘图函式(例如TextOut)的文件时,就会发现传递给函式的座标常常被称
为「逻辑座标」。在第五章会详细地解释这种情况。现在请注意,Windows有许多「座标映射方式」,它们用来控制GDI函式指定的逻辑座标转换为显示器
的实际图素座标的方式。映射方式在装置内容中定义,内定映射方式是MM_TEXT(使用WINGDI.H中定义的识别字)。在MM_TEXT映射方式下,
逻辑单位与实际单位相同,都是图素;x的值从左向右递增,y的值从上向下递增(参看图4-2)。MM_TEXT座标系与Windows在
PAINTSTRUCT结构中定义无效矩形时使用的座标系相同,这为我们带来了很多方便(但是,其他映射方式并非如此)。
装置内容也
定义了一个剪裁区域。您已经看到,对於从GetDC取得的装置内容代号,内定剪裁区域是整个显示区域;而对於从BeginPaint取得的装置内容代号,
则为无效区域。Windows不会在剪裁区域之外的任何位置显示字串。如果一个字元有一部分在剪裁区域外,则Windows将只显示此区域内的那部分。要
想将输出写到视窗的显示区域之外不是那么容易的,所以不用担心会无意间出现这种事情。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 11">
<meta name="Originator" content="Microsoft Word 11">
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CJACKY_%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT
ps;
HDC hdc;
TCHAR
szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent
= HIWORD(wParam);
//
Parse the menu selections:
switch
(wmId)
{
case
IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case
IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc
= BeginPaint(hWnd, &ps);
//
TODO: Add any drawing code here...
RECT
rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_LEFT);
//TextOut
WINGDI.h
//WINGDIAPI
BOOL WINAPI TextOutA(HDC, int, int,
LPCSTR, int);
//WINGDIAPI
BOOL WINAPI TextOutW(HDC, int, int,
LPCWSTR, int);
TextOut(hdc, 0, 15, szHello, strlen(szHello));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return
DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
分享到:
相关推荐
这个话题“手动读取bmp并textout显示”关注的是如何使用C++或类似语言来处理BMP文件,并通过GDI函数在窗口上显示。BMP是一种常见的位图图像格式,它存储了像素数据以及图像的宽度、高度和颜色信息。 首先,理解BMP...
这个压缩包“GDI输出文字1_GDI文字_gdi输出文字_vbgdi.zip”很可能是关于如何使用GDI在Windows程序中实现文字输出的教程或示例代码,特别是与VB(Visual Basic)编程相关的。 GDI的核心功能之一就是文本渲染。在...
本案例重点讲解了如何在Win32环境下利用GDI进行文字的显示与处理。通过VS2008(Visual Studio 2008)作为开发环境,我们可以深入理解GDI文字操作的步骤和技巧。 首先,我们需要了解GDI中的基本概念。GDI是一个面向...
GDI文字输出的核心在于使用`TextOut`函数,这个函数允许开发者指定一个设备上下文(Device Context,DC)、坐标位置和要显示的文本字符串。例如: ```cpp HDC hdc = GetDC(hwnd); // 获取窗口的设备上下文 TextOut...
4. **绘制原始文字**:调用`TextOut`函数在指定位置绘制原始文字,但不显示,这一步是为了后续的描边操作。 5. **描边处理**:使用`SetROP2`函数设置绘图模式,如R2_NOT用于反转颜色,R2_XOR用于异或操作,从而达到...
6. **绘制文字**:使用`TextOut()`函数在设备上下文中绘制文字。由于坐标系统已旋转,文字会按照设定的角度显示。 7. **恢复坐标系统**:为了不影响后续的绘图,使用`SetWorldTransform()`或`ModifyWorldTransform...
我在对话框里可以用CDC::TextOut显示文字,一开始想把子窗口放到Z轴的最下面,这样对话框上的文字就可以显示了,生成、设置子窗口位置的代码如下,利用设置位置的HWND_BOTTOM: [code=C/C++]m_hDisplay = ...
iOS上使用TextOut输出文字,文字沿着半圆Path绘制
在MFC(Microsoft Foundation Classes)框架中,实现文字从右向左竖排显示涉及对文本布局和方向的深入理解。这种显示方式常见于阿拉伯语、希伯来语等语言,但在处理中文时需要特别定制。这里我们将探讨如何在MFC应用...
标题中的"GDI文字描边.rar"表明这是一个关于使用Windows图形设备接口(GDI)进行文本描边的技术资源。GDI是Microsoft Windows操作系统提供的一种编程接口,用于处理图形、文本和其他视觉元素的绘制。在这个压缩包中...
以上就是使用VC++和Windows GDI显示倾斜文字的基本流程。当然,现代的C++开发往往倾向于使用Qt、wxWidgets、MFC等库,它们提供了更高级别的接口,可以更容易地实现类似的功能。不过,了解底层的GDI工作原理对于理解...
在易语言中实现GDI或GDI+的文字描边是一项重要的技术,它可以让文本在界面上更加突出,提升视觉效果。文字描边通常是通过在原始文字的基础上,沿着文字边缘描绘出一条颜色不同的轮廓来实现的。这种效果在各种软件...
在“易语言GDI文字描边源码.rar”这个压缩包中,包含的是使用易语言编写的图形设备接口(GDI)的文字描边源代码。GDI是Windows操作系统提供的一种用于处理图形、文本和图像的编程接口。 首先,我们要理解什么是GDI...
对于“文字”,GDI提供了`TextOut`, `ExtTextOut`等函数来输出文本,可以控制字体、大小、颜色和对齐方式。还可以使用`SelectObject`函数选择不同的字体对象,以改变文字的样式。 至于“图片”,GDI支持位图操作,...
半透明,也称为alpha混合,是一种图形处理技术,允许元素(如文字)的部分或全部透过背景显示。在Windows应用程序中,通过设置像素的Alpha通道值可以实现这种效果。Alpha通道的取值范围是0(完全透明)到255(完全...
在GDI中,绘制文字的关键在于CreateDC和TextOut函数。CreateDC用于创建一个设备上下文(Device Context,DC),它是GDI中所有图形操作的基础。DC包含了关于设备的所有信息,例如屏幕分辨率、颜色深度等,它就像一个...
"易语言GDI取文字输入源码"可能包含了上述的实现逻辑,包括键盘事件处理、缓冲区管理、GDI绘图函数的调用等。通过阅读和理解这段源码,开发者可以更深入地了解如何在易语言中应用GDI进行文本输入的处理。 总的来说...
如果需要更复杂的功能,如动态更新或交互式文字,可以创建一个自定义控件,继承自TImage,并在其中重写OnPaint事件,利用Canvas进行文字绘制。这将使你可以完全控制文字的显示方式和交互行为。 4. **结合位图操作*...
在GDI中,可以使用 TextOut 或 ExtTextOut 函数在图像上绘制文字,同时调整透明度和位置,以达到理想的效果。 5. **去白边**:去白边处理主要用于去除图像边缘的白色背景,使其更加自然。这个功能在ExDui群雨落无声...