博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文字输出
阅读量:6456 次
发布时间:2019-06-23

本文共 2409 字,大约阅读时间需要 8 分钟。

字体显示

 

章节宗旨:使用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/archive/2012/01/10/2318485.html

你可能感兴趣的文章
Entity Framework技术系列之2:三种开发模式实现数据访问
查看>>
SpringMVC 处理器执行链 (HandlerMapping)的执行过程
查看>>
Oracle EBS-SQL (PO-14):检查报价单与成本对比.sql
查看>>
react组件间传值详解
查看>>
Exceptions: Database Exceptions (MSDN)
查看>>
prettytable模块(格式化打印内容)
查看>>
淘宝一月上钻是这样操作的
查看>>
Debugging Failed Because Integrated windows authentication is not enabled
查看>>
hdu-1541-Stars (树状数组)
查看>>
ASP.NET中的Request、Response、Server对象
查看>>
【Foreign】不等式 [数论]
查看>>
【Foreign】Game [博弈论][DP]
查看>>
【AtCoder Grand Contest 007E】Shik and Travel [Dfs][二分答案]
查看>>
python中文问题汇总
查看>>
jQuery基础学习
查看>>
[数据结构]Java 基于链表和泛型的栈结构
查看>>
如何搞定SVN目录的cleanup问题和lock问题
查看>>
MFC 堆栈溢出 test dword ptr [eax],eax ; probe page.
查看>>
作业调度框架 Quartz.NET 2.0 StepByStep
查看>>
mysqldump 导出失败:Can't create/write to file (Errcode: 13) when executing 'SELECT INTO OUTFILE'
查看>>