DrawText的使用

C# SharpGL-DrawText平面文字和DrawText3D立体文字 先上平面文字绘制函数:DrawText(int x, int y, float r, float g, float b, string faceName, float fontSize, string text) 其中: x,y:是屏幕坐标,及像素坐标; r,g,b:是RGB颜色,范围:0~1f; faceName:字体类型; fontSize:字体大小; text:绘制的内容; 需要注意的是:DrawText绘制需要用到屏幕像素坐标,在OpenGL中是3维世界坐标,我们绘制的物体通过视图矩阵、投影矩阵、模 阅读详情

 DrawText函数简单介绍

    这个函数的作用很简单,就是在指定的区域内输出格式化的文本。

    函数原型:

int DrawText(

  HDC hDC,

  LPCTSTR lpString,

  int nCount,

  LPRECT lpRect,

  UNIT uFormat

);

    hDC是设备上下文句柄。lpString指向将要绘制的UNICODE文本。nCount是要输出的字符数,如果nCount = -1,则Windows自动计算字符数,不过此时lpString所指向的必须是以NULL结尾的字符串。lpRect指向rect结构体,指定了文本格式化的矩形区域。uFormat是格式化标记,也是这里面稍显复杂的一个参数。

    下面是几个常用的格式化标记:

    DT_CALCRECT:这个参数比较重要,可以使DrawText函数计算出输出文本的尺寸。如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行。如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符。出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本。

    DT_CENTER:指定文本水平居中显示。

    DT_VCENTER:指定文本垂直居中显示。该标记只在单行文本输出时有效,所以它必须与DT_SINGLELINE结合使用。

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

② DrawText函数使用举例

    //Get the height and length of the string.

    DrawText(hdc,szHello,-1,&rect, DT_CALCRECT | DT_CENTER | DT_SINGLELINE);

    // Draw the text

    DrawText(hdc,szHello,-1,&rectCli,DT_CENTER | DT_SINGLELINE);

③ 经常与DrawText结合使用的几个函数

    (1) SetTextColor 设置文本前景色

COLORREF SetTextColor(

  HDC hdc,

  COLORREF crColor

);

(2) SetBkColor 设置文本背景色

COLORREF SetBkColor(

  HDC hdc,

  COLORREF crColor

);

    (3) SetBkMode 设备背景色模式为透明与不透明

int SetBkMode(

  HDC hdc,

  int iBkMode

);

值说明
DT_BOTTOM将正文调整到矩形底部。此值必须和DT_SINGLELINE组合。
DT_CALCRECT决定矩形的宽和高。 
如果正文有多行,DrawText使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳正文的最后一行。 
如果正文只有一行,则DrawText改变矩形的右边界,以容纳下正文行的最后一个字符。 
出现上述任何一种情况,DrawText返回格式化正文的高度,而不是绘制正文。
DT_CENTER使正文在矩形中水平居中。
DT_EDITCONTROL复制多行编辑控制的正文显示特性。 
特殊地,为编辑控制的平均字符宽度是以同样的方法计算的,此函数不显示只是部分可见的最后一行。
DT_END_ELLIPSIS对于显示的文本,如果结束的字符串的范围不在矩形内,它会被截断并以省略号标识。 
如果一个字母不是在字符串的末尾处超出了矩形范围,它不会被截断并以省略号标识。 
字符串不会被修改,除非指定了DT_MODIFYSTRING标志。
DT_EXPANDTABS扩展制表符,每个制表符的缺省字符数是8。 
DT_WORD_ELLIPSIS, DT_PATH_ELLIPSIS和DT_END_ELLIPSIS不能和此参数一起使用
DT_EXTERNALLEADING在行的高度里包含字体的外部标头,通常,外部标头不被包含在正文行的高度里。
DT_HIDEPREFIX忽略正文中的前缀字符(&),并且前缀字符后面的字母不会出现下划线。其它前缀字符的调用方式不受影响。 
输入的字符串: "A&bc&&d" 
正常: "Abc&d" 
DT_HIDEPREFIX: "Abc&d"
DT_INTERNAL用系统字体来计算正文度量。
DT_LEFT正文左对齐。
DT_MODIFYSTRING修改给定的字符串来匹配显示的正文。 
此标志必须和DT_END_ELLIPSIS 或 DT_PATH_ELLIPSIS同时使用。
DT_NOCLIP无裁剪绘制。当DT_NOCLIP使用时DrawText的使用会有所加快。
DT_NOFULLWIDTHCHARBREAK在宽字符的字符串中防止行断开,因此折行规则相当于单字符的字符串。 
例如,我们可以用在棒子版的windows中,为图标标签提供更好的可读性。 
除非指定DT_WORDBREAK,否则此值没有作用。
DT_NOPREFIX关闭前缀字符的处理。 
通常DrawText解释助记前缀字符,&为给其后的字符加下划线,解释&&为显示单个&。指定DT_NOPREFIX,这种处理被关闭。
DT_PATH_ELLIPSIS对于显示的正文,替换字符串在椭圆中的字符,以确保结果能在合适的矩形内。 
如果该字符串包含反斜杠(\)字符,DT_PATH_ELLIPSIS尽可能的保留最后一个反斜杠之后的正文。 
字符串不会被修改,除非指定了DT_MODIFYSTRING标志。
DT_PREFIXONLY仅仅在(&)前缀字符的位置下绘制一个下划线。不绘制字符串中的任何其他字符。 
输入的字符串: "A&bc&&d" 
正常: "Abc&d" 
DT_PREFIXONLY:" _ "
DT_RIGHT正文右对齐。
DT_RTLREADING当选择进设备环境的字体是希伯来文或阿拉伯文字体时,为双向正文安排从右到左的阅读顺序都是从左到右的。
DT_SINGLELINE显示正文的同一行,回车和换行符都不能折行。
DT_TABSTOP设置制表,参数uFormat的15"C8位(低位字中的高位字节)指定每个制表符的字符数,每个制表符的缺省字符数是8。 
注意:DT_CALCRECT, DT_EXTERNALLEADING, DT_INTERNAL, 
DT_NOCLIP, DT_NOPREFIX值不能和DT_TABSTOP值一起使用。
DT_TOP正文顶端对齐。
DT_VCENTER使正文在矩形中垂直居中。 
(DreamSmart注:此值必须和DT_SINGLELINE连用,否则GDI无法计算目的矩形)
DT_WORDBREAK断开字。当一行中的字符将会延伸到由lpRect指定的矩形的边框时,此行自动地在字之间断开。一个回车一换行也能使行折断。
DT_WORD_ELLIPSIS截短不符合矩形的正文,并增加省略号。

编辑本段返回值

  如果函数调用成功,返回值是正文的高度(逻辑单位)。如果指定了DT_VCENTER或DT_BOTTOM,返回值是lpRect->top到绘制的正文的底部的偏移值。   如果函数调用失败,返回值是0   Windows NT:若想获得更多错误信息,请调用GetLastError函数。

编辑本段备注

  函数DrawText用设备环境中的字体选择、正文颜色和背景颜色来写正文。DrawText裁剪正文,不会出现在指定矩形的外面,除非指定了DT_NOCLIP。除非使用DT_SINGLELINE格式化,否则其余的格式都认为正文有多行。   如果选择的字体对指定的矩形而言太大,DrawText不会试图去换成一种小字体。   DrawText支持纵和方向均为0的字体。   设备环境的正文对齐方式必须包括TA_LEFT, TA_TOP和TA_NOUPDATECP标志。   Windows CE:如果为参数uFormat指定DT_CALCRECT值,必须为lpRect指向的RECT结构设置right和bottom成员。Windows CE不支持uFormat为DT_EXTERNALLEADING。

 


Dify插件实战:实时渲染AI生成的HTML/SVG/Canvas代码 在现代Web开发与AI应用集成中,前端渲染技术是实现动态内容展示的核心。其原理在于浏览器引擎解析HTML、CSS、JavaScript等代码,并将其转换为可视化的用户界面。这项技术的价值在于极大提升了开发效率与用户体验,允许开发者快速构建和迭代交互式应用。在AI应用开发领域,尤其是大语言模型(LLM)集成场景,如何将模型生成的**结构化代码**(如描述UI的HTML或数据图表的SVG)实时转化为可视化组件,成为一个关键需求。这直接关系到**Dify**等低代码AI平台能否提供流畅的、所见即所得的交互体验。本 阅读详情

相关推荐

青龙人形机器人硬件平台设计全解析:从构型到控制系统的实战指南

本文深度解析了青龙人形机器人硬件平台的设计全流程,从需求分析、构型设计到核心系统实现。文章详细阐述了其43个自由度的仿生构型、高动态性下肢设计、灵巧作业系统以及分布式控制架构,并探讨了旋转关节与直线关节等关键技术选型,为开发者提供了从理论到实践的完整硬件设计指南。

weixin_29248313的博客 381

自定义控件之绘图篇( 五):drawText()详解

前言:但行好事,莫问前程。只需努力每一天。 相关文章: 《Android自定义控件三部曲文章索引》: http://blog.youkuaiyun.com/harvic880925/article/details/50995268 long long ago,有讲过有关Canvas绘图的系列知识,当时着重在基本绘图要领和canvas的保存与回退上,对drawText没有细讲,但DrawText这...

启舰 7万+

CMakeTestCCompiler.cmake错误解决

CMakeTestCCompiler.cmake错误解决欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近编译项目的时候,遇到一个cmake的错误,具体错误信息如下: /path-to-pr

昨夜星辰的博客 2万+

绘制系列(五)-DrawText()详解

绘制系列(二)-DrawText()详解 文字基础知识 1、setTextAlign() 设置文字对齐方式(起始点相对于文字) canvas.drawText(“文字”,起始点,paint) 比如: paint.setTextAlign(Paint.Align.RIGHT)//表示起始点在文字的右侧开始绘制; ###2、设置字体样式 ### 设置粗体 setBoldText(boolean fa...

Leslie_LN的博客 6397

grafana使用方法

1、点击仪表盘2、新建仪表盘3、选择数据源4、选择查询的条件5、美化。

2403_87359664的博客 323

储能EMS工作原理深度剖析:功率分配与充放电策略的底层逻辑

储能EMS的功率分配与充放电策略,是其智能化的集中体现。功率分配更像一个“执行指挥官”,关注如何将总任务高效、公平、安全地分解到每个士兵(PCS/电池簇);而充放电策略则像“总参谋长”,基于战场情报(市场、电网、自身状态)制定最优的作战计划。AI强化学习策略:让EMS通过与复杂环境不断交互,自主学习最优策略,适应不确定性。数字孪生与仿真:在虚拟空间中提前验证策略,评估风险,实现预防性控制。跨站协同优化:多个储能站的EMS通过云平台协同,参与区域电网甚至跨省市场的联合优化调度。

小帽子的博客 375

DrawText详解

一.drawText的通常用法: private Paint mPaint; private Rect mTextBound = new Rect();//包裹text的矩形 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setTextSize(mTextSize); mTextWidth = (int) mPaint.measure...

liu362732346的博客 8839

基于Spring Boot 3 + Vue 3 + Vite的现代化社区订餐系统设计与实现

本文将详细阐述系统的整体架构、数据库设计、核心功能模块(用户管理、餐厅管理、菜品浏览、购物车、订单管理)的实现细节,并提供关键代码示例。<el-input v-model="loginForm.password" type="password" placeholder="密码" prefix-icon="Lock" show-password />.requestMatchers("/api/auth/**", "/api/dishes/public/**").permitAll() // 公开接口。

2201_76125393的博客 468

java使用drawtext重叠_DrawText的使用

DrawText函数简介这个函数的作用非常easy,就是在指定的区域内输出格式化的文本。函数原型:int DrawText(HDC hDC,LPCTSTR lpString,int nCount,LPRECT lpRect,UNIT uFormat);hDC是设备上下文句柄。lpString指向将要绘制的UNICODE文本。nCount是要输出的字符数,假设nCount = -1,则Windows...

weixin_34584910的博客 498

手把手教你学PCIE--系统内存管理:GART(Graphics Address Remapping Table)的典型用途详解

GART(图形地址重映射表)是GPU的核心组件,主要用于地址映射转换。其典型用途分为物理模式和虚拟模式两类:在物理模式下,GART将GPU虚拟地址映射到分散的物理内存,支持DMA连续访问非连续内存块,适用于GPU渲染纹理采样和AI推理数据搬运等场景;在虚拟模式下,GART配合IOMMU实现多级映射,将GPU虚拟地址转换为虚拟机物理地址再映射到宿主机物理地址,确保多租户隔离,应用于云服务器GPU共享和容器化AI训练等虚拟化环境。两种模式分别优化了高性能计算场景和虚拟化场景的需求。

MHD0815的博客 367

多源异构数据融合(Kaggle+Google Trends联合分析)

本文详细介绍了如何利用Python实现多源异构数据融合,以Kaggle电商销售数据与Google Trends搜索指数为例,展示了数据清洗、预处理、时间对齐、数据合并、相关性分析、回归建模和可视化全过程。数据预处理与内存优化通过分块加载、数据类型转换和缺失值处理,有效降低了大规模数据在内存中的占用,并确保数据质量。时间对齐与数据融合策略采用重采样与内连接方法对齐不同数据源的时间维度,实现了高质量数据的融合,为后续联合分析奠定基础。模型构建与分析。

闲人编程的博客 1016

DrawText函数

DrawText函数与前面介绍的TextOut函数都是文本输出函数,但它们是有区别的。DrawText函数是格式化输出函数,而TextOut函数不具备这样的功能。因而DrawText函数比TextOut函数功能强大,可以让文本输出时左对齐,或者右对齐,或者中间对齐,还可以让文本适应输出矩形内,如果超出时可以截断,或者显示为省略号的方式。DrawText函数在表格方式显示时肯定要使用到的函数。

芝麻软件工作室的专栏 3360

杰理AC696N系列芯片外部中断使用教程

本教程详细介绍了杰理AC696N芯片的GPIO引脚中断唤醒功能实现方法。主要内容包括: 功能特点: 支持任意GPIO引脚配置为中断源 可灵活选择上升沿或下降沿触发 提供自定义中断回调函数接口 核心实现: 通过port_wkup_interrupt_init()函数配置GPIO属性 使用request_irq()注册中断服务程序 提供中断使能/关闭接口 注意事项: 此功能在低功耗模式下无效 需注意引脚冲突和中断优先级设置 建议在回调函数中实现简洁的逻辑 应用场景: 按键检测 外部信号监测 事件触发等 本方案提

qq_42014563的博客 944

DrawText()

DrawText函数简介 这个函数的作用非常easy,就是在指定的区域内输出格式化的文本。 函数原型: int DrawText( HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UNIT uFormat ); hDC是设备上下文句柄。lpString指向将要绘制的UNICO...

博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

drawText用法总结

drawText

初心一点的专栏 7293

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

绘图系列的DrawText

基线 要绘制文字,需要明白什么是drawtext的基线,小时候练写英文字母的时候,四个线的第三条线便是在drawtext中的基线,只要确定了基线位置就能确定文字绘制的位置。 关于drawtext中paint的相关设置方法 paint.setStrokeWidth(4)//设置画笔的宽度 paint.setAntiAlisa(true)//抗锯齿 paint.setStyle(Paint.Style...

yuqingsen的博客 440

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

drawtext

这个函数用于在指定区域内以指定格式输出字符串。 int drawtext( LPCTSTR str, RECT* pRect, UINT uFormat ); int drawtext( TCHAR c, RECT* pRect, UINT uFormat ); 参数 str 待输出的字符串。 pRect 指定的矩形区域的指针。某些 uFormat 标志会使用这个矩形区域做返回值。详见后文说明。 uFormat 指定格式化输出文字的方法。详见后文说明。 c ..

enter回车键 698

MFC—使用DrawText和TextOut编辑文字

MFC使用DrawText和TextOut编辑文字 一、DrawText函数 1、函数定义,这里引用一篇博客 https://blog.youkuaiyun.com/by_mxy/article/details/9932967 2、引用一个函数实现的demo void CMFCTestDlg::OnPaint() { CRect rect; GetClientRect(&rect)...

仰望星空的博客 6636

CDC的DrawText

The method of formatting the text. This parameter can be one or more of the following values. 表 1 Value Meaning DT_BOTTOM Justifies the text to the bottom of the rectangle. This value is used only with the DT_SINGLELINE value. DT_CA

htj10的博客 2054

Android paint的drawText() 的正确使用方式

最近项目需求做一个倒计时的功能,本想直接找一个第三方用的。结果需求有点不一样,我们是不计算天的,都用时:分:秒表示。可能会有1021:59:59这种奇葩出现,网上还真找不到类似的,就自己写了一个。然而发现drawText没有想象中的那么好用,网上找了很多资料都不太准确,这里是研究了几天的使用心得,在这里分享下。   顺便将参考过的帖子都贴上来,如果我写的不好的话可以去参考一下这几位博主的。

Altsuki的博客 7643

c++语言drawtext字体旋转,使用DrawText函数对文本进行换行处理的实现

DrawText函数原型:int DrawText(HDC hDC, // handle to DCLPCTSTR lpString, // text to drawint nCount, // text lengthLPRECT lpRect, // formatting dimensionsUINT uFormat // text-drawing ...

weixin_29302047的博客 1538
上一篇: 一步一步写算法(之链表逆转)
下一篇: csliderctrl详解
heary29
博客等级 码龄12年 37粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值