This commit is contained in:
2026-08-30 01:48:03 +08:00
parent 84ebd52c24
commit 7940b67827
170 changed files with 2704 additions and 21276 deletions
-127
View File
@@ -1,127 +0,0 @@
#include "c_Console.h"
#include <stdlib.h>
#include <stdio.h>
int main(void) {
// 1. 全局初始化控制台环境(支持 UTF-8、启用鼠标追踪、隐藏光标、Raw模式)
c_Console_Init();
CONSOLE_CLEAR();
CONSOLE_HIDE_CURSOR();
int screen_w = 80, screen_h = 25;
c_Console_GetSize(&screen_w, &screen_h);
// 2. 绘制可视化测试台的固定 UI 边框与标题
c_Console_WriteColorXY(1, 1, C_COLOR_BRIGHT_WHITE, C_COLOR_BLUE, "==== 跨平台 c_Console 自动化全功能可视化测试台 ====");
c_Console_WriteColorXY(1, 2, C_COLOR_BRIGHT_BLACK, C_COLOR_NONE, "操作指南: 按 [方向键 ↑↓←→] 测试键盘,用 [鼠标点击/滚轮] 测试动态事件。按 [Esc] 键退出。");
// 3. 绘制 UTF-8 中英文混排对照区,验证等宽对齐算法
c_Console_WriteColorXY(2, 5, C_COLOR_BRIGHT_CYAN, C_COLOR_NONE, "【1. UTF-8 宽度测试对齐基准线】:");
c_Console_WriteColorXY(2, 6, C_COLOR_WHITE, C_COLOR_NONE, "字符串A: [C++ 2026]") ;
c_Console_WriteColorXY(2, 7, C_COLOR_WHITE, C_COLOR_NONE, "字符串B: [C语言实现]") ;
// 动态计算并打印视觉宽度进行自检
int lenA = c_Console_GetVisualWidth("[C++ 2026]");
int lenB = c_Console_GetVisualWidth("[C语言实现]");
c_Console_WriteColorXY(30, 6, C_COLOR_YELLOW, C_COLOR_NONE, "<- 判定宽度: %d (理论应为 10)", lenA);
c_Console_WriteColorXY(30, 7, C_COLOR_YELLOW, C_COLOR_NONE, "<- 判定宽度: %d (理论应为 10)", lenB);
// 4. 绘制两个交互式虚拟测试按钮供鼠标点击
c_Console_WriteColorXY(5, 10, C_COLOR_WHITE, C_COLOR_GREEN, " [ 按钮 A ] ");
c_Console_WriteColorXY(20, 10, C_COLOR_WHITE, C_COLOR_MAGENTA, " [ 按钮 B ] ");
// 键盘移动小方块的起始坐标状态
int k_x = 5, k_y = 15;
c_Console_WriteColorXY(k_x, k_y, C_COLOR_BRIGHT_RED, C_COLOR_NONE, "");
int running = 1;
while (running) {
// ----------------------------------------------------
// 测试项 A: 键盘输入流测试
// ----------------------------------------------------
int key = c_Console_ReadKey();
if (key != C_KEY_UNKNOWN) {
// 清空第 12 行并更新键盘状态
printf("\033[12;1H\033[2K");
if (key == C_KEY_ESC) {
running = 0; // 按 Esc 键退出
}
else if (key == C_KEY_UP || key == C_KEY_DOWN || key == C_KEY_LEFT || key == C_KEY_RIGHT) {
// 擦除旧位置
c_Console_WriteColorXY(k_x, k_y, C_COLOR_NONE, C_COLOR_NONE, " ");
// 响应方向键
if (key == C_KEY_UP) k_y--;
if (key == C_KEY_DOWN) k_y++;
if (key == C_KEY_LEFT) k_x -= 2; // 方块占2个物理宽度
if (key == C_KEY_RIGHT) k_x += 2;
// 边界约束
if (k_x < 1) k_x = 1; if (k_y < 13) k_y = 13;
// 绘制新位置
c_Console_WriteColorXY(k_x, k_y, C_COLOR_BRIGHT_RED, C_COLOR_NONE, "");
c_Console_WriteColorXY(2, 12, C_COLOR_BRIGHT_GREEN, C_COLOR_NONE, "键盘响应: [方向键] 成功触发! 当前方块坐标: (%d, %d)", k_x, k_y);
}
else if (key == C_KEY_ENTER) {
c_Console_WriteColorXY(2, 12, C_COLOR_BRIGHT_GREEN, C_COLOR_NONE, "键盘响应: [Enter 回车键] 成功触发!");
}
else {
c_Console_WriteColorXY(2, 12, C_COLOR_BRIGHT_GREEN, C_COLOR_NONE, "键盘响应: 普通字符键 [%c] ASCII: %d", (char)key, key);
}
}
// ----------------------------------------------------
// 测试项 B: 鼠标与滚轮流测试
// ----------------------------------------------------
c_ConsoleMouseEvent_t mouse_evt;
if (c_Console_ReadMouse(&mouse_evt)) {
// 在第 18 行实时刷新鼠标动作
printf("\033[18;1H\033[2K");
switch (mouse_evt.type) {
case MOUSE_EVENT_PRESS_LEFT:
c_Console_WriteColorXY(2, 18, C_COLOR_BRIGHT_YELLOW, C_COLOR_NONE, "鼠标响应: 【左键点击】 坐标: (%d, %d)", mouse_evt.x, mouse_evt.y);
// 按钮矩形区域碰撞检测
if (mouse_evt.y == 10) {
if (mouse_evt.x >= 5 && mouse_evt.x <= 15) {
c_Console_WriteColorXY(5, 11, C_COLOR_BRIGHT_RED, C_COLOR_NONE, "🔥 触发 A !");
} else if (mouse_evt.x >= 20 && mouse_evt.x <= 30) {
c_Console_WriteColorXY(20, 11, C_COLOR_BRIGHT_RED, C_COLOR_NONE, "🔥 触发 B !");
}
}
break;
case MOUSE_EVENT_PRESS_RIGHT:
c_Console_WriteColorXY(2, 18, C_COLOR_BRIGHT_YELLOW, C_COLOR_NONE, "鼠标响应: 【右键点击】 坐标: (%d, %d)", mouse_evt.x, mouse_evt.y);
break;
case MOUSE_EVENT_WHEEL_UP:
c_Console_WriteColorXY(2, 18, C_COLOR_BRIGHT_BLUE, C_COLOR_NONE, "滚轮响应: 【向上滚动 ↑】 坐标: (%d, %d)", mouse_evt.x, mouse_evt.y);
break;
case MOUSE_EVENT_WHEEL_DOWN:
c_Console_WriteColorXY(2, 18, C_COLOR_BRIGHT_BLUE, C_COLOR_NONE, "滚轮响应: 【向下滚动 ↓】 坐标: (%d, %d)", mouse_evt.x, mouse_evt.y);
break;
case MOUSE_EVENT_MOVE:
// 右下角高频显示当前准心坐标
c_Console_WriteColorXY(screen_w - 20, 3, C_COLOR_BRIGHT_BLACK, C_COLOR_NONE, "鼠标悬停: (%03d, %03d)", mouse_evt.x, mouse_evt.y);
break;
case MOUSE_EVENT_RELEASE:
// 释放鼠标时清理按钮下方的触发提示字样
printf("\033[11;1H\033[2K");
break;
default:
break;
}
}
// 控制刷新帧率(约 50 FPS),避免 CPU 满载
c_Console_Sleep(20);
}
// 5. 退出处理:清屏并让 atexit 自动恢复终端原始设置
printf("\033[2J\033[H");
CONSOLE_CLEAR();
CONSOLE_SHOW_CURSOR();
CONSOLE_COLOR_RESET();
return 0;
}