中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-16 12:26
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » QB写的图形界面~ 查看 3,480 回复 9
楼 主 QB写的图形界面~ 发表于 2007-06-30 07:21 ·  中国 江苏 苏州 中移铁通
中级用户
★★
积分 298
发帖 118
注册 2006-03-01 13:30
UID 51161
状态 离线
没事做的~~~
[已使用 Gemini 解答]
Gemini 解答

在 DOS 环境下,QuickBASIC(QB)实现图形界面的核心依赖其内置的图形库(需通过 SCREEN 语句切换到图形模式),以及基础图形绘制指令。结合本帖后续回复的信息,其实现逻辑可归纳如下:

技术实现核心

  1. 图形模式切换
    需先通过 SCREEN mode 进入图形模式(如 VGA 常见的 SCREEN 12,对应 640×480 16 色模式),这是显示图形界面的前提。若未切换模式直接调用图形指令,会触发运行时错误。

  2. 界面元素绘制
    如 moonf 回复所述,界面的窗口边框、分隔线等通常通过 LINE 指令逐像素或逐线段绘制(如 LINE (x1,y1)-(x2,y2), color);文本标签则通过 PRINT(图形模式下支持)或 DRAW STRING(QB 4.5+ 新增,支持指定坐标输出文本)实现。这种“纯绘制”方式是 QB 图形界面的典型特征——无现成的“控件库”,需手动实现所有界面元素的渲染与更新。

  3. 真彩色模拟(如 zyl910 提到的抖动技术)
    QB 内置图形库仅支持 16 色或 256 色模式(如 SCREEN 13 为 320×200 256 色),无法直接显示真彩色。若需模拟真彩色效果,需通过抖动算法(如有序抖动、 Floyd-Steinberg 扩散)将 24 位真彩色数据转换为低色深模式下的像素组合,利用人眼视觉暂留产生近似真彩色的观感。这一技术在当年因硬件色彩限制被广泛用于图像显示。

当年的实现限制

  • 无原生控件支持:QB 未提供按钮、文本框等封装好的 GUI 控件,所有交互逻辑(如按钮点击检测、文本输入响应)需手动实现(通过 INKEY$LOCATE 检测鼠标/键盘输入,再判断坐标是否落在控件区域内),开发效率较低。
  • 性能瓶颈:纯软件绘制(无硬件加速)在复杂界面下可能出现卡顿,尤其是在低配置机器上(如 486 及以下)。
  • 色彩深度限制:受限于 DOS 显卡的硬件能力,高分辨率与高色彩深度不可兼得(如 SCREEN 12 为 640×480 16 色,SCREEN 13 为 320×200 256 色),真彩色显示只能通过抖动等技术模拟。

常见误解

当年部分用户可能将“手动绘制界面”误认为“复杂技术”,实则是 QB 图形编程的基础模式——因缺乏高级框架,只能通过基础指令堆叠实现。这种“原生绘制”的方式也导致界面风格高度依赖开发者的实现,难以统一。

附件
TESTGUI.jpg
欢迎光临happyBASIC小站:http://yxbasic.51.net
2 发表于 2007-08-24 01:52 ·  中国 广东 佛山 禅城区 电信
初级用户
积分 26
发帖 12
注册 2006-10-11 03:16
UID 65252
状态 离线
3 发表于 2007-08-24 11:49 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 282
发帖 126
注册 2006-05-17 22:29
UID 55724
状态 离线
当年我QB的封笔之作——在VGA 12h 模式下实时抖动绘制真彩色数据 - zyl910的专栏 - CSDNBlog
http://blog.csdn.net/zyl910/archive/2006/05/29/762084.aspx

人类存在的目的就是试图理解人类为何存在
4 发表于 2007-08-24 12:32 ·  中国 江苏 苏州 电信
中级用户
★★
积分 298
发帖 118
注册 2006-03-01 13:30
UID 51161
状态 离线
顶,不错~
欢迎光临happyBASIC小站:http://yxbasic.51.net
5 发表于 2007-08-24 12:42 ·  中国 江苏 苏州 电信
中级用户
★★
积分 298
发帖 118
注册 2006-03-01 13:30
UID 51161
状态 离线
其实,后面我又作了一些更新:



[ Last edited by happybasic on 2007-8-24 at 01:13 PM ]
欢迎光临happyBASIC小站:http://yxbasic.51.net
6 靠!!!!!!!!!!!!!!!!!!!! 发表于 2007-11-25 13:51 ·  中国 四川 攀枝花 电信
初级用户
积分 36
发帖 20
注册 2007-06-27 13:53
UID 92486
性别 男
状态 离线
发代码呀,倒!
7 good 发表于 2007-12-13 22:48 ·  中国 广东 腾讯云
初级用户
积分 92
发帖 47
注册 2007-12-07 13:20
UID 104967
性别 男
状态 离线
good
8 发表于 2008-01-11 20:25 ·  中国 四川 成都 电信
新手上路
积分 18
发帖 8
注册 2007-12-14 20:11
UID 105679
性别 男
状态 离线
Originally posted by titanred at 2007-11-25 01:51 PM:
发代码呀,倒!

应该是用指令自己画的界面。line (x,y)-(x,y),color
本例子是用不同的颜色画出来的线组成的界面。而文本是draw string 写上去的
9 发表于 2008-02-24 02:34 ·  中国 重庆 沙坪坝区 电信
初级用户
积分 45
发帖 17
注册 2006-09-23 13:24
UID 63469
状态 离线
Originally posted by zyl910 at 11:49:
当年我QB的封笔之作——在VGA 12h 模式下实时抖动绘制真彩色数据 - zyl910的专栏 - CSDNBlog
http://blog.csdn.net/zyl910/archive/2006/05/29/762084.aspx


见到CSDN的牛人了~赞
10 发表于 2010-05-26 16:41 ·  中国 山东 联通
中级用户
★★
积分 231
发帖 110
注册 2008-03-24 16:22
UID 113876
性别 男
来自 中国大陆
状态 离线
你只是说结果,怎么没有过程呀》》》》》》》》》》
论坛跳转: