35.文本输出函数TabbedTextOut、ExtTextOut、TextOut、SetBkColor

article/2025/10/4 17:41:49

TextOut和TabbedTextOut、ExtTextOut的区别
TextOut是简单文本输出,不带格式的,可以控制文本的对齐方式
TabbedTextOut是可以控制带\t(制表符号)的文本
ExtTextOut是在TextOut的基础上,增加字符间距、背景颜色和剪裁框进行显示

TextOut 用当前选择的字体、背景颜色和正文颜色将一个字符串写到指定位置。

BOOL TextOut(
HDC hdc, // 设备描述表句柄
int nXStart, // 字符串的开始位置 x坐标
int nYStart, // 字符串的开始位置 y坐标
LPCTSTR lpString, // 字符串
int cbString // 字符串中字符的个数
);

TabbedTextOut 功能为该函数将一个字符串写到指定的位置,并按制表位位置数组里的值展开制表符。正文以当前选择的字体、背景色和字体写入。
TabbedTextOut函数定义

WINUSERAPI
LONG
WINAPI
TabbedTextOutW(__in HDC hdc, //绘图设备上下文__in int x, //起始X坐标__in int y, //起始Y坐标__in_ecount(chCount) LPCWSTR lpString, //要显示的字符串,字符串里面带制表符号\t__in int chCount, //字符串的长度,如果设置-1,则全部显示,可以用lstrlen(szBuffer)函数获取__in int nTabPositions, //制表符\t的各数,可以设置nArray数组长度,1,或是0__in_ecount_opt(nTabPositions) CONST INT *lpnTabStopPositions, //设置为nArray时,使用数组里的长度,使用1时,使用指针所指长度,如设置为0时,则使用Windows系统默认长度(一般是指当前字符宽度的8位)__in int nTabOrigin); //在起始位置上进行偏移的长度
#ifdef UNICODE
#define TabbedTextOut  TabbedTextOutW
#else
#define TabbedTextOut  TabbedTextOutA
#endif // !UNICODE

ExtTextOut 是在TextOut的基础上增加了字符间距、背景颜色和裁剪框进行控制

BOOL ExtTextOut(
HDC hdc,  //绘图设备上下文
int X, //X起始位置int Y,  //Y起始位置UINT fuOptions, //指定如何使用应用程序定义的矩形CONST RECT *lprc,  //用于裁剪或作不透明物矩形的尺寸LPCTSTR lpString,  //要输出的字符串UINT cbCount,  //输出字符串的长度CONST INT *lpDistance); //指向可选数组的指针,其中数组里的值表示相邻字符单位开始处间距离

UINT fuOptions参数,用于控制矩形区域

#define ETO_OPAQUE                   0x0002  //用当前的背景色来填充矩形
#define ETO_CLIPPED                  0x0004  //对文本进行裁剪矩形
#if(WINVER >= 0x0400)
#define ETO_GLYPH_INDEX              0x0010
#define ETO_RTLREADING               0x0080
#define ETO_NUMERICSLOCAL            0x0400
#define ETO_NUMERICSLATIN            0x0800
#define ETO_IGNORELANGUAGE           0x1000
#endif /* WINVER >= 0x0400 */
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
#define ETO_PDY                      0x2000
#endif // (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
#if (_WIN32_WINNT >= _WIN32_WINNT_LONGHORN)
#define ETO_REVERSE_INDEX_MAP        0x10000
#endif

SetBkColor 用指定的颜色值来设置当前的背景色,如果指定的颜色值超出了当前设备的表示范围,则设置为最近似的、设备可以表示的颜色。

COLORREF SetBkColor(_
HDC hdc, //设备上下文
COLORREF color); //颜色

返回值是原背景色,可以用COLORREF iColorOld进行保存,以备使用

显示效果如下
在这里插入图片描述

#include <Windows.h>
#include "resource.h"VOID DrawText(HWND hWnd)
{PAINTSTRUCT ps;HDC hdc;hdc = BeginPaint(hWnd,&ps);int iArray[] = {100,200,300,400,500};int iArrayPos[] = {10,20,30,40,50};int iPos = 10;SetTextAlign(hdc,TA_LEFT|TA_TOP|TA_UPDATECP);TextOut(hdc,100,0,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));TextOut(hdc,100,0,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));//画一个矩形格子MoveToEx(hdc,100,100,NULL);LineTo(hdc,500,100);LineTo(hdc,500,300);LineTo(hdc,100,300);LineTo(hdc,100,100);MoveToEx(hdc,100,200,NULL);LineTo(hdc,500,200);MoveToEx(hdc,300,100,NULL);LineTo(hdc,300,300);SetTextAlign(hdc,TA_LEFT|TA_TOP);TextOut(hdc,100,100,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));SetTextAlign(hdc,TA_CENTER|TA_TOP);TextOut(hdc,300,100,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));SetTextAlign(hdc,TA_RIGHT|TA_TOP);TextOut(hdc,500,100,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));SetTextAlign(hdc,TA_LEFT|TA_BASELINE);TextOut(hdc,100,200,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));SetTextAlign(hdc,TA_CENTER|TA_BASELINE);TextOut(hdc,300,200,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));SetTextAlign(hdc,TA_RIGHT|TA_BASELINE);TextOut(hdc,500,200,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));SetTextAlign(hdc,TA_LEFT|TA_BOTTOM);TextOut(hdc,100,300,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));SetTextAlign(hdc,TA_CENTER|TA_BOTTOM);TextOut(hdc,300,300,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));SetTextAlign(hdc,TA_RIGHT|TA_BOTTOM);TextOut(hdc,500,300,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")));TabbedTextOut(hdc,0,35,TEXT("单于\t大爷\t你好\t呀我\t在这\t里!"),-1,5,iArray,0);TabbedTextOut(hdc,0,55,TEXT("单于\t大爷\t你好\t呀我\t在这\t里!"),-1,5,iArray,50);TabbedTextOut(hdc,0,75,TEXT("单于\t大爷\t你好\t呀我\t在这\t里!"),-1,1,&iPos,0);TabbedTextOut(hdc,0,95,TEXT("单于\t大爷\t你好\t呀我\t在这\t里!"),-1,0,NULL,0);TabbedTextOut(hdc,0,150,TEXT("单于\t大爷\t你好\t呀我\t在这\t里!"),-1,0,NULL,50);SetTextAlign(hdc,TA_LEFT|TA_TOP);ExtTextOut(hdc,50,320,NULL,NULL,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")),NULL);SetBkColor(hdc,RGB(255,0,255));ExtTextOut(hdc,50,340,ETO_OPAQUE,NULL,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")),NULL);SetBkColor(hdc,RGB(128,255,128));ExtTextOut(hdc,50,380,NULL,NULL,TEXT("ABCDE"),5,iArrayPos);RECT rect;rect.left = 55;rect.top = 365;rect.right = 125;rect.bottom = 375;SetBkColor(hdc,RGB(0,255,255));ExtTextOut(hdc,50,360,ETO_OPAQUE | ETO_CLIPPED,&rect,TEXT("单于大爷!"),lstrlen(TEXT("单于大爷!")),NULL);SetBkColor(hdc,RGB(255,255,255));rect.left = 55;rect.top = 400;rect.right = 150;rect.bottom = 425;SetBkColor(hdc,RGB(128,128,128));ExtTextOut(hdc,50,400,ETO_CLIPPED | ETO_OPAQUE,&rect,"ABCDEF",6,iArrayPos);EndPaint(hWnd,&ps);return;
}INT_PTR CALLBACK DlgMainProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{BOOL bRet = true;switch(uMsg){case WM_PAINT://MessageBox(hWnd,TEXT("调用DrawText函数"),TEXT("测试"),MB_OK);DrawText(hWnd);return DefWindowProc(hWnd,uMsg,wParam,lParam);break;case WM_COMMAND:switch(LOWORD(wParam)){case IDC_BUTTON1:HDC hdc;//hdc = GetDC(hWnd);//DrawText(hWnd);//ReleaseDC(hWnd,hdc);EndDialog(hWnd,0);break;default:return DefWindowProc(hWnd,uMsg,wParam,lParam);}break;case WM_DESTROY:MessageBox(hWnd,TEXT("WM_DESTROY"),TEXT("测试"),MB_OK);break;case WM_CLOSE:MessageBox(hWnd,TEXT("WM_CLOSE"),TEXT("测试"),MB_OK);EndDialog(hWnd,0);break;default:bRet = false;}return bRet;
}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int nCmdShow)
{DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgMainProc);return 0;
}

代码显示效果


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

相关文章

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

文章目录 windows编程之TextOut与DrawText -- 文本输出实验实验名称实验目的实验要求实验源码思考题 windows编程之TextOut与DrawText – 文本输出实验 实验名称 实验3-2-文本输出实验 实验目的 1&#xff0e;掌握常用的文本输出函数TextOut、DrawText的使用&#xff0c;熟悉其…

Monkey的测试

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

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

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

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

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

Android测试-Monkey Test

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

Monkey测试(一)

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

App之Monkey测试

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

随机测试 Monkey Test

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

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

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

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

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

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

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

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

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

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

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

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

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

墨者Bash漏洞分析溯源题解

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

Bash漏洞利用!

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

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

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

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版本号&#xff1a; bash -version 如果BASH版本是4.X的64位系统的话&#xff0c;安装bash-4.1.2-15.el6_5.2.x86_64文件夹里面的三个文件&#xff1b; 如果BASH版本是3.X的话&#xff0c;32位和64位分别安…

Linux Bash漏洞复现

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