标题: 100KB的DOS图形界面开发(Borland/DJGPP 库)
[打印本页]
作者: ecurb2006
时间: 2007-2-22 14:55
标题: 100KB的DOS图形界面开发(Borland/DJGPP 库)
作者: zqlcch
时间: 2007-2-23 04:49
楼主的东西不错啊,很喜欢,
Allegro的GUI对汉字的汉字很麻烦,正研究得头疼。有楼主的东西就好了,哈哈。
作者: zqlcch
时间: 2007-2-23 05:21
汗,找不到DOS的开发包下载,请楼主重整主页。。。。。。。以正视听。。。
作者: ecurb2006
时间: 2007-2-23 15:42
标题: 楼上的朋友
正在制作"水印",完成了就上传。
你也可以先用 SDK for Windows(Beta),兼容的。
编程指南也可以先看看嘛,提点意见,我在修改修改
看你在用 DJGPP,要不我再做个 DJGPP 版的 ?
作者: zqlcch
时间: 2007-2-24 00:43
好啊,如果有空,请做一个DJGPP版本,多谢了。
作者: ecurb2006
时间: 2007-3-3 09:47
标题: 微型GUI for DOS (Borland 库)个人免费试用版[火热下载中]
已上传!
作者: happybasic
时间: 2007-3-4 04:33
Originally posted by zqlcch at 2007-2-24 00:43:
好啊,如果有空,请做一个DJGPP版本,多谢了。
期得DJGPP版本。。。。
作者: Kinglion
时间: 2007-3-4 05:30
不错,正在下载中。。。
作者: ecurb2006
时间: 2007-3-4 08:25
标题: >期得DJGPP版本。。。。
如果用 Allegro 作图形引擎,很快就可以做出来的
我尽快完成
作者: ecurb2006
时间: 2007-3-8 02:14
标题: 已经有一些网友在用 GUI 库 for DOS
作者: ecurb2006
时间: 2007-3-13 11:13
标题: 已修正一些 bugs
作者: ecurb2006
时间: 2007-3-16 09:21
标题: DOS图形桌面开发计划!
DOS图形桌面开发计划
开发者已经基本完成一个GUI 内置虚拟机和专用"汇编"编译器 .
有计划完成一个 DOS 图形桌面操作环境,利用 虚拟机完成应用程序与 GUI系统的分离。
采用 DJGPP/WATCOM 编译!
有兴趣的朋友可以访问 开发者的BLog
或者发邮件
ecurb2006@163.com
作者: xuxuezeng
时间: 2007-3-16 10:53
楼主的附件下来后打不开,有错误,在你的网站下来的是一样的错误!
作者: ecurb2006
时间: 2007-3-17 08:21
标题: 可以啊
你要下载哪一个呢?
我用邮件发给你也可以。
作者: haohaook
时间: 2007-3-18 05:49
支持窗口拖拉吗?
作者: ecurb2006
时间: 2007-3-19 06:56
标题: 恩。不打算支持窗口重叠。
打算支持更有用的功能,如 Unicode 编码支持!
ps:任务拦切换也很方便哦
作者: henrya2
时间: 2007-3-19 07:05
Good.
作者: happybasic
时间: 2007-4-30 23:33
顶出来!
作者: happybasic
时间: 2007-5-1 00:27
作者: ecurb2006
时间: 2007-5-1 02:12
标题: 皮肤界面的初步支持!
作者: yws
时间: 2007-5-9 12:32
不错,继续努力
作者: defrag
时间: 2007-5-13 19:26
可不可以做成Win98样式?
X-Window有许多人不熟悉
作者: ecurb2006
时间: 2007-5-14 22:03
你是指界面吗?
作者: ecurb2006
时间: 2007-5-15 19:52
标题: 演示如何创建对象,使用TEXTBOX文本框
/*
微型嵌入式GUI - 应用开发
Website: www.ecurb2006.com
演示如何创建对象,使用TEXTBOX文本框。
*/
#include "gui.h"
#define MyWinCommand_A 4 /* 按钮的ID*/
#define MyWinCommand_B 5
/* 私有数据,可以用来保存对象的句柄 */
/* 句柄实质是结构(struct)指针 */
typedef struct _MyWinData
{
HAND a;
HAND b;
HAND c;
}MyWinData,*PMyWinData;
/*
USER_PRO 为简单的宏定义
#define USER_PRO void
表明为对象消息处理函数
HAND 为对象句柄
MEEAGE 为消息结构
更多请查阅 微型嵌入式GUI 编程指南(http://www.ecurb2006.com)
*/
USER_PRO MyMainWin(HAND hd,MESSAGE msg)
{
if(msg.type == GM_SYSTEM)/* 先判断消息类型 */
switch(msg.message)
{
case GM_Draw:/* 对象显示(或重绘)时,产生这个消息*/
{
HDC hdc; /* HDC 为图形设备句柄 */
PefGDITag g=efGDI;
/*
efGDI为作图类, ef类操作方法之一,
整个GUI中对象类都采用了这种API封装方法,接口统一,简单易用
*/
hdc=g->Start(hd);/* 开始作图 */
g->SetColor(hdc,COLOR_BLACK); /* 设定颜色 */
g->DrawText(hdc,5,50,"Input a");/* 输出文字 */
g->DrawText(hdc,5,75,"Input b");
g->DrawText(hdc,5,100,"Show");
g->End(hd,hdc); /* 结束作图 */
}
return;
case GM_Create: /* 对象创建后产生的消息 ,可以在这里完成一些初始化操作 */
{
PMyWinData mydata=NULL;
mydata=(PMyWinData)Gmalloc(sizeof(MyWinData),"");/* 分配内存 */
if(!mydata) return; /* return NULL */
mydata->a=CreateObject(hd,TEXTBOX,1,0,"",70,50,200,70,0,0);
mydata->b=CreateObject(hd,TEXTBOX,2,0,"",70,75,200,95,0,0);
mydata->c=CreateObject(hd,TEXTBOX,3,0,"",70,100,200,120,0,0);
CreateObject(hd,BUTTON,MyWinCommand_A,0,"Show A",10,130,90,155,0,0);
CreateObject(hd,BUTTON,MyWinCommand_B,0,"Show B",100,130,180,155,0,0);
SetObjVar(hd,(HAND)mydata);/* 设定对象的私有数据指针 */
}
return;
case GM_Destroy:
{
PMyWinData mydata=NULL;
mydata=(PMyWinData)GetObjVar(hd);/* Get Object Var */
Gfree(mydata,sizeof(MyWinData));
}
return;
default:return;
}
if(msg.type == GM_COMMAND)
{
char strbuf;
PMyWinData mydata=NULL;
mydata=(PMyWinData)GetObjVar(hd);/* 获得对象的私有数据指针 */
if(!mydata) return;
memset(strbuf,0,257);
switch(msg.message)
{
case MyWinCommand_A:
efTextBox->Text(mydata->a,strbuf);/* 获得文本框内容*/
efTextBox->Set(mydata->c,strbuf);/* 设定文本框内容 */
return;
case MyWinCommand_B:
efTextBox->Text(mydata->b,strbuf);
efTextBox->Set(mydata->c,strbuf);
return;
default:return;
}
}
}
int gmain(void*data) /* GUI 应用程序的入口,相当于 main 函数 */
{
CreateObject(0,MAINWINDOW,1,1,"Hello,World",10,10,400,400,MyMainWin,data);/* 创建对象 */
return 0;
}
作者: ecurb2006
时间: 2007-5-15 20:02
标题: 演示如何创建对象,使用菜单,多选框和对话窗口
/*
微型嵌入式GUI - 应用开发
Website: www.ecurb2006.com
演示如何创建对象,使用菜单,多选框和对话窗口
*/
#include "gui.h"
MENU mymenu={
{1,"aaaa",0,0},
{1,"aaaa",0,0},
{1,"aaaa",0,0}
};
typedef struct _MyData
{
HAND a;
HAND menu;
}MyData,*PMyData;
USER_PRO MyWin(HAND hd,MESSAGE msg)
{
if(msg.type == GM_SYSTEM)
switch(msg.message)
{
case GM_Create:
{
PMyData md;
int i;
md=(PMyData)Gmalloc(sizeof(MyData),"");
CreateObject(hd,BUTTON,1,1,"Create Dialog",10,40,150,100,0,0); /* 创建按钮 */
md->a=CreateObject(hd,CHECKBOX,1,1,"Hello",10,120,100,140,0,0);/* 创建多选框 */
md->menu=CreateObject(hd,MAINMENU,1,1,"Menu",160,40,220,60,0,0);/* 创建对话窗口 */
for (i=0;i<3 ;i++ )
efMainMenu->Add(md->menu,&mymenu);/* 添加菜单子项 */
SetObjVar(hd,(HAND)md);
}
return;
default:return;
}
if(msg.type == GM_COMMAND)
switch(msg.message)
{
case 1:
{
PMyData md;
md=(PMyData)GetObjVar(hd);
if(!md) return;
if(efCheckBox->Get(md->a)) /* 获得多选框状态 */
efDialogWin->Start(hd,0,0,"选择了!",50,50,200,200,0,0); /* 启动对话窗口 */
else efDialogWin->Start(hd,0,0,"没选择!",50,50,200,200,0,0);
}
return;
default:return;
}
}
int gmain(void*data)
{
CreateObject(0,MAINWINDOW,1,1,"Hello,World",10,10,400,400,MyWin,0);
return 0;
}
作者: happybasic
时间: 2007-5-15 21:58
试过,不错~不过textbox的示例中,屏幕顶部会显示以下的start!等字啊~~~
是debug用的吧?
还有那个广告内容,还是去掉的好啊,只要好用大家自然会帮你好好宣传的
作者: ecurb2006
时间: 2007-5-23 20:36
标题: 更新微型嵌入式GUI的DOS的开发库。
作者: happybasic
时间: 2007-5-24 08:49
不错,不过启动界面的进度条给人的感觉不好,为什么不肯全部去掉开始的广告呢?
如果实在不行,我认为保留结尾时的广告就足够了~~~
我有向朋友们推荐过这个开发库,可是大家都对程式中的广告不满....
作者: ecurb2006
时间: 2007-5-24 14:25
谢谢happybasic的关心和支持!
如果用黑色字体在屏幕底部显示 GUI 信息,可能更友好一些.
呵呵,再把拼音输入法也加上.最近有朋友开始用这个GUI开发启动光盘盘里的程序了.
to happybasic:
我一开始学的编程语言就是 Basic,呵呵.现在想起来刚学编程的情形,真的很有意思.
作者: happybasic
时间: 2007-5-24 19:04
呵呵, 我也正因为是对Basic的喜爱,所以才开的happyBASIC小站,不过工作上基本上是以DJGPP/DOS or Borland C++ Builder/WIN为主了~
而Turbo C与QBasic都作为珍藏放在HD上,偶尔也用来做一些小程式~ 原来在QBasic中用过QBWIN, 一直希望出现类似于QBWIN的TC库... 你的这个库,刚好可以和QBWIN媲美了~~~
ps: QBWIN也没有任何的广告,可是也发展的很好啊~ 而Borland C/C++ 3.1的功能远比QB7强大,所以说你的这个库即使完全去掉广告,只能功能强大完全可以比QBWIN发展的更好!
作者: happybasic
时间: 2007-5-24 21:45
关于borland C开发库的制作,请教ecurb,
我做了一个显示汉字函数,并生成库.h与引用如下:
#ifndef __TCCH_H__
#define __TCCH_H__
int FontColor; //字体色彩
int FontLocaX; //x轴坐标
int FontLocaY; //y轴坐标
int PrintHZ(char *p);
#endif
在另外一个.CPP中此引用
PrintHZ("中国人");
, 编译时则会出现如下图的error: (注若将文件名改为.C结尾,则可以编译成功,但显示不出来, 但将函数直接copy到.cpp or .c中都是可以的)

作者: happybasic
时间: 2007-5-24 21:45
关于borland C开发库的制作,请教ecurb,
我做了一个显示汉字函数,并生成库.h与引用如下:
#ifndef __TCCH_H__
#define __TCCH_H__
int FontColor; //字体色彩
int FontLocaX; //x轴坐标
int FontLocaY; //y轴坐标
int PrintHZ(char *p);
#endif
在另外一个.CPP中此引用
PrintHZ("中国人");
, 编译时则会出现如下图的error: (注若将文件名改为.C结尾,则可以编译成功,但显示不出来, 但将函数直接copy到.cpp or .c中都是可以的)

作者: happybasic
时间: 2007-5-31 19:32
好久没更新了,顶出来看看~
作者: ecurb2006
时间: 2007-6-1 18:42
标题: Borland编译器制作库
由于个人爱好,喜欢使用命令行编译器,而不是开发环境。
这里以简单的例子说明,希望对happybasic有帮助(这几日有点忙,不好意思)
1.首先编译函数库。
文件 a.c
int fun(void)
{return 0;}
文件 a.h
int fun(void);
bcc -c a.c
2.建立二进制库
tlib a.lib +a.obj
作者: stockghost
时间: 2007-6-4 20:59
很好,下来看看,谢谢楼主.
作者: lixun305
时间: 2007-6-8 10:43
谢谢!
作者: allis8
时间: 2007-6-8 23:58
谢谢分享
作者: happybasic
时间: 2007-6-18 07:12
顶出来,不知ecurb2006是否有最新的进展?
作者: ecurb2006
时间: 2007-6-23 13:29
标题: sdk4dos开发包news.txt
2007-6-23 增加退出函数。
void QuitWindow(HAND hd); /* hd 为当前窗口的HAND句柄 */
作者: yueluck
时间: 2007-7-7 09:20
标题: 开发手册?
好象开发手册内容不是很全面,我们该怎么用?
作者: ecurb2006
时间: 2007-7-30 12:52
标题: DOS图形记事本(基于GUI)源代码及设计文档
作者: ecurb2006
时间: 2007-7-30 12:56
标题: 可以参考开发包中的例子
加入 应用开发QQ群 17440530
有任何疑问可以发邮件给我 ecurb2006 # gmail.com
作者: ecurb2006
时间: 2007-7-30 12:59
标题: 修正CheckBox及Tab支持
修正CheckBox及Tab支持
使CheckBox可以接受键盘操作(空格),还有 焦点 的响应
作者: ecurb2006
时间: 2007-8-8 19:11
标题: DJGPP版本基本完成,预计明天晚上就可以上传了
屏幕分辨率:640*480
颜色:256色
(ps:可能会有一些显卡不兼容)
API 与16位版本保持兼容.
微型嵌入式GUI应用开发QQ群 17440530
有什么建议或者想法,请发邮件 ecurb2006#gmail.com
MSN:ecurb2006#hotmail.com
作者: ecurb2006
时间: 2007-8-11 22:38
标题: 微型嵌入式GUI-DJGPP版本-已经上传
作者: ecurb2006
时间: 2007-8-12 12:57
作者: happybasic
时间: 2007-8-13 18:04
不错,但是:
1. DJGPP版本有点慢。。。
2. Borland C版本比较快,但开始的那个进度条与广告词不是很喜欢。
3. 一直看到你有两个for Windows版的,Windows下的GUI,不知道主要应用是在哪些方面?在windows下用windows的窗口不就好了
作者: zqlcch
时间: 2007-8-13 18:28
呵呵,继续报告BUG。。。。
一、
efTextBox的Set函数有问题,没有把最后一个字符串结尾的#0一起复制到新的CHAR指针中,我不得不用如下作法:
memset(TmpStr,0,4096); //先用#0填充一次。。。
efTextBox->Text(edtWorkGroup,TmpStr);
二、Label控件也能获得输入焦点
从常理说Label控件是不能获得输入焦点的,但这个GUI中是可以的,结果出现如下情况:
建立一个BUTTON,建立一个LABEL,反复按TAB键,发现焦点在BUTTON和LABEL来回切换,但切换到LABEL时LABEL也没有显示一个焦点的方框,结果用户发现输入焦点不见了,容易引起误会。。。。
三、不算是BUG,但做了更好
BUTTON控件不能支持按回车键执行。。。。
作者: ecurb2006
时间: 2007-8-13 18:50
标题: re:happybasic
1. DJGPP版本有点慢。。。
图形引擎还有比较慢的算法,继续优化
2. Borland C版本比较快,但开始的那个进度条与广告词不是很喜欢。
恩.kill 掉广告条吧:) 在背景点右键,放个 about 窗口,大家不会反对吧?呵呵
3. 一直看到你有两个for Windows版的,Windows下的GUI,不知道主要应用是在哪些方面?在windows下用windows的窗口不就好了
Windows 版本,是了为了 应用开发方便一点,因为API兼容,所以在Windows 上开发好了,直接在BorlandC3.1/DJGPP/Linux上重新编译就可以了.
Last edited by ecurb2006 on 2007-8-13 at 06:55 PM ]
作者: ecurb2006
时间: 2007-8-13 18:53
标题: re:zqlcch
呵呵,继续报告BUG。。。。
一、
efTextBox的Set函数有问题,没有把最后一个字符串结尾的#0一起复制到新的CHAR指针中,我不得不用如下作法:
memset(TmpStr,0,4096); //先用#0填充一次。。。
efTextBox->Text(edtWorkGroup,TmpStr);
#这个bug,已经修正了,明天一起发布新的无启动画面的版本吧:)
二、Label控件也能获得输入焦点
从常理说Label控件是不能获得输入焦点的,但这个GUI中是可以的,结果出现如下情况:
建立一个BUTTON,建立一个LABEL,反复按TAB键,发现焦点在BUTTON和LABEL来回切换,但切换到LABEL时LABEL也没有显示一个焦点的方框,结果用户发现输入焦点不见了,容易引起误会。。。。
# OK,修正一下,已经 新增加一个API SetObjFocus(HAND); 可以制定焦点 对象.
三、不算是BUG,但做了更好
BUTTON控件不能支持按回车键执行。。。。
#OK. i will do it tonight.
明天有新版本更新,不要错过:)
Last edited by ecurb2006 on 2007-8-13 at 06:57 PM ]
作者: ecurb2006
时间: 2007-8-13 19:03
标题: 欢迎加入 微型嵌入式GUI 应用开发QQ群17440530
附加消息:ecurb2006
ps:特别感谢zqlcch 和 happybasic 两位网友的热心关注和支持!
作者: zqlcch
时间: 2007-8-13 20:58
ecurb2006界面比较美观,只需要一个HZKXX,简单小巧,所以喜欢,如果不困难的话,可以考虑加上对12点阵汉字的支持,比如UCDOS的HZK12。这样就完全超过QBWIN了。
另外在文档中对于子对话框的使用描述还不够详细啊。
Last edited by zqlcch on 2007-8-13 at 09:00 PM ]
作者: ecurb2006
时间: 2007-8-14 12:34
标题: re:zqlcch
MessageBox 已经做出来了,和Win32接口相同.
因为修改了底层的代码,我自己再仔细调试一下.
晚上传上来,包括每个控件的例子代码(有详细注释).
作者: happybasic
时间: 2007-8-14 15:45
Originally posted by ecurb2006 at 2007-8-13 18:50:
Windows 版本,是了为了 应用开发 ...
呵呵,原来如此啊,那我就下 for DJGPP, for Borland C 16bit就可以了,如果只是为了开发方便,啊,只要是好东西,我不怕麻烦~
作者: happybasic
时间: 2007-8-14 15:50
Originally posted by zqlcch at 2007-8-13 20:58:
ecurb2006界面比较美观,只需要一个HZKXX,简单小巧,所以喜欢,如果不困难的话,可以考虑加上对12点阵汉字的支持,比如UCDOS的HZK12。这样就完全超过 ...
建议采用捆绑字库的方法,QBWIN是可以捆绑字库的.... 我原来写的那个QBCH也可以捆绑字库,QBCH+WIN写了一半,也是可以捆绑字库(ex:如附件)
建议加入这个功能,这样不用带一个HZKxx了...
作者: cwj2008
时间: 2007-8-16 18:23
我喜欢
作者: cwj2008
时间: 2007-8-16 18:23
支持这个
作者: ecurb2006
时间: 2007-8-19 04:41
标题: DJGPP版本全面更新!
作者: ecurb2006
时间: 2007-8-19 04:46
作者: ecurb2006
时间: 2007-8-19 10:00
作者: zqlcch
时间: 2007-8-19 15:40
for dos版的貌似不能下载。。。
作者: ecurb2006
时间: 2007-8-19 18:04
标题: re:zqlcch
作者: zqlcch
时间: 2007-8-20 09:45
有错误,MSGBOX.C不能通过编译,提示未定义的符号。。。
作者: zqlcch
时间: 2007-8-20 11:46
继续报告BUG。。。。。。
LABEL还是能得到焦点。。。。。LABLE不能显示,包括示例代码。。。
MESSAGEBOX函数不能使用,包括示例代码。。。。。
最好还是出个BC31版本。。。。。因为DJGPP调用实模式中断很麻烦的说。。。尤其是需要进行内存数据传输时。。。。
作者: happybasic
时间: 2007-8-20 18:26
作者: ecurb2006
时间: 2007-8-21 17:35
有错误,MSGBOX.C不能通过编译,提示未定义的符号。。。
继续报告BUG。。。。。。
LABEL还是能得到焦点。。。。。LABLE不能显示,包括示例代码。。。
MESSAGEBOX函数不能使用,包括示例代码。。。。。
最好还是出个BC31版本。。。。。因为DJGPP调用实模式中断很麻烦的说。。。尤其是需要进行内存数据传输时。。。。
微型嵌入式GUI-DJGPP+DJGPP编译器组合 版本 下载 (推荐!)
http://www.ecurb2006.com/download/gui-djgpp.zip
请将gui目录下的 libgui.a 复制到 djgpp 的lib目录 (覆盖原来的库!)
作者: ecurb2006
时间: 2007-8-21 17:47
标题: 使用遇到问题
可以加我 MSN ecurb2006#hotmail.com (#->@)
作者: happybasic
时间: 2007-8-21 20:04
报告BUG, DJGPP版本的mouse只能在屏幕的约上半边移动,不能移到下半部。。。
作者: ecurb2006
时间: 2007-8-22 09:55
标题: re:happybasic
可能又些显卡不兼容这个模式,造成无法显示或者只显示1/4(整个屏幕).
不知道happybasic 的情况是不是这样.
如果是 1/2 就比较奇怪了,鼠标不能移动的地方,有窗口等显示么?
作者: ecurb2006
时间: 2007-8-22 10:39
标题: Borland库更新!!!!!
作者: happybasic
时间: 2007-8-22 12:19
Originally posted by ecurb2006 at 2007-8-22 09:55:
可能又些显卡不兼容这个模式,造成无法显示或者只显示1/4(整个屏幕).
不知道happybasic 的情况是不是这样.
如果是 1/2 就比较奇怪了,鼠标不能移动的地方,有窗口等显示么?
显示是全屏,鼠标不能移的地方,有窗口
作者: ecurb2006
时间: 2007-8-22 20:49
标题: Borland库继续更新!!!!!
作者: ecurb2006
时间: 2007-8-22 20:52
显示是全屏,鼠标不能移的地方,有窗口
比较奇怪了,是运行的例子程序么?所有的例子都这样?
加我 MSN:ecurb2006#hotmail.com (#->@)
作者: happybasic
时间: 2007-8-22 21:10
是的
作者: zqlcch
时间: 2007-8-23 09:02
经过测试,现在已经很棒了!!
继续提:SelBox有BUG,对某个项目双击会使选中的蓝条消失,但实际还是选中的。。。SelBox不支持键盘操作。
MsgBox函数ecurb2006兄偷懒了,为啥按钮显示的是YESNOONCANCEL而不是中文,当然,这个问题是小事,可以在编译后用16进制编辑器解决。。。。
最后一个:给控件加上热键功能吧,像其他GUI库那样,可以由用户指定。。比如按Alt+A是按按钮XX,按Alt+L是某列表框获得焦点等等............当然,这也可以用变通用方法解决,但会增加使用者的开发的时间。。。。
Last edited by zqlcch on 2007-8-23 at 09:09 AM ]
作者: ecurb2006
时间: 2007-8-23 12:14
标题: re:zqlcch
经过测试,现在已经很棒了!!
谢谢!
MsgBox函数ecurb2006兄偷懒了,为啥按钮显示的是YESNOONCANCEL而不是中文,当然,这个问题是小事
好的.修改一下.
最后一个:给控件加上热键功能吧,像其他GUI库那样,可以由用户指定。。比如按Alt+A是按按钮XX,按Alt+L是某列表框获得焦点等等............当然,这也可以用变通用方法解决,但会增加使用者的开发的时间。。。。
好的.会加上的.
非常感谢 zqlcch 的仔细测试!!
(我MSN:ecurb2006@hotmail.com,经常交流!)
Last edited by ecurb2006 on 2007-8-23 at 12:15 PM ]
作者: ecurb2006
时间: 2007-8-23 12:15
继续提:SelBox有BUG,对某个项目双击会使选中的蓝条消失,但实际还是选中的。。。SelBox不支持键盘操作。
OK. i will do it tonight.
作者: ecurb2006
时间: 2007-8-23 12:37
标题: 综合例子1
/*
Example_1 - 对话窗口,按钮,文本编辑框 综合应用
使用自定义数据,SetObjVar,GetObjVar进行对象之间的信息交互
www.ecub2006.com
*/
#include "gui.h"
typedef struct _MyWinData /* 自定义数据 */
{
char buf; /* 用保存文本框的内容 */
HAND dlg_button;/* 对话窗口的OK按钮句柄*/
HAND dlg_textbox;/* 对话窗口的文本框句柄*/
}MyWinData,*PMyWinData;
void MyDialog(HAND hd,MESSAGE msg) /* 对话窗口的消息处理函数 */
{
PMyWinData pWin;/* 自定义数据的指针 */
HAND hdd=GetObjHost(hd); /* 获得主窗口的句柄*/
pWin=GetObjVar(hdd);/* 获得自定义数据 */
if(!pWin) return; /* 错误返回 */
if(msg.type == GM_SYSTEM) /* 系统类消息*/
switch(msg.message)
{
case GM_Create:/* 创建文本框*/
pWin->dlg_textbox=CreateObject(hd,TEXTBOX,4,1,"",10,40,150,60,0,0);
/* 创建按钮 */
pWin->dlg_button=CreateObject(hd,BUTTON,5,1,"OK",70,70,170,90,0,0);
return;
case GM_Destroy:
return;
default:
return;
}
if(msg.type == GM_COMMAND)/* 按钮消息*/
switch(msg.message)
{
case 5:/* OK按钮 */
efTextBox->Text(pWin->dlg_textbox,pWin->buf);/* 复制文本内容到buf*/
efDialogWin->Quit(hd);/* 退出对话窗口 */
return;
default:
return;
}
}
void MyWin(HAND hd,MESSAGE msg)/* 主窗口消息处理函数 */
{
PMyWinData pWin;/* 自定义数据结构指针 */
if(msg.type == GM_SYSTEM) /* 系统类消息*/
switch(msg.message)
{
case GM_Create:
{
/* 分配内存空间 */
pWin=(PMyWinData)Gmalloc(sizeof(MyWinData),"");
SetObjVar(hd,pWin);/* 设定对象的自定义数据 */
/* 创建按钮 */
CreateObject(hd,BUTTON,1,1,"输入",10,40,110,65,0,0);
CreateObject(hd,BUTTON,2,1,"显示",10,70,110,95,0,0);
}
return;
case GM_Destroy:
{
pWin=GetObjVar(hd);/* 获得自定义数据 */
Gfree(pWin,sizeof(MyWinData));/* 释放内存空间 */
}
return;
default:
return;
}
pWin=GetObjVar(hd);/* 获得自定义数据 */
if(!pWin) return;
if(msg.type == GM_COMMAND)
switch(msg.message)
{
case 1:/* 启动一个对话窗口 */
efDialogWin->Start(hd,3,1,"输入-对话窗口",10,40,200,140,MyDialog,0);
return;
case 2:/* 消息窗口 */
MessageBox(hd,"信息",pWin->buf,MB_OK);
return;
default:
return;
}
}
int gmain(void *data)
{
/* 创建窗口 */
CreateObject(0,MAINWINDOW,1,1,"Ex1",10,10,630,300,MyWin,data);
return 0;
}
作者: zqlcch
时间: 2007-8-25 22:37
装MSN去。。。
作者: ecurb2006
时间: 2007-8-28 17:22
标题: Dialog- 使用对话窗口,需要注意的地方。
/*
Dialog- 使用对话窗口,需要注意的地方。
http://www.ecurb2006. com
当style 为 1 时,
如 : CreateObject(0,MAINWINDOW,1,1,"Test",20,40,620,440,MyWin,0);
当对话窗口类的消息处理函数收到GM_Close时,回自动关闭窗口,销毁窗口。
需要说明的是,GUI的消息分发机制是
先将消息发送要对象类的消息函数,
再发送到对象的消息处理函数。
在这种情况下,产生GM_Close ,先发送对象类消息处理函数,
因为style为1,自动关闭窗口,销毁对象,会产生新的GM_Destroy消息。
这时,对象类的消息处理部分结束。(主窗口MAINWINDOW与对话窗口Dialog style 效果相同)
根据消息分发机制,这时对象的消息处理函数才收到GM_Close,接着收到GM_Destroy消息。
所以会造成 先收到 GM_Destroy 消息,再收到 GM_Close 消息。
这样会不会造成错误呢 ?答案是,只要正确使用就不会出问题。
如果希望接受GM_Close,再判断是否退出 对话窗口,只需将 style 设置为 3 就可以了。
当 style 为2 时,对话窗口类的消息处理函数,不处理GM_Close消息。
所以这时,在对话窗口的消息消息处理函数中,GM_Close 中使用 efDialogWin->Quit(HAND);来退出就可以了,
如果没有使用,那么对话窗口就不会退出,也不会销毁。
调用efDialogWin->Quit(HAND)后,会产生GM_Destroy消息。
可以修改下面这个例子中的style 值(第76行),来观察实际运行效果,更明确的理解如果使用对话窗口。
所以说,开始一个对话窗口后,GM_Create,GM_Destroy 只会产生一次。
当style 为2的时候,GM_Close 有可能多次产生(没有调用efDialogWin->Quit(HAND);来退出)
这样,当创建了分配空间,建立私有数据时,请在 GM_Create 里分配空间,在 GM_Destroy 里销毁(释放).
*/
#include "../gui.h"
void MyDialog(HAND hd,MESSAGE msg)
{
void *buf;
if(msg.type == GM_SYSTEM)
switch(msg.message)
{
case GM_Create:
MessageBox(hd,"GM_SYSTEM","GM_Create",0);
return;
case GM_Destroy:
MessageBox(hd,"GM_SYSTEM","GM_Destroy",0);
return;
case GM_Close:
MessageBox(hd,"GM_SYSTEM","GM_Close",0);
return;
default:
return;
}
}
void MyWin(HAND hd,MESSAGE msg)
{
if(msg.type == GM_SYSTEM)
switch(msg.message)
{
case GM_Create:
CreateObject(hd,BUTTON,1,1,"Dialog",10,50,210,75,0,0);
return;
case GM_Destroy:
return;
default:
return;
}
if(msg.type == GM_COMMAND)
switch(msg.message)
{
case 1:/* 可以修改下面的style 值,来观察实际运行效果,更明确的理解如果使用对话窗口。 */
efDialogWin->Start(hd,1,1,"MyDialog",10,30,180,200,MyDialog,0);
/* efDialogWin->Start(hd,1,2,"MyDialog",10,30,180,200,MyDialog,0); */
return;
case 2:
return;
default:
return;
}
}
int gmain(void *data)
{
CreateObject(0,MAINWINDOW,1,1,"Test",20,40,620,440,MyWin,0);
return 0;
}
作者: ecurb2006
时间: 2007-9-9 21:36
标题: Linux上的SDK发布了!!!!
作者: agang220
时间: 2007-9-11 17:12
谢谢楼主
作者: dongyongqiang
时间: 2007-12-6 21:13
Thank you very much!
作者: maclover815
时间: 2007-12-13 22:29
标题: 强
支持一下,继续努力
作者: ipc185
时间: 2007-12-20 13:22
标题: 网站打不开了???
网站打不开了???
也无法下载,有新的下载地点吗?
谢谢!
作者: ecurb2006
时间: 2007-12-21 21:39
作者: ecurb2006
时间: 2008-9-5 20:11
微型嵌入式GUI - 归来!
正式启用新域名:
www.ecgui.com
即将推出新版本! eCGUI 1.0 Beta.
欢迎关注!
作者: ecurb2006
时间: 2008-9-11 22:47
标题: eCGUI-0.1-Beta-for-DOS-16bit-下载
作者: ecurb2006
时间: 2008-9-12 00:15
上面的链接提供的库,是最新,最稳定的版本。
稍后,将推出带中文拼音输入法的库(在演示程序里有:)
作者: ecurb2006
时间: 2008-9-18 20:07
标题: eCGUI-0.2-Beta-for-DOS-16bit-下载
作者: ecurb2006
时间: 2008-10-25 20:03
标题: 增加JPEG图像支持
作者: ecurb2006
时间: 2008-10-25 23:31
标题: JPEG图像显示例子
/*
Jpeg - JPG图像显示,及桌面背景的更换
Website:www.ecgui.com
E-mail:ecgui.com@ecgui.com
*/
#include "gui.h" /* GUI 的头文件 */
void MyJPG(HAND hd,MESSAGE msg)
{
if(msg.type == GM_SYSTEM) /* 判断消息类型,消息类型全部为大写 */
switch(msg.message) /* 判断消息 */
{
case GM_Draw:
{
HDC hdc;
IMAGE img;/* Image 图像结构 */
hdc=efGDI->Start(msg.pHOST);/* 获得 HDC 绘图句柄,开始绘图 */
img.filename="logo.jpg"; /* 图像文件名 */
img.type=IMAGE_TYPE_JPG;/* 文件类型*/
img.hdc=hdc;/* 绘图句柄 */
efImage->Load(&img);/* 初步读图像信息 */
efImage->Show(&img,0,0);/* 显示图像 */
efGDI->End(msg.pHOST,hdc); /* 释放 HDC 绘图句柄 */
}
return;
default:break;
}
}
void imgjpg_init(void); /*函数声明: 注册JPEG图像函数支持*/
HDC StartDesktopDraw(void); /* 函数声明:获得 桌面 HDC 绘图句柄,开始绘图 */
void EndDesktopDraw(HDC); /*函数声明: 释放桌面 HDC 绘图句柄 */
int gmain(void *data) /* GUI程序 的入口函数 */
{
imgjpg_init();/* *注册JPEG图像函数支持*/
{
HDC hdc;/* HDC 绘图句柄 */
IMAGE img; /* Image 图像结构 */
hdc=StartDesktopDraw();/* 获得 桌面 HDC 绘图句柄,开始绘图 */
img.filename="alizee.jpg"; /* 图像文件名 */
img.type=IMAGE_TYPE_JPG; /* 文件类型*/
img.hdc=hdc; /* 绘图句柄 */
efImage->Load(&img); /* 初步读图信息 */
efImage->Show(&img,0,0); /* 显示图像 */
EndDesktopDraw(hdc); /* 释放桌面 HDC 绘图句柄 */
}
/* 创建一个主窗口 */
CreatObject(0,MAINWINDOW,1,1,"JEPG Picture - Power by eCGUI-www.ecgui.com",5,10,510,570,MyJPG,data);
return True;
}
/* ************** End of file **************** */
;编译
bcc -mh jpeg.c lib\gui.lib lib\libjpeg.lib
;最好再使用upx.exe 压缩一下,在开发包的_up 目录中有upx.exe
_up\upx -5 jpeg.exe
运行结果

作者: ecurb2006
时间: 2008-10-27 09:14
标题: Unicode德文显示支持!
作者: ecurb2006
时间: 2008-11-9 11:26
作者: crazii
时间: 2008-11-11 13:37
我打不开eCGUI的网站.
难道已经仙逝了....
作者: ecurb2006
时间: 2008-11-11 15:46
作者: ecurb2006
时间: 2008-11-30 10:59
作者: ecurb2006
时间: 2008-12-1 07:17

平铺式多窗口支持 (内测版)
作者: ecurb2006
时间: 2008-12-22 15:49
CGUI微型嵌入式GUI -QQ群 76249907
作者: ecurb2006
时间: 2008-12-24 08:20
标题: eCFileMan文件管理器0.1版-Alpha
eCFileMan目标是成为一个基于eCGUI的图形文件管理器。能够在春DOS下运行,方便DOS下的文件管理操作。
目前还处于测试开发阶段。这里提供代码。目前仅实现了,文件列表现实。
代码分成两个文件:ecfm.c list.c
/* ------------- ecfm.c - start */
/*
Copyright (C) 2008 ecGUI Developers
All rights reserved.
Website: www.ecgui.com
Info: ecgui.com@gmail.com
-- list.c ---
*/
#include "gui.h"
#include "list.c"
#define ITEM_NUM 6 /* 项目数*/
typedef struct _eCFMData
{
HAND urlbox;
}eCFMData,*PeCFMData;
eCFileMan Gecfm_buf;
PeCFileMan Gecfm=&Gecfm_buf;
char buf;
void eCFMWin(HAND hd,MESSAGE msg)
{
HAND box,button;/* 句柄 */
PMENU pm;
int i;
if(msg.type==GM_SYSTEM)
switch(msg.message)
{
case GM_Create:
CreateObject(hd,TEXTBOX,1,1,"",5,40,315,60,0,0);
box=CreateObject(hd,SELBOX,1,1,"",5,65,315,400,0,0); /* 创建 选择框 对象 */
#if 0
pm=(PMENU)malloc(sizeof(MENU)*ITEM_NUM*2);
for(i=0;i<12;i++)
{
pm->szTitle="a";
efSelBox->Add(box,pm); /* 添加子项 */
pm++;
}
#endif
{
PLIST pl=NULL;
PFileList pfl;
scandir(Gecfm,"");
for(pl=Gecfm->pDirListHead;pl!=NULL;pl=pl->pNEXT)
{
pfl=(PFileList)pl->pData;
if(pfl->type==FT_DIR)
//printf("<%s>\n",pfl->name);
//sprintf(pfl->name,"<%s>",pfl->name);
{
sprintf(buf,"<%s>",pfl->name);
strcpy(pfl->name,buf);
pfl->item.szTitle=pfl->name;
efSelBox->Add(box,&(pfl->item));
}
}
pl=Gecfm->pFileListHead;
pl=pl->pNEXT->pNEXT;
for(;pl!=NULL;pl=pl->pNEXT)
{
pfl=(PFileList)pl->pData;
if(pfl->type==FT_FILE)
{
//sprintf(buf,"<%s>",pfl->name);
//strcpy(pfl->name,buf);
pfl->item.szTitle=pfl->name;
efSelBox->Add(box,&(pfl->item));
}
}
for(pl=Gecfm->pDirListHead;pl!=NULL;pl=pl->pNEXT)
{
pfl=(PFileList)pl->pData;
if(pfl->type==FT_FILE)
{
//sprintf(buf,"<%s>",pfl->name);
//strcpy(pfl->name,buf);
pfl->item.szTitle=pfl->name;
efSelBox->Add(box,&(pfl->item));
}
}
}
break;
case GM_Draw:
break;
default:
break;
}
}
int gmain(void *data) /* GUI程序 的入口函数 */
{
/* 创建一个主窗口 */
CreatObject(0,MAINWINDOW,1,1,"eCFileMan 0.1 Beta(081213)",0,0,640,480,eCFMWin,data);
return True;
}
作者: ecurb2006
时间: 2008-12-24 08:21
/* ********** list.c -start ***********/
/*
Copyright (C) 2008 ecGUI Developers
All rights reserved.
Website: www.ecgui.com
Info: ecgui.com@gmail.com
-- list.c ---
*/
#include <stdio.h>
#include <dir.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FT_FILE 0
#define FT_DIR 1
typedef struct _LIST{
void *pData;
struct _LIST *pPRE;
struct _LIST *pNEXT;
}LIST,*PLIST;
PLIST addList(PLIST p,void *pData)
{
PLIST plnew=NULL,pl;
plnew=(PLIST)malloc(sizeof(LIST));
if(plnew==NULL) return NULL;
if(p==NULL)
{
plnew->pPRE=NULL;
plnew->pNEXT=NULL;
plnew->pData=pData;
return (plnew);
}
pl=p;
while(pl->pNEXT!=NULL) pl=pl->pNEXT;
plnew->pPRE=pl;
plnew->pNEXT=NULL;
plnew->pData=pData;
pl->pNEXT=plnew;
return(plnew);
}
PLIST insertList(PLIST pl,void *pData)
{
PLIST pn=NULL;
pn=(PLIST)malloc(sizeof(LIST));
if(pn==NULL) return NULL;
pn->pData=pData;
pn->pPRE=pl;
pn->pNEXT=NULL;
if(pl)
{
pn->pNEXT=pl->pNEXT;
pl->pNEXT=pn;
if(pl->pNEXT)
{
pl->pNEXT->pPRE=pn;
}
}
return pn;
}
PLIST delList(PLIST pl)
{
PLIST next=NULL;
if(pl == NULL) return 0;
next=pl->pNEXT;
if(pl->pNEXT)
(pl->pNEXT)->pPRE=pl->pPRE;
if(pl->pPRE)
(pl->pPRE)->pNEXT=pl->pNEXT;
free(pl);
pl=NULL;
return next;
}
typedef struct _FileList
{
int struct_size;
int type; /* 0 : File 1:Dir */
char name;
int size;
MENU item;
}FileList,*PFileList;
typedef struct _eCFileMan
{
PLIST pFileListHead;
PLIST pFileListTail;
PLIST pDirListHead;
PLIST pDirListTail;
}eCFileMan,*PeCFileMan;
void AddFile(PeCFileMan ecfm,int type,char *name,int size)
{
PFileList nf;
if(!ecfm) return;
nf=malloc(sizeof(FileList));
memset(nf,0,sizeof(FileList));
nf->struct_size=sizeof(FileList);
nf->type=type;
strcpy(nf->name,name);
nf->size=size;
if(type==FT_FILE)
{
if(!ecfm->pFileListHead)
ecfm->pFileListTail=ecfm->pFileListHead=insertList(NULL,nf);
else ecfm->pFileListTail=insertList(ecfm->pFileListTail,nf);
}
else if(type == FT_DIR)
{
if(!ecfm->pDirListHead)
ecfm->pDirListTail=ecfm->pDirListHead=insertList(NULL,nf);
else ecfm->pDirListTail=insertList(ecfm->pDirListTail,nf);
}
}
int scandir(PeCFileMan ecfm,char *dirname)
{
DIR *dir;
struct dirent *ent;
int type;
struct ffblk ffblk;
int done;
PLIST pl=NULL;
PFileList pfl;
//printf("First pass on '%s':\n",dirname);
if ((dir = opendir(dirname)) == NULL)
{
//perror("Unable to open directory");
//exit(1);
return 0;
}
AddFile(ecfm,FT_DIR,"..",0);
while ((ent = readdir(dir)) != NULL)
{
//printf("%s\n",ent->d_name);
#if 1
if(strstr(ent->d_name,"."))
type=FT_FILE;
else {type=FT_DIR; /* printf("\n-dir-\n"); */}
AddFile(ecfm,type,ent->d_name,0);
#endif
}
/*
printf("Second pass on '%s':\n",dirname);
rewinddir(dir);
while ((ent = readdir(dir)) != NULL)
printf("%s ",ent->d_name);
*/
if (closedir(dir) != 0);
// perror("Unable to close directory");
done = findfirst("*.",&ffblk,0);
while (!done)
{
//printf("%s\n", ffblk.ff_name);
for(pl=ecfm->pDirListHead;pl!=NULL;pl=pl->pNEXT)
{
pfl=(PFileList)pl->pData;
//printf("%s = %s \n",pfl->name,ffblk.ff_name);
if(strcmp(pfl->name,ffblk.ff_name)==0)
pfl->type=FT_FILE;
//else printf("%s\n",pfl->name);
}
done = findnext(&ffblk);
}
return 1;
}
作者: ynlc
时间: 2009-2-21 11:30
这个很不错呀。
作者: zyl20028246
时间: 2009-2-24 19:20
标题: 我想要
作者: ecurb2006
时间: 2009-2-25 21:19
作者: ecurb2006
时间: 2009-4-4 10:43
标题: eCGUI 新版截图

控件全面支持皮肤功能
作者: whitecloud
时间: 2009-4-7 13:21
很好呀,功能再完善一点就更好了。。。
作者: chali
时间: 2009-4-9 23:04
ding
作者: titanred
时间: 2009-8-2 23:02
不错,路过研究下
作者: ecurb2006
时间: 2009-9-10 05:49
回来看看,呵呵~
作者: ecurb2006
时间: 2009-12-2 04:02
标题: [案例]硬盘数据备份/恢复系统-基于ecGUI



此方案采用DJGPP编译,生产DOS 32位程序,突破DOS 16位程序的内存限制,最大支持4GB内存。
引入了新控件:STARTMENU ,即开始菜单形式控件~
并且使用了eCGUI提供的 文件选择对话窗口~开发更加便利,对用户更加友好~
作者: ecurb2006
时间: 2010-3-21 13:41
标题: eCGUI新版-窗口移动支持
在eCGUI新版中,我们加入了对 窗口移动支持,可以通过鼠标点击标题栏,来实现拖动。移动区域显示为虚框,与Windows类似。
Last edited by ecurb2006 on 2010-3-21 at 13:43 ]
作者: f371575950
时间: 2016-12-25 00:42
记号