⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textbox.c

📁 这是一个支持"微型嵌入式 GUI" 的 SDK For Linux 版,其 GUI 核心可于 Linux, DOS 16/32 Bit, uC/OS-II及Windows 等平台工作,支持常用
💻 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 + -