eCGUI下载中心:http://www.ecgui.com/html/ecgui/35.html
[ Last edited by ecurb2006 on 2008-10-25 at 23:32 ]
[ Last edited by ecurb2006 on 2008-10-25 at 23:32 ]
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
精华I
查看 41,843 回复 111
/*
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 **************** */




/* ------------- 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;
}
/* ********** 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;
}
