📄 如何绘制显示进度百分比的进度条.txt
字号:
你 这 个 问 题 使 我 想 起 了 几 年 前 我 对 这 个 问 题 的 研 究 , 当 时 我 也 对 字 体 颜 色 改 变 感 到 困 惑 , 但 后 来 我 还 是 想 了 一 个 简 单 的 办 法 。 实 际 上 这 要 利 用 API的 一 个 函 数 ExtTextOut。 这 个 函 数 允 许 输 出 文 字 时 指 定 文 字 的 坐 标 和 一 个 矩 形 。 这 个 矩 形 用 来 剪 裁 文 字 , 超 出 矩 形 的 文 字 将 不 会 被 显 示 出 来 。 所 以 绘 制 百 分 比 分 两 次 矩 形 , 每 次 文 字 都 在 中 央 输 出 , 但 一 次 为 白 色 , 一 次 为 黑 色 。 两 次 的 矩 形 是 不 同 的 , 一 个 是 左 边 的 蓝 色 进 度 条 , 另 一 次 是 右 边 的 白 色 部 分 。 由 于 ExtTextOut的 剪 裁 作 用 , 就 出 现 了 半 个 字 的 效 果 。 具 体 程 序 如 下 :
// nImageWidth, nImageHeight为 图 形 区 域 宽 度 和 高 度
// nWidth, nHeight为 百 分 比 字 符 串 的 宽 度 和 高 度
SetTextColor(hDC, WHITE);
hBrush = CreateSolidBrush(BLUE);
hBrushOld = SelectObject(hBrush);
rect.Left = 0;
rect.Right = nImageWidth * Value / 100;
rect.Top = 0;
rect.Bottom = nImageHeight;
ExtTextOut(hDC,
(nImageWidth -nWidth) / 2,
(nImageHeight -nHeight) / 2,
ETO_CLIPPED | ETO_OPAQUE,
&rect,
sString,
sString,
NULL);
rect.Left = rect.Right;
rect.Right = nImageWidth;
SetTextColor(hDC, BLACK);
SelectObject(hBrushOld);
DeleteObject(hBrush);
hBrush = CreateSolidBrush(WHITE);
hBrushOld = SelectObject(hBrush);
ExtTextOut(hDC,
(nImageWidth -nWidth) / 2,
(nImageHeight -nHeight) / 2,
ETO_CLIPPED | ETO_OPAQUE,
&rect,
sString,
sString,
NULL);
SelectObject(hBrushOld);
DeleteObject(hBrush);
另 外 , 你 可 以 在 http://www.zealsoftstudio.com/cn/progbar/下 载 用 VB实 现 的 源 程 序 。
<END>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -