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

📄 editbox.c

📁 这是一个支持"微型嵌入式 GUI" 的 SDK For Linux 版,其 GUI 核心可于 Linux, DOS 16/32 Bit, uC/OS-II及Windows 等平台工作,支持常用
💻 C
字号:
/*
EditBox - 多行文本编辑框 
www.ecub2006.com
*/
#include "gui.h"
/*
GUI 中内置了内存分配管理模块,作用 malloc,free相同,但功能更强大!
使用 GMemInit 函数,将一个储存空间交给 GUI 内存分配模块管理后,
再使用 Gmalloc,Gfree 函数时,GUI可以检测内存是否正确释放,
当有释放错误时(释放大小不符,空指针释放),或者 内存没有释放(退出窗口时) 会给出 提示窗口。
有助于开发更稳定的应用程序。
*/
char Gmemory[1024*10];/* 10kb储存空间 */

void MyWin(HAND hd,MESSAGE msg) /* 消息处理函数  */
{
HAND editbox; /* 保存编辑框的句柄 */

	if(msg.type == GM_SYSTEM)/* 判断消息类型,消息类型全部为大写  */
	switch(msg.message)/* 判断消息 */
	{
	case GM_Create:/* 对象被创建后产生该消息,一般情况下,收到该消息时,
                对象还没有显示。可以在这里进行一些初始化工作。
				如果是窗口的GM_Create消息,可以创建新的对象,如 BUTTON 等 */
		{
		GMemInit(Gmemory,1024*10); /* 储存空间 托管 */
		editbox=CreateObject(hd,EDITBOX,1,1,"",10,40,210,240,0,0);/* 创建 编辑框 */
		SetObjVar(hd,editbox); /* 将句柄保存到 自定义数据 ,方便访问 */
        CreateObject(hd,BUTTON,1,1,"统计",10,250,110,270,0,0);/* 创建按钮 */
		CreateObject(hd,BUTTON,2,1,"提取第2行",120,250,210,270,0,0);/* 创建按钮 */
		}
		return;
	case GM_Destroy:/* 对象将要被销毁时,产生该消息。 */
      /* 窗口中的Button等控件对象,系统会自动销毁 */
		
		return;
	case GM_Draw:		 
		return;
	default:
		return;
	}

editbox=GetObjVar(hd);

   if(msg.type ==GM_COMMAND)
	switch(msg.message)
	{
	case 1:/* "统计" 按钮 */
		{
		char buf[256];
		memset(buf,0,256);	/* 清0 */    
	    sprintf(buf,"共%d行",(int)efEditBox->LineNum(editbox)); /* 生成制定格式的字符串 */
		MessageBox(0,"统计",buf,0); /* 消息窗口  */
		SetObjFocus(editbox);/* 设定 焦点 对象为编辑框 */
		}
		return;
    case 2:/* "提取第2行" 按钮  */
		{
        char *buf;
		char title[12]={"提取"};
		if(efEditBox->LineNum(editbox)<2) /* 获得编辑框行数 */
			{
			MessageBox(0,"Message","第二行不存在",0);/* 消息窗口  */
			SetObjFocus(editbox);/* 设定 焦点 对象为编辑框 */
			return;
			}
        buf=Gmalloc(efEditBox->LineLong(editbox,2)+1,""); /* 分配内存空间 */
		/* 
		 int16  GUIAPI  (*LineNum)(HAND);
		 - 获得编辑框文本 行数
		 int16  GUIAPI  (*LineLong)(HAND hd,int16 line);
		 - 获得指定行的内容长度,如 efEditBox->LineLong(editbox,1); 为第一行长度 
		 void   GUIAPI  (*LineText)(HAND hd,int16 line,char *buf);
		 - 获得指定行的内容,复制到 buf 指向的内存空间
		*/
		efEditBox->LineText(editbox,2,buf);/* 获得指定行的内容 */
		memset(title+4,0,8);/* 清0 */ 
		sprintf(title+4,"(%d)",efEditBox->LineLong(editbox,2));/* 生成制定格式的字符串 */
		MessageBox(0,title,buf,0);/* 消息窗口  */
		SetObjFocus(editbox);/* 设定 焦点 对象为编辑框 */
		// Gfree(buf,efEditBox->LineLong(editbox,2)); 

        /* 上面这行代码,为释放内存的,没有执行会造成 "内存泄漏" */ 
		 
		}
		return;
	default:
		return;

	}
}

int gmain(void *data)
{
	/* 创建窗口 */
	CreateObject(0,MAINWINDOW,1,1,"EditBox",10,10,630,300,MyWin,0);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -