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

article/2025/10/4 17:26:36

文章目录

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

windows编程之TextOut与DrawText – 文本输出实验


实验名称

  • 实验3-2-文本输出实验

实验目的

  • 1.掌握常用的文本输出函数TextOut、DrawText的使用,熟悉其参数设置。

  • 2.掌握字体颜色、背景颜色、背景透明等属性的修改。

  • 3.掌握字体创建函数CreateFont的使用,掌握计算文本大小的两种方法,进而能确定文本输出的合适位置


实验要求

1.在窗口处理函数中增加绘图代码,增加文本输出内容,分别使用TextOut函数、DrawText函数输出文本。使用DrawText绘制的文本在矩形范围内居中显示,先将矩形绘制出来作为参照。注意函数中字符串输出长度、对齐参数的设置。效果参照课本

2.修改上题代码,将字体颜色、背景颜色分别修改,设置背景颜色透明,将两行字体重叠显示。参考效果如下:

3.创建新的字体,设置字体大小为30高,15宽,字体样式为隶书,计算合适位置输出多行文本,避免重叠。参考效果如下:


实验源码

先用vs创建一个Windows桌面应用程序,在消息处理的回调函数WM_PAINT中修改代码

  • 第1题
case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd, &ps);// TODO: 在此处添加使用 hdc 的任何绘图代码...TCHAR str_t[100] = TEXT("使用TextOut输出文本");TCHAR str_d[100] = TEXT("使用DrawText输出文本");int len_t = wcslen(str_t);int len_d = wcslen(str_d);RECT rt = { 100,100,400,200 };TextOut(hdc, 10, 10, str_t, len_t);Rectangle(hdc, rt.left, rt.top, rt.right, rt.bottom);DrawText(hdc, str_d, -1, &rt, DT_CENTER | DT_SINGLELINE | DT_VCENTER);EndPaint(hWnd, &ps);return 0;}
  • 第2题
case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd, &ps);// TODO: 在此处添加使用 hdc 的任何绘图代码...TCHAR str1[100] = TEXT("红色字体颜色,绿色背景的文本");TCHAR str2[100] = TEXT("被掩盖的文本,背景透明");TCHAR str3[100] = TEXT("显示在前面的文本,背景透明");int len1 = wcslen(str1);int len2 = wcslen(str2);int len3 = wcslen(str3);SetTextColor(hdc, RGB(255, 0, 0));SetBkColor(hdc, RGB(0, 255, 0));TextOut(hdc, 20, 20, str1, len1);SetBkMode(hdc, TRANSPARENT);TextOut(hdc, 20, 60, str2, len2);TextOut(hdc, 20, 66, str3, len3);EndPaint(hWnd, &ps);return 0;}
  • 第3题
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC hdc;PAINTSTRUCT ps;TCHAR str[30] = TEXT("Hello 世界你好");int len = wcslen(str);static HFONT hFont;static TEXTMETRIC tm;SIZE size;switch (message){case WM_CREATE:hdc = GetDC(hWnd);hFont = CreateFont(30, 15, 0, 0, FW_BOLD, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, TEXT("隶书"));SelectObject(hdc, hFont);SetTextColor(hdc, RGB(255, 0, 0));GetTextMetrics(hdc, &tm);ReleaseDC(hWnd, hdc);return 0;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);TextOut(hdc, 20, 30, str, len);TextOut(hdc, 20, 30 + tm.tmExternalLeading, str, len);GetTextExtentPoint32(hdc, str, len, &size);TextOut(hdc, 20 + size.cx, 30, str, len);EndPaint(hWnd, &ps);return 0;case WM_DESTROY:DeleteObject(hFont);PostQuitMessage(0);return 0;}return DefWindowProc(hWnd, message, wParam, lParam);
}

思考题

设计三种(或n种)文本的样式(例如,1红色20号黑体;2黑色26号宋体;3蓝色30号隶属),将一串文本显示在屏幕上,通过鼠标点击次数切换三种不同字体效果。


enjoy it ~


http://chatgpt.dhexx.cn/article/CrolPiSD.shtml

相关文章

Monkey的测试

1.Monkey介绍 顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲 通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的…

MonkeyTest——简单无脑的移动端自动化测试(初级篇)

MonkeyTest-操作步骤: 1.下载Android sdk X64位,必须和你的电脑操作系统一致。 2.安装完成后,增加adb的系统环境。 A.找到sdk路径。 默认路径:C:\Users\ZSD\AppData\Local\Android\android-sdk\platform-tools B.打开系统环境设置…

【转】指定页面进行Monkey测试

偶然在网上查看到这个技术,感兴趣,就记录下【感谢博主分享】 1.原文再此:https://blog.csdn.net/liyu520131414/article/details/69357777?utm_sourceblogxgwz3 原理原文博主已经讲清楚了,就不粘贴了,下面&#xff…

Android测试-Monkey Test

APP开发过程中,开人员往往自己做一些功能测试和稳定性测试,使用MonkeyTest做压力测试是常用方法,及时修复ANR、CRASH提高项目组整体的开发效率。 一、Monkey简介 Monkey是一种命令行工具,这个工具存在于Android系统/system/frame…

Monkey测试(一)

简介常见参数日志分析简单脚本编写 一:简介 Monkey测试是Android平台自动化测试的一种手段, 通过Monkey程序模拟用户触摸屏幕、滑动,Trackball(轨迹球)、按键等操作来对设备上的程序进行压力测试, 检测程序…

App之Monkey测试

作为初入测试行业的小白,了解一些Monkey测试是很有必要的,在此小编整理了一些App方面Monkey测试的基础以及Monkey脚本的编写,希望可以帮助到大家。 1. Monkey的概念 Monkey测试又称"猴子测试",是指没有测试经验的人对产品进行乱点…

随机测试 Monkey Test

今天说一说随机测试,Monkey Test。翻译成中文就是猴子测试。 你可以想象一只猴子趴在电脑面前,拿着鼠标随便乱点的样子。 一,什么是随机测试? 软件测试中的Monkey测试是测试人员对应用程序随机输入以验证其功能的一种方法。这是…

墨者学院-Bash漏洞分析溯源

Bash漏洞分析溯源 难易程度:★★ 题目类型:命令执行 使用工具:FireFox浏览器、wwwscan 1.打开靶场,根据题目思路找poc.cgi。 2.使用wwwscan扫一下 发现有目录/cgi-bin 3.打开burpsuite,访问/cgi-bin/poc.cgi,截包。 send to repeater&…

vulhub漏洞复现之bash(Shellshock CVE-2014-6271)

Shellshock 破壳漏洞 CVE-2014-6271 1.漏洞概述: GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行shell命…

linux网站漏洞修复,CentOS Bash漏洞终极修复方法

目前已确认被成功利用的软件及系统:所有安装GNU bash 版本小于或者等于4.3的Linux操作系统。 【Bash漏洞描述】该漏洞源于你调用的bash shell之前创建的特殊的环境变量,这些变量可以包含代码,同时会被bash执行。 【漏洞检测方法】 在服务器命…

Bash漏洞分析溯源 cgi文件 (CVE-2014-6271) --墨者学院

01 背景介绍 Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令,在一些cgi脚本中,数据是通过环境变量来传递的,这样就会形成该漏洞; bash通过以函数名作为环境变量名,以“(){…

suse linux bash漏洞,bash漏洞: CVE-2014-6271漏洞及紧急修复方法

最近linux的bash漏洞闹得沸沸扬扬,问题还是挺严重的,我这里提醒大家一下早日修复吧! 如何验证 $ env x() { :;}; echo vulnerable bash -c echo hello 在终端中运行上面的命令,如果返回有vulnerable,就说明这台服务器中…

suse linux bash漏洞,Suse11 sp3 下Bash漏洞升级修复

SuSE Linux Enterprise Server 11Bash 漏洞修复方案 系统:Suse-11-sp3-64 Bash:bash-4.4 1.1. Bash升级 1.1.1升级概述 大部分现行Linux操作系统自带的版本比较陈旧,因此需要升级bash版本。 发现现在版本存在漏洞 1.1.2 安装介质 bash-4.4.tar.gz(官网最…

墨者Bash漏洞分析溯源题解

这个漏洞是看别人的思路解出来的,因为在打开页面后,我扫描不出来其他东西,惭愧 后台存在一个地址,是http://219.153.49.228:49581/cgi-bin/poc.cgi 访问这个地址 对着地址进行抓包 将user-agent进行修改,修改为() { …

Bash漏洞利用!

环境: 服务器Centos:192.168.195.130 攻击机bt5:192.168.195.130 1、找到漏洞利用程序 必须web服务器支持cgi 这里是测试的bug.sh代码 #!/bin/bash 第一行要特别注意! echo "Content-type: text/html" echo "&q…

redhat linux bash 漏洞,GNU Bash 漏洞及修补方法

文章引自http://loosky.net/3036.html 漏洞描述 CVE-2014-6271 ***者可构造特殊的环境变量值,以在这些环境变量的值中包含特定的代码,当 Shell 对这些环境变量求值时,这些特定的代码将得以在系统中执行。某些服务和应用接受未经身份者提供的环…

linux 破壳漏洞,Bash破壳漏洞

“破壳”是一个严重漏洞的别名,在Red Hat、CentOS、Ubuntu、Fedora、Amazon Linux、OS X 10.10中均拥有存在CVE-2014-6271(即“破壳”漏洞)漏洞的Bash版本,同时由于Bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,而针…

linux系统漏洞补丁包,RedHat 5.X、6.X Bash漏洞RPM补丁包下载

RedHat 5.X、6.X Bash漏洞RPM补丁包下载及教程。 首先查看服务器的BASH版本号: bash -version 如果BASH版本是4.X的64位系统的话,安装bash-4.1.2-15.el6_5.2.x86_64文件夹里面的三个文件; 如果BASH版本是3.X的话,32位和64位分别安…

Linux Bash漏洞复现

Bash是什么? Bourne Again Shell(简称BASH)是在GNU/Linux上最流行的SHELL实现,于1980年诞生,经过了几十年的进化从一个简单的终端命令行解释器演变成了和GNU系统深度整合的多功能接口。根据维基百科的描述&#xff1a…

关于CentOS下Linux的bash 漏洞,查看和解决的方法

说明:我是今天才发现这个问题的,据说06年就就已经发现了,我才在才发现,后知后觉,如果不是遇到了,估计还没发现,我是个假的程序猿。。。 如果Shell版本较旧的话,建议升级到最新版本的…