打算支持更有用的功能,如 Unicode 编码支持!
ps:任务拦切换也很方便哦
ps:任务拦切换也很方便哦
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
精华I
查看 41,572 回复 111
/*
微型嵌入式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;
}
/*
微型嵌入式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;
}