跳到主要内容

文本 Text

Text() 是 HiEasyX 中最简单的控件——它只负责把一段文字画在屏幕上,不做任何交互,也不响应鼠标。但简单不代表不重要,标签、说明、状态提示都靠它。

HiEasyX 提供了两个重载版本:一个极简,一个可以自定义字体、颜色等属性。


函数原型

// 极简版:只传文字,自动对齐,使用默认样式
void Text(const HXString &Title, bool AutoAlign = true);

// 完整版:可以自定义字体、颜色、高度
void Text(const HXString &Title, TextProfile &Profile, bool AutoAlign = true);

参数说明

极简版

参数类型默认值说明
Titleconst HXString &要显示的文本内容。
AutoAlignbooltrue是否自动按当前布局上下文对齐。

完整版

参数类型默认值说明
Titleconst HXString &要显示的文本内容。
ProfileTextProfile &文本样式配置。必须是 static 或全局变量
AutoAlignbooltrue是否自动按当前布局上下文对齐。
AutoAlign 是什么?

AutoAlign = true 时,文本会根据当前的布局上下文自动排列到正确的位置。比如在 Window() 内部,它会自动换行并向下排列;如果你在 SameLine 模式下,它会排在同一行。除非你手动控制坐标,否则保持默认 true 即可。


TextProfile 结构体

字段类型默认值说明
FontHXString空字符串字体名称。空字符串表示使用当前主题默认字体。
Heightint18文字渲染的高度(像素),相当于字体大小。
ColorHXColor主题默认色文字颜色。如果不设置,自动使用 HXTheme 中的文本颜色。

返回值

Text() 没有返回值。它纯粹是一个渲染指令。


基本用法

显示一段普通文字

HX::Text(HXStr("你好,HiEasyX!"));

自定义颜色和大小

static HX::TextProfile tp;
tp.Height = 24;
tp.Color = HXColor{255, 100, 100, 255}; // 红色
HX::Text(HXStr("醒目的红色大字"), tp);
生命周期警告!

完整版用到的 TextProfile 必须是 static全局变量。虽然这个结构体比较简单,但 HiEasyX 的原则是:所有 Profile 都要持久化,以保持一致性和未来的扩展性。


字体设置

如果你希望某段文字使用特定字体(比如用 Consolas 显示代码片段),可以设置 Font 字段:

static HX::TextProfile codeText;
codeText.Font = HXStr("Consolas");
codeText.Height = 16;
codeText.Color = HXColor{200, 200, 200, 255};
HX::Text(HXStr("int main() { return 0; }"), codeText);
字体兼容性

HiEasyX 底层基于 EasyX,字体名称需要系统中实际存在。如果你指定的字体不存在,EasyX 会回退到系统默认字体。常见的安全选择包括:"微软雅黑""Consolas""SimSun"(宋体)等。


文字颜色与主题

如果你不设置 ColorText() 会自动使用当前主题配置的文本颜色。这意味着切换主题时,所有未指定颜色的文本会自动跟着变化:

// 这些文字会跟随主题自动变色
HX::Text(HXStr("主题自适应文字"));

// 这些文字永远保持红色,不受主题影响
static HX::TextProfile fixedColor;
fixedColor.Color = HXColor{255, 0, 0, 255};
HX::Text(HXStr("固定红色文字"), fixedColor);

完整示例代码

下面的示例展示了默认文本、自定义大小、自定义颜色、自定义字体的用法,还有一个按钮用来切换主题明暗。

#include <include/hex.h>
#include <include/impl/EasyX/hex_impl_easyx.h>

int main() {
initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();

HX::HXInitForEasyX();
HX::SetBuffer(GetWorkingImage());

BeginBatchDraw();

// ===== 必须是 static 或全局变量 =====
static HX::WindowProfile wp;
wp.Size = {500, 400};
wp.Position = {150, 80};

static HX::TextProfile bigText;
bigText.Height = 28;

static HX::TextProfile redText;
redText.Height = 20;
redText.Color = HXColor{255, 80, 80, 255};

static HX::TextProfile codeText;
codeText.Font = HXStr("Consolas");
codeText.Height = 16;
codeText.Color = HXColor{100, 200, 100, 255};

static HX::ButtonProfile btnProfile;
static bool isDark = true;

while (true) {
HX::HXBegin();

ExMessage msg;
while (peekmessage(&msg)) {
HX::PushMessage(HX::GetHXMessage(&msg));
}

HX::Window(HXStr("Text 演示"), wp);

// 默认样式
HX::Text(HXStr("这是默认样式的文字"));

// 大号文字
HX::Text(HXStr("这是 28px 的大号文字"), bigText);

// 红色文字
HX::Text(HXStr("这是自定义颜色的红色文字"), redText);

// 代码风格文字
HX::Text(HXStr("// 这是 Consolas 字体的代码风格"), codeText);
HX::Text(HXStr("void Hello() { return; }"), codeText);

// 切换主题按钮
if (HX::Button(HXStr("切换主题"), btnProfile)) {
isDark = !isDark;
if (isDark) {
HX::SetThemeMode(HX::HXThemeMode::ModernDark);
} else {
HX::SetThemeMode(HX::HXThemeMode::ModernDim);
}
}

HX::End();
HX::Render();
FlushBatchDraw();
Sleep(16);
}

closegraph();
return 0;
}
小建议

Text() 是最安全的"入门控件"——它不会交互,不会出错,只要你的程序能编译运行,就能看到字。如果你刚接触 HiEasyX,建议先用 Text() 熟悉一下每帧调用的节奏,再逐步加入按钮、滑块等交互控件。

运行效果

截图占位符:请补充 $name 控件的运行效果截图。

截图占位符:请补充 Text 运行效果 的运行效果截图,保存为 ./assets/Text_view.png。`n