文本输出方法与字体的设置


学习目的

掌握获取字体句柄的两种方法;调用CreateFont函数创建自定义字体; 调用SetTextColor和SetBkColor函数设置字体的颜色和背景色; 掌握文本输出的过程(获取字体信息, 格式化文本, 输出文本).

?

1. 掌握获取字体句柄的方法:

HFONT hF; //定义字体句柄变量hF

hF=GetStockObject(); //获得系统字体句柄

SelectObject(hdc,hF); //将字体选入设备环境

?

2. CreateFont函数创建自定义字体

HFont = CreateFont(

int
nHeight
, // height of font

int
nWidth
, // average character width

int
nEscapement
, // angle of escapement

int
nOrientation
, // base-line orientation angle

int
fnWeight
, // font weight

DWORD
fdwItalic
, // italic attribute option

DWORD
fdwUnderline
, // underline attribute option

DWORD
fdwStrikeOut
, // strikeout attribute option

DWORD
fdwCharSet
, // character set identifier

DWORD
fdwOutputPrecision
, // output precision

DWORD
fdwClipPrecision
, // clipping precision

DWORD
fdwQuality
, // output quality

DWORD
fdwPitchAndFamily
, // pitch and family

LPCTSTR
lpszFace
// typeface name

);

3.设置字体的颜色和背景色

SetTextColor(hdc,crColor); //设置字体颜色

SetBkColor(hdc,crColor); //设置背景色色

4.
掌握文本输出的过程

(1)获取字体信息

GetTextMetrics(hdc,&tm);

(2) 格式化文本

用GetTextExtentPoint32()确定后续文本的坐标,然后根据当前字体信息确定换行后的坐标。

(3) 输出文本

使用TextOut或者DrawText输出文本:

BOOL TextOut(
  HDC
										hdc,           // handle to DC
  int
										nXStart,       // x-coordinate of starting position
  int
										nYStart,       // y-coordinate of starting position
  LPCTSTR
										lpString,  // character string

									 int
									cbString       // number of characters
);
								
int DrawText(
HDC hDC,          // handle to DC
  LPCTSTR lpString, // text to draw  
									
int nCount,       // text length
									
  LPRECT lpRect,    // formatting dimensions
									
  UINT uFormat
									 // text-drawing options
									
);

5.编写程序: 在窗口上设计一行文字, 要求文字能在窗口中向左滚动显示, 而且每显示一轮, 改变一次颜色和字体.

程序主要代码如下:

static int Flag=0;

int X=0;

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

????int wmId, wmEvent;

????PAINTSTRUCT ps;

????HDC hDC;

????RECT clientRect;

????//TCHAR szHello[MAX_LOADSTRING];

????//LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

????HFONT hF;????????????

????TEXTMETRIC tm;????

????char text[]="Windows 程序设计实验三";????????//输出的字符串.

????char chFont[7];????????????????????????????????//定义包含字体的字符串.

????int xOrg,yOrg,Y=0,nCharlen=strlen(text);

????switch (message)

????{

????????case WM_CREATE:

????????SetTimer(hWnd,1,50,NULL);????????//设定定时器.每0.2秒发出WM_TIMER消息.

????????break;

????????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);

????????????GetClientRect(hWnd,&clientRect);

????????????xOrg=(clientRect.left+clientRect.right)/2;

????????????yOrg=(clientRect.top+clientRect.bottom)/2;

?

????????????SetViewportOrgEx(hDC,0,yOrg,NULL);

????????????// TODO: Add any drawing code here...

?

????????????if(Flag%4==0)????//设置字体颜色.

????????????{

????????????????SetTextColor(hDC,RGB(255,0,0));

????????????????strcpy(chFont,"楷体");

????????????}

????????????else if(Flag%4==1)

????????????{

????????????????SetTextColor(hDC,RGB(0,255,0));

????????????????strcpy(chFont,"宋体");

????????????}

????????????else if(Flag%4==2)

????????????{

????????????????SetTextColor(hDC,RGB(0,0,255));

????????????????strcpy(chFont,"仿宋体");

????????????}

????????????else if(Flag%4==3)

????????????{

????????????????SetTextColor(hDC,RGB(255,255,0));

????????????????strcpy(chFont,"黑体");

????????????}

????????????hF=CreateFont(????????????//获得字体句柄.

????????????????100,????????????????//字体高度

????????????????0,????????????????????//系统自动调整宽度.

????????????????0,????????????????????//文本水平

????????????????0,????????????????????//字体倾斜度为0

????????????????400,????????????????//字体粗度.400为正常.

????????????????0,????????????????????//字体不倾斜.

????????????????0,????????????????????//无下划线.

????????????????0,????????????????????//无中划线.

????????????????GB2312_CHARSET,????????//字符集

????????????????OUT_DEFAULT_PRECIS,????//默认输出精度.

????????????????CLIP_DEFAULT_PRECIS,//默认裁剪精度

????????????????DEFAULT_QUALITY,????//默认输出质量.

????????????????DEFAULT_PITCH|FF_DONTCARE,//默认间距

????????????????chFont);???????? //字体名称.

?

????????????SelectObject(hDC,hF);????//选入字体.

????????????GetTextMetrics(hDC,&tm);????//得到字体的信息.

????????????TextOut(hDC,X,Y-tm.tmHeight/2,&text[0],nCharlen); //输出.

?

????????????X-=10;

????????????if(X+tm.tmAveCharWidth*nCharlen<0){

????????????????Flag++;

????????????????if(Flag==4)

????????????????????Flag=0;

????????????????X=clientRect.right;

????????????}

?

????????????DeleteObject(hF);????//删除字体.

????????????EndPaint(hWnd, &ps);

????????????break;

????????case WM_TIMER:

????????InvalidateRect(hWnd,NULL,1);????//刷新用户区.

????????break;

????????case WM_DESTROY:

????????????PostQuitMessage(0);

????????????break;

????????default:

????????????return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

编译并调试程序,


?

滚动文字运行结果如下图:

?

本次学习的涉及文本输出,需要注意Windows字符类型!

时间: 2024-10-01 04:07:29

文本输出方法与字体的设置的相关文章

第17章 文本和字体_17.1-17.2 简单文本输出、 字体的背景知识

17.1 简单文本输出 17.1.1 文本输出函数 (1)TextOut(hdc,xStart,yStart,pString,iCount) ①xStart和yStart使用的是逻辑坐标,TextOut并不以NULL来做字符串的结束,需指定字符的个数iCount的值 ②SetTextAlign会改变xStart和yStart的含义 SetTextAlign 坐标值的含义 TA_LEFT xStart:第一个字符的左侧坐标 TA_RIGHT xStart:最后一个字符的右侧坐标 TA_CENTER

VS2010/MFC字体和文本输出:文本输出

字体和文本输出:文本输出 本节主要讲解文本输出的方法和实例. 文本输出过程 在文本输出到设备以前,我们需要确定字体.字体颜色和输出的文本内容等信息.Windows窗口的客户区由应用程序管理,所以我们还要在应用程序中控制输出文本的格式,例如后续字符的位置.换行等格式. 由此,文本的输出过程大致包括确定字体信息.格式化文本和执行输出操作三个步骤.下面分别讲解. 1.确定字体信息 文本在输出以前应该先确定字体信息,或者是当前正在使用的字体,或者是自定义的字体,之后就可以根据确定的字体来显示文本或者利用

MFC字体与文本输出

字体 成员函数 1.CFont( ); 构造一个CFont对象.此对象在使用之前应该先使用CreateFont.CreateFontIndirect.CreatePointFont或CreatePointFontIndirect初始化. 2. BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cS

超链接字体颜色设置(通过html/css的设置方法)

超链接字体颜色设置是通过css来设置,a链接的颜色设置常用的有以下两种,1.超链接a的初始状态颜色,2.超链接字体的鼠标滑过颜色,还有两种病不常用:3.超链接字体的已访问颜色,4.超链接字体在按下鼠标时的颜色 四中超链接状态分别对应的css属性:a{}.a:hover{} .a:visited{}.a:active{},通常只写a{}.a:hover{}即可,如果你需要其他两种字体颜色设置请参照一下顺序来书写 a{color:red;} a:visited{color:green;} a:hov

spinner 设置文本框中的字体颜色

onItemSelected(AdapterView parent, View v, int position, long id) { TextView v1 = (TextView)v; v1.setTextColor(Color.WHITE); //可以随意设置自己要的颜色值 } 本文转自:http://bbs.csdn.net/topics/350049938 spinner 设置文本框中的字体颜色

Direct3D 10学习笔记(三)——文本输出

本篇将简单整理Direct3D 10的文本输出的实现,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅翻译的电子书<DirectX 10 3D游戏编程入门>). 1.填充D3DX10_FONT_DESC结构体 D3DX库提供了用于显示文本的ID3DX10Font接口.而要获取一个指向ID3DX10Font对象的指针,需要先填充一个D3DX10_FONT_DESC结构体,该结构体用于描述所创建的字体

JavaScript中String对象处理HTML标记中文本的方法

big():创建一个<big></big>标记,将这个字符串的字体变大blink():创建一个<blink></blink>标记,使字符串具有闪烁效果bold():创建一个<bold></bold>标记,使字符串加粗显示fixed():创建一个<tt></tt>标记,使字符串固定倾斜显示italics():创建一个<i></i>标记,使字符串以斜体显示small():创建一个<sm

css 字体样式设置

css字体样式(Font Style),属性 时间:2014-05-08 21:49 来源:我爱学习网 | 作者:我爱学习网 | 本文已影响 68353 人 css字体样式(Font Style)是网页中不可或缺的样式属性之一,有了字体样式,我们的网页才能变得更加美观,因此字体样式属性也就成为了每一位设计者必需了解的知识.以下是我精心整理的css字体样式属性知识,供大家学习参考: css文本样式 序号 中文说明 标记语法 1 字体样式 {font:font-style font-variant

CSS为英文和中文字体分别设置不同的字体

font-family的调用方法: div { font-family:Arial,'Times New Roman','Microsoft YaHei',SimHei; font:bold 12px/0.75em Arial,'Times New Roman','Microsoft YaHei',SimHei; } 根据font-family的原则,假如客户终端不认识前面的字体,就自动切换到第二种字体,第二种不认识就切换到第三种,以此类推.假如都不能识别就调用默认字体 根据font-famil