📄 textbox.c
字号:
/*
TextBox - 文本框
www.ecub2006.com
*/
#include "gui.h" /* GUI 的头文件 */
#define BUTTON_Clear 2 /* Clear按钮的ID */
#define BUTTON_Get 3 /* Get按钮的ID */
#define BUTTON_OnOff 4 /* OnOff按钮的ID */
typedef struct _MyData
{
HAND text; /* 保存 TextBox 的句柄 */
char status; /* 定义一个变量来保存文本框的状态 */
}MyData,*PMyData;
void MyWin(HAND hd,MESSAGE msg) /* 窗口的消息处理函数 */
{
PMyData pWin;
if(msg.type == GM_SYSTEM) /* 判断消息类型,消息类型全部为大写 */
switch(msg.message) /* 判断消息 */
{
case GM_Create:/* 对象被创建后产生该消息,一般情况下,收到该消息时,
对象还没有显示。可以在这里进行一些初始化工作。
如果是窗口的GM_Create消息,可以创建新的对象,如 BUTTON 等 */
{
pWin=(PMyData)Gmalloc(sizeof(MyData),"");/* 分配内存 */
SetObjVar(hd,(HAND)pWin);/* 设置 对象的附加数据指针 */
pWin->text=CreatObject(hd,TEXTBOX,1,1,"Text",10,90,260,110,0,0); /* 创建新的按钮对象 */
/* CreateObject 函数原型如下
HAND GUIAPI CreatObject( - 函数返回新创建的对象句柄
HAND pHOST, - 父对象句柄
int16 guiclass, - 要创建的对象类型
int16 id, - 对象的 ID
int16 style, - 对象的风格
char *szTitle, - 对象的Title 标题
int16 left,int16 top,int16 right,int16 bottom, - 对象的坐标
void (*Server)(HAND,MESSAGE),void *pData); -对象的消息处理函数,附加数据指针
*/
CreatObject(hd,BUTTON,BUTTON_Clear,1,"Clear",10,120,120,140,0,0); /* 创建新的按钮对象 */
CreatObject(hd,BUTTON,BUTTON_Get,1,"Get",130,120,260,140,0,0); /* 创建新的按钮对象 */
CreateObject(hd,BUTTON,BUTTON_OnOff,1,"On/Off",10,160,120,180,0,0);/* 创建新的按钮对象 */
efTextBox->SetTextColor(pWin->text,COLOR_GREEN);/* 设定文本框字体的颜色 */
efTextBox->SetBackColor(pWin->text,COLOR_BLACK);/* 设定文本框背景的颜色 */
efTextBox->SetLineColor(pWin->text,COLOR_WHITE);/* 设定文本框边框及光标的颜色 */
}
return;
case GM_Destroy:/* 对象将要被销毁时,产生该消息。 */
{
pWin=GetObjVar(hd);/* 获得 对象的附加数据指针 */
Gfree(pWin,sizeof(MyData));/* 释放在 GM_Create 中分配的内存空间 */
}
/* 窗口中的Button等控件对象,系统会自动销毁 */
return;
case GM_Close:/* 一般情况下,是当用户点击了 窗口的关闭 按钮后 产生该消息 */
QuitWindow(hd); /* 退出窗口 */
return;
default:return;
}
pWin=GetObjVar(hd); /* 任何对象的消息处理函数,收到的第一个消息是 GM_Create,
所以收到其他消息时,pWin句柄已经初始化完成 */
if(!pWin) return; /* 如果得到空句柄,则不再进行后续操作 */
if(msg.type == GM_COMMAND) /* 按钮被按下后产生的消息 */
switch(msg.message) /* message 为按钮的ID */
{
case BUTTON_Clear:
efTextBox->Set(pWin->text,"");/* 设定 文本框内容 为空,即清空文本 */
SetObjFocus(pWin->text);/* 因为按下按钮后,焦点发生转移,这里重新 设定焦点 */
return;
case BUTTON_Get:
{
char *buf;
int buf_long;
buf_long=efTextBox->Long(pWin->text);/* 获得文本长度*/
buf=(char*)Gmalloc(buf_long+1,"");/* 分配内存 */
efTextBox->Text(pWin->text,buf);/* 获得文本框内容,复制到buf*/
efTextBox->Insert(pWin->text,buf);/* 将buf中的内容插入到文本框 光标的位置 */
SetObjFocus(pWin->text);/* 因为按下按钮后,焦点发生转移,这里重新 设定焦点 */
Gfree(buf,buf_long+1);/* 释放内存空间 */
}
return;
case BUTTON_OnOff:
{
SetObjFocus(pWin->text);/* 因为按下按钮后,焦点发生转移,这里重新 设定焦点 */
if(pWin->status)/* 判断 */
{
efTextBox->SetAble(pWin->text,False);/* 使文本框不能编辑*/
pWin->status=False;
return;
}
else
{
efTextBox->SetAble(pWin->text,True);/* 回复正常编辑 */
pWin->status=True;
}
/* 可以使用 pWin->status=efTextBox->Able(pWin->text); 来获得当前的状态 */
}
return;
default:return;
}
}
int gmain(void) /* GUI程序 的入口函数 */
{
/* 创建一个主窗口 */
CreatObject(0,MAINWINDOW,1,1,"TextBox",10,10,400,300,MyWin,0);
return True;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -