|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
|
2008-10-25 20:03 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
『第 92 楼』:
JPEG图像显示例子
使用 LLM 解释/回答一下
/*
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
运行结果

```
/*
Jpeg - JPG image display and desktop background change
Website: www.ecgui.com
E-mail:ecgui.com@ecgui.com
*/
#include "gui.h" /* GUI header file */
void MyJPG(HAND hd,MESSAGE msg)
{
if(msg.type == GM_SYSTEM) /* Determine message type, all message types are in uppercase */
switch(msg.message) /* Determine message */
{
case GM_Draw:
{
HDC hdc;
IMAGE img;/* Image structure */
hdc=efGDI->Start(msg.pHOST);/* Get HDC drawing handle, start drawing */
img.filename="logo.jpg"; /* Image file name */
img.type=IMAGE_TYPE_JPG;/* File type */
img.hdc=hdc;/* Drawing handle */
efImage->Load(&img);/* Preliminary read image information */
efImage->Show(&img,0,0);/* Display image */
efGDI->End(msg.pHOST,hdc); /* Release HDC drawing handle */
}
return;
default:break;
}
}
void imgjpg_init(void); /* Function declaration: register JPEG image function support */
HDC StartDesktopDraw(void); /* Function declaration: get desktop HDC drawing handle, start drawing */
void EndDesktopDraw(HDC); /* Function declaration: release desktop HDC drawing handle */
int gmain(void *data) /* Entry function of GUI program */
{
imgjpg_init();/* *Register JPEG image function support*/
{
HDC hdc;/* HDC drawing handle */
IMAGE img; /* Image structure */
hdc=StartDesktopDraw();/* Get desktop HDC drawing handle, start drawing */
img.filename="alizee.jpg"; /* Image file name */
img.type=IMAGE_TYPE_JPG; /* File type */
img.hdc=hdc; /* Drawing handle */
efImage->Load(&img); /* Preliminary read image information */
efImage->Show(&img,0,0); /* Display image */
EndDesktopDraw(hdc); /* Release desktop HDC drawing handle */
}
/* Create a main window */
CreatObject(0,MAINWINDOW,1,1,"JEPG Picture - Power by eCGUI-www.ecgui.com",5,10,510,570,MyJPG,data);
return True;
}
/* ************** End of file **************** */
;Compile
bcc -mh jpeg.c lib\gui.lib lib\libjpeg.lib
;It is best to compress it with upx.exe again, there is upx.exe in the _up directory of the development package
_up\upx -5 jpeg.exe
Running result

```
|

eCGUI-微型嵌入式GUI/ DOS/Linux/uC/OS-II/等 图形界面开发
www.ecgui.com
|
|
2008-10-25 23:31 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
|
2008-10-27 09:14 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
『第 94 楼』:
使用 LLM 解释/回答一下
0.4 Beta- 对话窗口嵌套调用,多窗口切换支持

因为这些api接口,可能还要做一些改进。
有兴趣参与测试的朋友,可以发邮件到 ecgui.com@gmail.com .可以先发给你。
0.4 Beta - Nested call of dialog windows, support for multi - window switching

Because these API interfaces may still need some improvements.
Friends who are interested in participating in the test can send an email to ecgui.com@gmail.com. Can send it to you first.
|

eCGUI-微型嵌入式GUI/ DOS/Linux/uC/OS-II/等 图形界面开发
www.ecgui.com
|
|
2008-11-9 11:26 |
|
|
crazii
新手上路

积分 16
发帖 8
注册 2008-9-6
状态 离线
|
『第 95 楼』:
使用 LLM 解释/回答一下
我打不开eCGUI的网站.
难道已经仙逝了....
I can't open the eCGUI website. Could it have already passed away....
|
|
2008-11-11 13:37 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
|
2008-11-11 15:46 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
|
2008-11-30 10:59 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
|
2008-12-1 07:17 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
『第 99 楼』:
使用 LLM 解释/回答一下
CGUI微型嵌入式GUI -QQ群 76249907
CGUI micro embedded GUI - QQ Group 76249907
|

eCGUI-微型嵌入式GUI/ DOS/Linux/uC/OS-II/等 图形界面开发
www.ecgui.com
|
|
2008-12-22 15:49 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
『第 100 楼』:
eCFileMan文件管理器0.1版-Alpha
使用 LLM 解释/回答一下
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;
}
The goal of eCFileMan is to become a graphical file manager based on eCGUI. It can run under DOS, facilitating file management operations under DOS.
It is currently in the testing and development phase. The code is provided here. Currently, only the file list display has been implemented.
The code is divided into two files: ecfm.c and 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 /* Number of items */
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;/* Handles */
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); /* Create a selection box object */
#if 0
pm=(PMENU)malloc(sizeof(MENU)*ITEM_NUM*2);
for(i=0;i<12;i++)
{
pm->szTitle="a";
efSelBox->Add(box,pm); /* Add sub-item */
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) /* Entry function of the GUI program */
{
/* Create a main window */
CreatObject(0,MAINWINDOW,1,1,"eCFileMan 0.1 Beta(081213)",0,0,640,480,eCFMWin,data);
return True;
}
|

eCGUI-微型嵌入式GUI/ DOS/Linux/uC/OS-II/等 图形界面开发
www.ecgui.com
|
|
2008-12-24 08:20 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
『第 101 楼』:
使用 LLM 解释/回答一下
/* ********** 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;
}
/* ********** 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;
}
|

eCGUI-微型嵌入式GUI/ DOS/Linux/uC/OS-II/等 图形界面开发
www.ecgui.com
|
|
2008-12-24 08:21 |
|
|
ynlc
新手上路

积分 6
发帖 3
注册 2008-12-15
状态 离线
|
|
2009-2-21 11:30 |
|
|
zyl20028246
新手上路

积分 8
发帖 4
注册 2008-10-30
状态 离线
|
|
2009-2-24 19:20 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
|
2009-2-25 21:19 |
|
|
ecurb2006
中级用户
   www.ecgui.com
积分 272
发帖 123
注册 2006-9-23
状态 离线
|
|
2009-4-4 10:43 |
|
|