zoukankan      html  css  js  c++  java
  • 文字输出

    字体显示

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

    获得每一个字符的高度。

    格式化文字

     

    基本要求算是完结

  • 相关阅读:
    Java StringBuilder、基本类型的包装类
    立个Flag不学好PHP誓不罢休
    LAMP搭建 转
    CentOS使用yum源中自带的rpm包安装LAMP环境
    CentOS RedHat YUM 源扩展补充(32位、64位均有)
    解决phpmyadmin上传文件大小限制的配置方法
    lanmp v2.5一键安装包发布(包括lamp,lnmp,lnamp安装)
    图像处理 jpg png gif svg
    NAT模式/路由模式/全路由模式 (转)
    网页制作中绝对路径和相对路径的区别
  • 原文地址:https://www.cnblogs.com/hatreds/p/2318485.html
Copyright © 2011-2022 走看看