• 文字输出


    字体显示

    章节宗旨:使用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
    );

    获得每一个字符的高度。

    格式化文字

     

    基本要求算是完结

  • 相关阅读:
    ORACLE 查看进程数,已执行任务数, 剩余任务数,删除指定任务
    ORACLE 收集统计整个用户数据
    解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑
    利用 Maven 构造 Spring Cloud 微服务架构 模块使用 spring Boot构建
    AES加解密
    JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
    JAVA 文件的上传下载
    shell启停服务脚本模板
    JAVA 设计模式之 原型模式详解
    JAVA 设计模式之 工厂模式详解
  • 原文地址:https://www.cnblogs.com/hatreds/p/2318485.html
Copyright © 2020-2023  润新知