在《一个完好的Windows程序框架》一节中,我们运用 DrawText() 向客户区的两头地位输入了一段文本,但并没有具体说明,这节我们来重点说一下文字的输入。

装备情况(DC)

在Windows中,一切能在显示器上看到的多是图形,不只包含点、线、矩形、圆等,也包含文字、字体。对用户来说文字和图片是分歧的,但它们在实质上多是图形,都需求在显示器上画出来。这也是Windows被称作图形操作零碎的缘由。
Windows不许可我们直接拜访硬件,如键盘、显示器、打印机等,在与这些硬件通讯前要取得装备情况(Device Context,简称 DC),进而直接的拜访硬件。

装备情况有时也被称为装备上下文或装备描绘表。

所谓装备情况,就是与以后硬件装备有关的各类信息,它是硬件装备的笼统。也就是说,装备情况就代表以后的硬件。
与文字输入、图形绘制有关的函数,在运用时大都需求传入一个参数,就是装备情况句柄。获取装备情况句柄有多种方法,常用的是 BeginPaint 函数。画图完成后,还要释放句柄,运用 EndPaint 函数。

BeginPaint 和 EndPaint 函数

当发作 WM_PAINT 事情时,使用程序开端画图。画图之前需求先挪用 BeginPaint 函数告诉 Windows,通知它以后程序需求运用显示器,你布置一下吧。BeginPaint 函数履行终了就前往装备情况句柄,接下来就可以运用 GDI 函数画图了。
画图完毕后,也需求挪用 EndPaint 函数告诉Windows,通知它画图完毕了,你可以持续前面的任务了。

TextOut 函数

TextOut 函数可以在客户区输入一段文本,原型为:

           BOOL TextOut( HDC hdc, //装备情况句柄 int nXStart, //开端输入地位的x坐标 int nYStart, //开端输入地位的y坐标 LPCTSTR lpString, //要输入的字符串 int cbString //字符串的长度 );

每当发作WM_PAINT事情时,窗口就会发作重绘,这个时分需求向窗口输入文字:

          LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ HDC hdc; //装备情况句柄 PAINTSTRUCT ps; //存储画图情况的相干信息 TCHAR szText[20] = TEXT("欢迎离开C言语中文网"); switch (message){ case WM_PAINT: //开端画图并前往情况句柄 hdc = BeginPaint (hwnd, &ps); //输入文字 TextOut(hdc, 50, 50, szText, wcslen(szText)); //完毕画图并释放情况句柄 EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage(0) ; return 0 ; } return DefWindowProc(hwnd, message, wParam, lParam) ; }

运转后果:

几点阐明:
1) PAINTSTRUCT 构造体用来保管与画图情况有关的信息,本教程不会运用到,不再解说,有兴味的读者可自行Google或百度。
2) BeginPaint 和 EndPaint 函数用来开端画图和完毕画图,必需成对呈现,输入文字或绘制图形的代码也必需放在两个函数之间。
3) 字符串普通运用宽字符,对应的盘算字符串长度的函数为 wcslen()。

DrawText函数

TextOut 在一个终点开端输入文本,可以准确定位,不克不及主动换行;DrawText 在指定区域内输入文本,可以掌握格局对齐(居左、居中、居右),可以换行。
DrawText 在外部其实也是挪用TextOut ,不外它作了许多处置,比方 DrawText 无需晓得输入若干个字符。更主要的是,DrawText 可以处置换行符而 TextOut 不克不及,从这个角度看,DrawText 应当是一种更初级的用法,是在TextOut根底上的封装。
DrawText 的原型是:

          int DrawText( HDC hDC, //装备情况句柄 LPCTSTR lpString, //将要输入的字符串 int nCount, //字符串的长度 LPRECT lpRect, //指向一个矩形区域的构造体 RECT 的指针 UINT uFormat //输入格局 );

两点阐明:
1) 假如 nCount 为 -1,则标明 lpString 指向的字符串是以'\0'完毕的,DrawText 会主动盘算字符数。
2) 参数 uFormat 有四种取值,它们可以恣意组合:

  • DT_CALCRECT:这个参数比拟主要,可以使 DrawText 函数盘算出输入文本的尺寸。假如输入文本有多行,DrawText 函数运用 lpRect 界说的矩形的宽度,并扩大矩形的底部以包容输入文本的最初一行。假如输入文本只要一行,则 DrawText 函数改动矩形的左边界,以包容下注释行的最初一个字符。呈现上述任何一种状况。

  • DT_CENTER:指定文本程度居中显示。

  • DT_VCENTER:指定文本垂直居中显示。该标志只在单行文本输入时无效,所以它必需与DT_SINGLELINE联合运用。

  • DT_SINGLELINE:单行显示文本,回车和换行符都不时行。

DrawText 示例:

            //窗口进程 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ HDC hdc; //装备情况句柄 PAINTSTRUCT ps; RECT rect; switch (message){ //窗口绘制音讯 case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText( hdc, TEXT("你好,欢迎离开C言语中文网"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint (hwnd, &ps) ; return 0 ; //窗口烧毁音讯 case WM_DESTROY: PostQuitMessage(0) ; return 0 ; } return DefWindowProc(hwnd, message, wParam, lParam) ; }

运转后果:

改动窗口巨细时,文本会主动调剂地位,不断处于窗口两头。
GetClientRect 函数用来取得窗口客户区的坐标,也就是取得客户区这个巨型。

转载于:https://blog.51cto.com/12009752/1843789

向窗口输入文字--TextOut和DrawText函数相关推荐

  1. 向窗口输出文字--TextOut和DrawText函数

    在< 一个完整的Windows程序框架 >一节中,我们使用 DrawText() 向客户区的中间位置输出了一段文本,但并没有详细解释,这节我们来重点说一下文字的输出. 设备环境(DC) 在 ...

  2. 8.向窗口输出文字 : TextOut 和 DrawText 函数

    使用 DrawText() 向客户区的中间位置输出了一段文本,说一下文字的输出. 设备环境(DC) 在Windows中,一切能在显示器上看到的都是图形,不但包括点.线.矩形.圆等,也包括文字.字体.对 ...

  3. VC++设置字体 字幕变色功能的实现 DrawText函数 本章小结

    目录 设置字体 字幕变色功能的实现 DrawText函数 本章小结 接上:VC++字符输入 ASCII码 接下: 设置字体 MFC提供了一个CFont类专门用来设置字体.这个类派生于CGdiObjec ...

  4. 三、C语言创建桌面程序:文字的输出 TextOut 和 DrawText

    一.BeginPaint 和 EndPaint 函数 当发生 WM_PAINT事件时,应用程序开始绘图.绘图之前需要先调用 BeginPaint 函数通知 Windows,告诉它当前程序需要使用显示器 ...

  5. drawtext函数用法设置字体 qt,解决QPainter::drawText修改文字方向

    今天在绘制双坐标曲线的时候需要修改y轴文字提示 QPainter的drawText()函数提供了绘制文本的功能. 它有几种重载形式,我们使用了其中的一种,即制定文本的坐标然后绘制 正常我们的文字书写方 ...

  6. java设置窗体不透明的函数_透明窗口(窗口上面文字图片等内容不透明)的实现(使用SetLayeredWindowAttributes API函数)...

    透明窗口(窗口上面文字图片等内容不透明)的实现 本文讨论通过SetLayeredWindowAttributes来实现本文的目的. SetLayeredWindowAttributes的实现必须将窗口 ...

  7. windows编程之TextOut与DrawText

    文章目录 windows编程之TextOut与DrawText TextOut 是什么函数 TextOut 函数原型 DrawText 是什么函数 DrawText 函数原型 TextOut与Draw ...

  8. 模拟键盘按键 自动输入文字

    模拟键盘按键 自动输入文字 键盘对于每个操作电脑的人员来说是最熟悉不过的了.键盘上的按键可分为两类 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键:按下后虽然看不到 ...

  9. MFC模拟AutoCAD 在单文本视图窗口任意位置输入文字

    本文介绍如果通过MFC编程实现模拟AutoCAD 在单文本视图窗口任意位置输入文字. 先在VS2017中建一个名为FormatDemo单文档工程,在FormatDemoView.h中声明如下变量: p ...

  10. windows编程之TextOut与DrawText -- 文本输出实验

    文章目录 windows编程之TextOut与DrawText -- 文本输出实验 实验名称 实验目的 实验要求 实验源码 思考题 windows编程之TextOut与DrawText – 文本输出实 ...

最新文章

  1. Spring mvc 转发、重定向
  2. 笔记-高项案例题-2019年下-人力资源管理-管理者权力-马斯洛需求理论-冲突管理...
  3. SVM(support vector machine)支持向量机原理详解
  4. expected initializer before
  5. UVa 11136 - Hoax or what
  6. Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)设备配对的开发
  7. python爬虫xpath提取数据_python爬虫的页面数据解析和提取/xpath/bs4/jsonpath/正则(1)...
  8. vue-cli项目中单文件组件引入bootstrap.js异常的解决方案
  9. 如何在Linux中使用sFTP上传或下载文件与文件夹
  10. python不能创建字典的是_python试卷-不能创建一个字典的语句
  11. 用MATLAB解决实际数学问题,利用MATLAB解决高等数学问题.doc
  12. python 异常处理高级形式例子_Python 异常处理的实例详解
  13. 三维空间点到直线的距离C++实现
  14. oracle exadata X8,ORACLEEXADATA数据库云服务器X8.PDF
  15. cuteftp8.3序列号
  16. 【项目】数据仓库概述
  17. 【Ubantu系统制作U盘安装】
  18. 苹果手机个性定制,IPHONE4S手机外壳DIY专属定制,创意设计外壳
  19. Zeppelin上通过Spark读写mysql数据库
  20. html制作菱锥旋转,怎样用几何画板实现三棱锥的旋转

热门文章

  1. Magento 使用心得
  2. 探讨e.target与e.currentTarget
  3. 从字节理解Unicode(UTF8/UTF16)
  4. 两台电脑如何实现共享文件
  5. java中多重循环和break、continue语句
  6. 智能小车35:从汇编指令bne聊起
  7. 控制台输入聊天记录 输出到文件中保存 Day20
  8. 【深度学习】之Caffe的solver文件配置(转载自csdn)
  9. UVA 1637 Double Patience
  10. 三层实例--加入信息