文字输出

字体显示

章节宗旨:使用Windows 提供的功能来取得关於程式执行环境的资讯

1. WM_PAINT 消息

大多数Windows 程式在WinMain 中进入讯息回圈之前的初始化期间都要呼

叫函式UpdateWindow。Windows 利用这个机会给视窗讯息处理程式发送第一个

WM_PAINT 讯息。这个讯息通知视窗讯息处理程式:必须绘制显示区域。此後,

视窗讯息处理程式应在任何时刻都准备好处理其他WM_PAINT 讯息,必要的话,

甚至重新绘制视窗的整个显示区域。在发生下面几种事件之一时,视窗讯息处

理程式会接收到一个WM_PAINT 讯息:

在使用者移动视窗或显示视窗时,视窗中先前被隐藏的区域重新可见。

使用者改变视窗的大小(如果视窗类别样式有著CS_HREDRAW 和CS_VREDRAW

位元旗标的设定)。

程式使用ScrollWindow 或ScrollDC 函式滚动显示区域的一部分。

程式使用InvalidateRect或InvalidateRgn函式刻意产生WM_PAINT讯息。

在某些情况下,显示区域的一部分被临时覆盖,Windows 试图保存一个显示

区域,并在以後恢复它,但这不一定能成功。在以下情况下,Windows 可能发送

WM_PAINT 讯息:

Windows 擦除覆盖了部分视窗的对话方块或讯息方块。

功能表下拉出来,然後被释放。

显示工具提示讯息。

在某些情况下,Windows 总是保存它所覆盖的显示区域,然後恢复它。这些

情况是:

滑鼠游标穿越显示区域。

图示拖过显示区域。

GDI

 

讲解GDI的时候没有过多的解释什么,个人理解应该要表述的GDI应该是对于一系列对于外部接入设备(显示器)能够交互的一组函数。然后介绍了一下第一个参数hdc翻译为装置内容代号。

装置内容

 

装置内容实际上市GDI 内部保存的资料结构。装置内容与特定的显示设备相关。对于显示器装置内容与显示器上特定的视窗相关。(hdc为一个装置内容的代号,通过这个可以操作这个所谓的装置内容)。

装置内容中的有些值是图形属性,这些属性定义了GDI绘图函数工作的细节。 个人理解就是所有在屏幕上显示的一些东西,所谓的装置内容(DC)都有与之对应的属性。字体有颜色字体大小。图像有各种各样的图像还有等等各种属性。

另外使用之前必须获得装置内容的代号(也就是DC句柄)。

每个信息只能使用一个装置内容代号(后面不在用着拗口名字,直接用句柄),每个信息的处理过程中,必须获取句柄和是放假句柄同时存在。每个信息是重点,也就是不能再这个信息里面申请的DC句柄,然后在另外一个小心里面使用。 但是貌似有过一个CreateDC函数不是这样。

取得DC(装置内容代号)方法1

 

BeginPaint 和 EndPaint方法

HDC BeginPaint(
  __in   HWND hwnd,
  __out  LPPAINTSTRUCT lpPaint
);

第一个参数将要被重画的窗体句柄,第二个参数一个指向PAINTSTRUCTURE 的指针。返回的也就是所谓的装置内容代号(DC句柄)。小例子一枚

绘图咨询结构(PAINTSTRUCTURE

typedef struct tagPAINTSTRUCT

{

HDC hdc ;

BOOL fErase ;

RECT rcPaint ;

BOOL fRestore ;

BOOL fIncUpdate ;

BYTE rgbReserved[32] ;

} PAINTSTRUCT ;

使用BeginPaint函数前,用户和操作系统应该填充其中的一些值。使用者只需控制前三项。其他的是windows内部使用。

第三个参数应该是最为重要,使用它我们可以控制我们将要操作的无效矩形的大小(所谓无效举行可以理解为通过WM_PAINT将要改变的矩形)

 

取得DC句柄(装置内容代号)方法2

HDC GetDC(
  __in  HWND hWnd
);

参数将要获得这个DC句柄的窗体句柄

int ReleaseDC(
  __in  HWND hWnd,
  __in  HDC hDC
);

参数 窗体句柄,DC句柄

TextOut细节

BOOL TextOut(
  __in  HDC hdc,
  __in  int nXStart,
  __in  int nYStart,
  __in  LPCTSTR lpString,
  __in  int cchString
);

第一个参数DC句柄,可以使前面介绍的GetDC和BeginPaint任何一个返回句柄的函数返回的对象。DC的属性控制了被现实字符创的特征。颜色大小等等。

nXStart 和 nYStart 控制了字符串的开始时候的坐标,从左上角开始数。

LPCTSTR lpString 将要显示的字符串

Int cchString 将要显示字符串个数

系统字体

 

HDC还同时定义了呼叫TextOut时候windows使用的字体。内定为系统字体。但是可以使用表头文件中的识别字。SYSTEM_FONT.

字体大小

 

控制字体大小的总体思路,获取整个窗体的像素数,然后获得每一个字符的像素数,然后就可以获得屏幕大小中可以容纳的行数。

int WINAPI GetSystemMetrics(
  __in  int nIndex
);

可以通过这个获得一系列系统的各种参数。

BOOL GetTextMetrics(
  __in   HDC hdc,
  __out  LPTEXTMETRIC lptm
);

获得每一个字符的高度。

格式化文字

 

基本要求算是完结

原文地址:https://www.cnblogs.com/hatreds/p/2318485.html