美文网首页
Windows程序设计-输出文本

Windows程序设计-输出文本

作者: 故事观察日记 | 来源:发表于2020-04-22 18:57 被阅读0次

    这一篇的目标是实现在上一篇创建的窗口中添加一些文本。对应《Windows程序设计》第四章。
    1.绘制和重绘的概念
    一些情况下,Windows需要程序重新绘制窗口客户区(比如窗口被其它窗口遮住一部分,当其它窗口被移开时)。这时Windows通过向适当的窗口过程发送WM_PAINT消息,来通知窗口过程其客户区需要重绘
    需要重新绘制的部分被称为“无效区域”或“更新区域”,Windows内部为每一个窗口都保存了一个“绘制信息结构”,这个结构保存着一个可以覆盖该无效区域的最小矩形的坐标和一些其他的信息,这个最小矩形被称为“无效矩形”。
    窗口过程在处理WM_PAINT消息时,在调用BeginPaint函数后,整个客户区会变成有效的。
    绘制信息结构:

    typedef struct tagPAINTSTRUCT
    {
        HDC      hdc;
        BOOL     fErase;
        RECT     rcPaint;
        BOOL     fRestore;
        BOOL     fIncUpdate;
        BYTE     rgbReserved[32];
    } PAINTSTRUCT;
    

    当调用BeginPaint函数时,Windows将自动填充这个结构中的字段。程序只能够使用前三个字段,其它的供Windows内部使用。hdc字段是设备环境句柄,BeginPaint函数的返回值就是它的值。
    2.GDI简介
    GDI是Windows的图形设备接口。就是用它来绘制窗口的客户区。
    Windows提供了几个GDI函数用于在客户区内输出字符串,其中最常用的是TextOut函数。该函数格式如下:

    TextOut (hdc, x, y, psText, iLength);
    

    参数psText是指向字符串的指针,参数iLength是字符串的长度,参数xy 定义了字符串在客户区中的开始位置,参数hdc是一个设备环境句柄(Handle Device Context)。几乎所有的GDI函数都需要这个句柄作为函数的第一个参数。
    设备环境(DC)是GDI内部维护的一个数据结构。对于视频显示,设备环境通常与屏幕上的一个特定窗口相关联。
    Windows应用程序需要在屏幕上绘图时,通常有两种方法获取设备环境句柄。方法一是处理WM_PAINT消息时使用BeginPaint函数的返回值。通常处理代码如下:

    case WM_PAINT:
                hdc = BeginPaint(hwnd, &ps);
                [使用GDI函数]
                EndPaint(hwnd, &ps);
                return 0;
    

    参数hwnd是窗口句柄。参数&psPAINTSTRUCT结构变量的地址,通常在窗口过程中定义如下:

    PAINTSTRUCT ps;
    

    获取设备环境句柄的方法二,是使用GetDC函数。在使用完之后,调用ReleaseDC函数释放设备环境句柄:

    hdc = GetDC(hwnd);
    [使用GDI函数]
    ReleaseDC(hwnd, hdc);
    

    3.TEXTOUT函数使用
    基于以上内容,将上一篇中的代码改变如下:

    case WM_PAINT:
                hdc = BeginPaint(hwnd, &ps);
                char* text = "START GAME";
                TextOut(hdc, 500, 300, text, 10);
                EndPaint(hwnd, &ps);
                return 0;
    

    重新编译并手动连接使用TextOut函数需要用到的libgdi32.a库:

    gcc hellowin.c -o hellowin.exe  D:/MinGW/lib/libgdi32.a
    

    得到.exe可执行文件,执行结果如下:


    界面

    好了,第四章的内容就看到这里,下一篇开始学习第五章。

    相关文章

      网友评论

          本文标题:Windows程序设计-输出文本

          本文链接:https://www.haomeiwen.com/subject/glcwihtx.html