中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: QB写的图形界面~ 上一主题 | 下一主题
happybasic
中级用户





积分 298
发帖 118
注册 2006-3-1
状态 离线
『楼 主』:  QB写的图形界面~ [已使用 LLM 解释]

没事做的~~~
LLM 解释

在 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 图形编程的基础模式——因缺乏高级框架,只能通过基础指令堆叠实现。这种“原生绘制”的方式也导致界面风格高度依赖开发者的实现,难以统一。



附件 1: TESTGUI.jpg (2008-12-3 21:16, 70.61 KiB,下载次数: 7)




欢迎光临happyBASIC小站:http://yxbasic.51.net
2007-6-30 07:21
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
liangdezhi
初级用户





积分 26
发帖 12
注册 2006-10-11
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下



2007-8-24 01:52
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

当年我QB的封笔之作——在VGA 12h 模式下实时抖动绘制真彩色数据 - zyl910的专栏 - CSDNBlog
http://blog.csdn.net/zyl910/archive/2006/05/29/762084.aspx





人类存在的目的就是试图理解人类为何存在
2007-8-24 11:49
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
happybasic
中级用户





积分 298
发帖 118
注册 2006-3-1
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

顶,不错~




欢迎光临happyBASIC小站:http://yxbasic.51.net
2007-8-24 12:32
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
happybasic
中级用户





积分 298
发帖 118
注册 2006-3-1
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

其实,后面我又作了一些更新:



Last edited by happybasic on 2007-8-24 at 01:13 PM ]




欢迎光临happyBASIC小站:http://yxbasic.51.net
2007-8-24 12:42
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
titanred
初级用户





积分 36
发帖 20
注册 2007-6-27
状态 离线
『第 6 楼』:  靠!!!!!!!!!!!!!!!!!!!! 使用 LLM 解释/回答一下

发代码呀,倒!


2007-11-25 13:51
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
maclover815
初级用户





积分 92
发帖 47
注册 2007-12-7
状态 离线
『第 7 楼』:  good 使用 LLM 解释/回答一下

good


2007-12-13 22:48
查看资料  发短消息  网志   编辑帖子  回复  引用回复
moonf
新手上路





积分 18
发帖 8
注册 2007-12-14
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

Originally posted by titanred at 2007-11-25 01:51 PM:
发代码呀,倒!

应该是用指令自己画的界面。line (x,y)-(x,y),color
本例子是用不同的颜色画出来的线组成的界面。而文本是draw string 写上去的


2008-1-11 20:25
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
kmlxk
初级用户





积分 45
发帖 17
注册 2006-9-23
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

Originally posted by zyl910 at 11:49:
当年我QB的封笔之作——在VGA 12h 模式下实时抖动绘制真彩色数据 - zyl910的专栏 - CSDNBlog
http://blog.csdn.net/zyl910/archive/2006/05/29/762084.aspx


见到CSDN的牛人了~赞


2008-2-24 02:34
查看资料  发送邮件  发短消息  网志  OICQ (86565242)  编辑帖子  回复  引用回复
sgzhou6688
中级用户





积分 231
发帖 110
注册 2008-3-24
来自 中国大陆
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

你只是说结果,怎么没有过程呀》》》》》》》》》》


2010-5-26 16:41
查看资料  发送邮件  发短消息  网志  OICQ (405418144)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: