Board logo

标题: 100KB的DOS图形界面开发(Borland/DJGPP 库) [打印本页]

作者: ecurb2006     时间: 2007-2-22 14:55    标题: 100KB的DOS图形界面开发(Borland/DJGPP 库)

微型嵌入式GUI - 归来!
正式启用新域名:
www.ecgui.com
欢迎关注!
CGUI微型嵌入式GUI   -QQ群   76249907


eCGUI 新版截图

控件全面支持皮肤功能

eCFileMan文件管理器0.1版-Alpha

eCFileMan目标是成为一个基于eCGUI的图形文件管理器。能够在春DOS下运行,方便DOS下的文件管理操作。
目前还处于测试开发阶段。这里提供代码。目前仅实现了,文件列表显示。
代码分成两个文件:ecfm.c  list.c
代码下载 http://www.ecgui.com/bbs/thread-30-1-1.html


多窗口支持 (内测版)

下载中心: http://www.ecgui.com/html/ecgui/35.html

eCGUI 0.3 for DOS-32bit
http://www.ecgui.com/download/ecgui4dos32.zip
版本特性:DJGPP编译。

========================================================
开发工具 ---------- 解压密码为 ecgui.com
DOS16位 : Borland C/C++  3.1 精简版本
连接:http://www.ecgui.com/download/tools/bc31.zip

DOS 32位 : DJGPP (内含 Allegro 图形库)
连接 : http://www.ecgui.com/download/tools/djgpp.zip

0.4 Beta- 对话窗口嵌套调用,多窗口切换支持

因为这些api接口,可能还要做一些改进。
有兴趣参与测试的朋友,可以发邮件到ecgui.com@gmail.com .可以先发给你。


0.3 版本发布了
更新JPEG图像支持

0.2 版本发布了!
更新了拼音输入法!

实现了DOS应用程序的完全中文(显示,输入编辑)图形界面操作。

eCGUI下载中心
http://www.ecgui.com/bbs/thread-3-1-1.html
http://www.ecgui.com/html/ecgui/35.html

开发论坛:http://www.ecgui.com/bbs



eCGUI下载中心:http://www.ecgui.com/bbs/thread-3-1-1.html


编程指南:http://www.ecgui.com/ecurb2006/embedded-gui-programming-guide.pdf


----------------------------------------------------
微型16/32位嵌入式GUI,自主开发,历时四年左右,拥有全部版权.

体积小巧 大小在 100KB~180KB!
特性: 多窗口支持| 完全中文输入/显示| 多数常用GUI控件| 99.9% ANSI C 编写| 已成功移植 DOS,Linux,uc/OS-II| 组件式 API(易用,高效)
http://www.ecgui.com/bbs/thread-3-1-1.html
微型嵌入式GUI-DJGPP 版本 下载

微型嵌入式GUI-DJGPP+DJGPP编译器组合 版本 下载 (推荐!)
请将gui目录下的 libgui.a 复制到 djgpp 的lib目录(覆盖原来的库!)


画笔 计算器 记事本

http://www.ecgui.com/bbs
Button-按钮例子  
TextBox-单行文本编辑框例子
EditBox-多行文本编辑框例子  
Label-文字标签 Scroll-滚动条例子  
Dialog-对话框窗口例子  
Menu-(下拉,弹出)菜单例子
SpeedBar-进度条例子   
ChoiceBox-单选框例子  
CheckBox-多选框例子
TimeCall-定时器例子   
SelBox-列表框例子  [
ComboBox-组合框例子  
Image-图像显示例子   
MessageBox-消息窗口例子  
http://www.ecgui.com/bbs


eCGUI 支持常用控件有很多如下:

1.   MAINWINDOW主窗口
2.   DLGWINDOW 对话窗口
3.   BUTTON按鈕
4.   MAINMENU下拉式菜单
5.   POPMENU彈出式菜单
6.   HSCROLLBAR橫向滚动条
7.   VSCROLLBAR豎向滚动条
8.   TEXTBOX单行文本编辑框
9.   EDITBOX多行文本编辑框
10. COMBOBOX組合框
11. LISTBOX列表框
12. CHECKBOX多項选择框
13. CHOICEBOX单项选择框
14. LABEL文字标签
15. PAGEVIEW 标签页
16. SPEEDBAR 进度条
17. MessageBox 消息窗口,Win32兼容

   商业使用,将提供 GUI 全部源代码,低价授权策略,并提供 GUI 移植技术支持!
请联系 ecgui.com@gmail.com
[案例]硬盘数据备份/恢复系统-基于ecGUI





此方案采用DJGPP编译,生产DOS 32位程序,突破DOS 16位程序的内存限制,最大支持4GB内存。
引入了新控件:STARTMENU ,即开始菜单形式控件~
并且使用了eCGUI提供的 文件选择对话窗口~开发更加便利,对用户更加友好~


   针对 不少网友开发免费 DOS 软件的想法,现在提供 DOS 下的开发库,个人或者组织可以开发公共使用的免费软件,借这个机会,也希望能更好的推广这个 GUI.

更多信息请访问 http://www.ecgui.com
或者发邮件 ecgui.com@gmail.com

eCGUI下载中心http://www.ecgui.com/html/ecgui/35.html
开发论坛http://www.ecgui.com/bbs

[ Last edited by ecurb2006 on 2009-12-2 at 04:07 ]
作者: 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


  Quote:
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

遇到使用的问题,可以和我联系 MSN:ecurb2006@hotmail.com
我利用时间尽可能提供帮助
也可以 关注 www.ecurb2006.com
作者: ecurb2006     时间: 2007-3-13 11:13    标题: 已修正一些 bugs

已有新的开发计划!
请关注 http://www.ecurb2006.com
作者: 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
试过了,并比较了一下以下的GUI开发库

1.实时微内核:最新图形模式多窗口演示
http://www.cn-dos.net/forum/viewthread.php?tid=16538&fpage=1

2.DOS的界面开发终结者  
http://www.cn-dos.net/forum/viewthread.php?tid=14489&fpage=1

其中1.运行效果不好,而且不稳定,2.的功能确实很强大,但同时体积也太大
还是老兄的DOS GUI开发(Borland库)功能也不错,体积也很小,而且UI也是
三个当中最好的,支持!!

不过程序显示区域头部显示 GUI 的介绍性信息,不太好,而且影响用用户的程
式美观,建议还是去掉为好.... 再说,这对推广的作用也不大。关键是好用,大家
自然会都去用。。用的好的也会帮你推广!
作者: ecurb2006     时间: 2007-5-1 02:12    标题: 皮肤界面的初步支持!

GUI皮肤界面的尝试!
连接 http://www.ecurb2006.com/blog/post/36.html

Blog: http://www.ecurb2006.com/

谢谢楼上!会考虑去掉头部显示的.
作者: 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: [url]www.ecurb2006.com[/url]

演示如何创建对象,使用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 编程指南([url]http://www.ecurb2006.com)[/url]
*/

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[257];
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[i]);/* 添加菜单子项 */
   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的开发库。

请去 http://www.ecurb2006.com  下载!


会不断更新!
作者: 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)源代码及设计文档

DOS图形记事本,名称为 X-Editor 目前版本为 0.0.1 .

基于微型嵌入式GUI(http://www.ecurb2006.com).

运行截图




目前可以实现简体中文(GB2312),英文的编辑.尚不具备输入法.将在下个版本中提供.

记事本源代码,可执行文件,设计文档 打包

下载: xedit.zip
http://www.ecurb2006.com/blog/upload/xedit.zip

微型嵌入式GUI-green-DOS 16bit 版本  



下载: 
本地下载1 
http://www.ecurb2006.com/blog/upload/sdk-green-4dos.zip
本地下载2(含少量例子)
http://www.ecurb2006.com/blog/upload/sdk-green-4dos2.zip

也可以下载 微型嵌入式GUI-DOS开发包-编译器-例子代码-组合 .
http://www.ecurb2006.com/blog/post/49.html
作者: 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版本-已经上传

http://www.ecurb2006.com/blog/upload/gui4djgpp.zip

下载连接.
作者: ecurb2006     时间: 2007-8-12 12:57
微型嵌入式GUI-DJGPP+DJGPP编译器组合 版本 下载 (推荐!)
作者: 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



  Quote:
1. DJGPP版本有点慢。。。

图形引擎还有比较慢的算法,继续优化

  Quote:
2. Borland C版本比较快,但开始的那个进度条与广告词不是很喜欢。

恩.kill 掉广告条吧:) 在背景点右键,放个 about 窗口,大家不会反对吧?呵呵

  Quote:
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



  Quote:
呵呵,继续报告BUG。。。。
一、
efTextBox的Set函数有问题,没有把最后一个字符串结尾的#0一起复制到新的CHAR指针中,我不得不用如下作法:
memset(TmpStr,0,4096); //先用#0填充一次。。。
efTextBox->Text(edtWorkGroup,TmpStr);

#这个bug,已经修正了,明天一起发布新的无启动画面的版本吧:)

  Quote:
二、Label控件也能获得输入焦点
从常理说Label控件是不能获得输入焦点的,但这个GUI中是可以的,结果出现如下情况:
建立一个BUTTON,建立一个LABEL,反复按TAB键,发现焦点在BUTTON和LABEL来回切换,但切换到LABEL时LABEL也没有显示一个焦点的方框,结果用户发现输入焦点不见了,容易引起误会。。。。

# OK,修正一下,已经 新增加一个API SetObjFocus(HAND); 可以制定焦点 对象.

  Quote:
三、不算是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


  Quote:
Originally posted by ecurb2006 at 2007-8-13 18:50:
Windows 版本,是了为了 应用开发 ...

呵呵,原来如此啊,那我就下 for DJGPP, for Borland C 16bit就可以了,如果只是为了开发方便,啊,只要是好东西,我不怕麻烦~
作者: happybasic     时间: 2007-8-14 15:50


  Quote:
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版本全面更新!

更新大量例子,有详细注释.

微型嵌入式GUI-DJGPP+DJGPP编译器组合 版本 下载 (推荐!)
作者: ecurb2006     时间: 2007-8-19 04:46
微型嵌入式GUI应用开发例子大全

Button-按钮例子  http://www.ecurb2006.com/blog/post/64.html
TextBox-单行文本编辑框例子 http://www.ecurb2006.com/blog/post/65.html
EditBox-多行文本编辑框例子  http://www.ecurb2006.com/blog/post/66.html
Label-文字标签 Scroll-滚动条例子  http://www.ecurb2006.com/blog/post/67.html
Dialog-对话框窗口例子  http://www.ecurb2006.com/blog/post/68.html
Menu-(下拉,弹出)菜单例子  http://www.ecurb2006.com/blog/post/69.html
SpeedBar-进度条例子  http://www.ecurb2006.com/blog/post/70.html
ChoiceBox-单选框例子  http://www.ecurb2006.com/blog/post/71.html
CheckBox-多选框例子  http://www.ecurb2006.com/blog/post/72.html
TimeCall-定时器例子  http://www.ecurb2006.com/blog/post/73.html
SelBox-列表框例子  http://www.ecurb2006.com/blog/post/74.html
ComboBox-组合框例子  http://www.ecurb2006.com/blog/post/75.html
Image-图像显示例子  http://www.ecurb2006.com/blog/post/76.html
MessageBox-消息窗口例子  http://www.ecurb2006.com/blog/post/77.html

[ Last edited by ecurb2006 on 2007-8-19 at 04:47 AM ]
作者: ecurb2006     时间: 2007-8-19 10:00
微型嵌入式GUI-DJGPP+DJGPP编译器组合 版本 下载 (推荐!)
请将gui目录下的 libgui.a 复制到 djgpp 的lib目录
作者: zqlcch     时间: 2007-8-19 15:40
for dos版的貌似不能下载。。。
作者: ecurb2006     时间: 2007-8-19 18:04    标题: re:zqlcch

直接下栽这个  http://www.ecurb2006.com/download/gui-djgpp.zip
作者: 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


  Quote:
Originally posted by ecurb2006 at 2007-8-19 18:04:
直接下栽这个  http://www.ecurb2006.com/download/gui-djgpp.zip

嗯,不错!DJGPP版速度有大大提高~
作者: ecurb2006     时间: 2007-8-21 17:35


  Quote:
有错误,MSGBOX.C不能通过编译,提示未定义的符号。。。[quote]
[quote]继续报告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库更新!!!!!

为了保证下载到最新的库,请访问
http://www.ecurb2006.com/blog/post/download.html

作者: happybasic     时间: 2007-8-22 12:19


  Quote:
Originally posted by ecurb2006 at 2007-8-22 09:55:
可能又些显卡不兼容这个模式,造成无法显示或者只显示1/4(整个屏幕).

不知道happybasic 的情况是不是这样.

如果是 1/2 就比较奇怪了,鼠标不能移动的地方,有窗口等显示么?

显示是全屏,鼠标不能移的地方,有窗口
作者: ecurb2006     时间: 2007-8-22 20:49    标题: Borland库继续更新!!!!!

256色库和16色库都放进去了,自己选用.

为了保证下载到最新的库,请访问
http://www.ecurb2006.com/blog/post/download.html
作者: ecurb2006     时间: 2007-8-22 20:52


  Quote:
显示是全屏,鼠标不能移的地方,有窗口

比较奇怪了,是运行的例子程序么?所有的例子都这样?
加我 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



  Quote:
经过测试,现在已经很棒了!!

谢谢!

  Quote:
MsgBox函数ecurb2006兄偷懒了,为啥按钮显示的是YESNOONCANCEL而不是中文,当然,这个问题是小事

好的.修改一下.

  Quote:
最后一个:给控件加上热键功能吧,像其他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


  Quote:
继续提:SelBox有BUG,对某个项目双击会使选中的蓝条消失,但实际还是选中的。。。SelBox不支持键盘操作。

OK. i will do it tonight.
作者: ecurb2006     时间: 2007-8-23 12:37    标题: 综合例子1


/*
Example_1 - 对话窗口,按钮,文本编辑框 综合应用
使用自定义数据,SetObjVar,GetObjVar进行对象之间的信息交互
[url]www.ecub2006.com[/url]
*/
#include "gui.h"

typedef struct _MyWinData /* 自定义数据 */
{
char buf[256]; /* 用保存文本框的内容 */
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- 使用对话窗口,需要注意的地方。
[url]http://www.ecurb2006.[/url] 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发布了!!!!

http://www.ecurb2006.com/blog/upload/gui4linux.tar.gz

在Red Hat Linux 9 上测试的,需要Framebuffer支持!
作者: 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
http://download.csdn.net/user/ecurb2006
作者: 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-下载

eCGUI-0.1-Beta-for-DOS-16bit-下载

下载页面:http://www.ecgui.com/html/ecgui/200809/11-30.html

编程指南:http://www.ecgui.com/ecurb2006/embedded-gui-programming-guide.pdf
作者: ecurb2006     时间: 2008-9-12 00:15
上面的链接提供的库,是最新,最稳定的版本。
稍后,将推出带中文拼音输入法的库(在演示程序里有:)
作者: ecurb2006     时间: 2008-9-18 20:07    标题: eCGUI-0.2-Beta-for-DOS-16bit-下载

0.2 版本发布了!

更新了拼音输入法!
实现了DOS应用程序的完全中文(显示,输入编辑)图形界面操作。

eCGUI下载中心:http://www.ecgui.com/html/ecgui/35.html



eCGUI下载中心:http://www.ecgui.com/html/ecgui/35.html

[ Last edited by ecurb2006 on 2008-9-18 at 08:13 PM ]
作者: ecurb2006     时间: 2008-10-25 20:03    标题: 增加JPEG图像支持

eCGUI下载中心:http://www.ecgui.com/html/ecgui/35.html

[ Last edited by ecurb2006 on 2008-10-25 at 23:32 ]
作者: ecurb2006     时间: 2008-10-25 23:31    标题: JPEG图像显示例子


/*
Jpeg - JPG图像显示,及桌面背景的更换
Website:[url]www.ecgui.com[/url]
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德文显示支持!

Unicode德文显示支持!德文比英文拉丁字母多出3个特殊字母. Ää Üü Öö

http://www.ecgui.com/bbs/thread-12-1-1.html

[ Last edited by ecurb2006 on 2008-10-27 at 09:20 ]
作者: ecurb2006     时间: 2008-11-9 11:26
0.4 Beta- 对话窗口嵌套调用,多窗口切换支持

因为这些api接口,可能还要做一些改进。
有兴趣参与测试的朋友,可以发邮件到ecgui.com@gmail.com .可以先发给你。
作者: crazii     时间: 2008-11-11 13:37
我打不开eCGUI的网站.
难道已经仙逝了....
作者: ecurb2006     时间: 2008-11-11 15:46
请从 http://ecurb2006.download.csdn.net/ 下载

尽快修复网站的问题。
作者: ecurb2006     时间: 2008-11-30 10:59
eCGUI 0.3 for DOS-32bit
http://www.ecgui.com/download/ecgui4dos32.zip
版本特性:DJGPP编译。

========================================================
开发工具 ---------- 解压密码为 ecgui.com
DOS16位 : Borland C/C++  3.1 精简版本
连接:http://www.ecgui.com/download/tools/bc31.zip

DOS 32位 : DJGPP (内含 Allegro 图形库)
连接 : http://www.ecgui.com/download/tools/djgpp.zip
作者: 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: [url]www.ecgui.com[/url]
Info: [email]ecgui.com@gmail.com[/email]
-- list.c ---
*/
#include "gui.h"
#include "list.c"


#define ITEM_NUM 6 /* 项目数*/

typedef struct _eCFMData
{
HAND urlbox[2];
}eCFMData,*PeCFMData;



eCFileMan Gecfm_buf;
PeCFileMan Gecfm=&Gecfm_buf;
char buf[256];
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[256];
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    标题: 我想要

我想要一份,可否发我邮箱:zyl20028246@163.com 谢谢了。
作者: ecurb2006     时间: 2009-2-25 21:19
都可以从 网站上下载 呀 www.ecgui.com
作者: 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
记号