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

📄 xedit.c

📁 这是一个支持"微型嵌入式 GUI" 的 SDK For Linux 版,其 GUI 核心可于 Linux, DOS 16/32 Bit, uC/OS-II及Windows 等平台工作,支持常用
💻 C
字号:
/*
X-Editor 0.0.1 www.ecurb2006.com
*/
#include "gui.h"

#define NEW_BUTTON 1
#define OPEN_BUTTON 2
#define SAVE_BUTTON 3


#define GP_SAVE_NAME 1
#define GP_SAVE_FILE 2
#define GP_SAVE_NO   3

#define GP_OPEN_NAME 4
#define GP_OPEN_FILE 5

typedef struct _MyWin
{
HAND NewButton;
HAND OpenButton;
HAND SaveButton;
HAND EditBox;
char change;
char file[256];
char status;
}MyWin,*PMyWin;

/* ********************* */
USER_PRO Dialog_New(HAND hd,MESSAGE msg);
USER_PRO Dialog_GetFileName(HAND hd,MESSAGE msg);
void edit_newfile(HAND EditBox);
/* ********************* */
USER_PRO MainWin(HAND hd,MESSAGE msg)
{
PMyWin pMyWin;
if(msg.type == GM_SYSTEM)
	switch(msg.message)
	{
	case GM_Create:
        pMyWin=(PMyWin)Gmalloc(sizeof(MyWin),"");
		pMyWin->EditBox=CreateObject(hd,EDITBOX,1,1,"",5,70,630,440,0,0);
		pMyWin->NewButton=CreateObject(hd,BUTTON,NEW_BUTTON,3,"New",5,25,45,65,0,0);
     	pMyWin->OpenButton=CreateObject(hd,BUTTON,OPEN_BUTTON,3,"Open",50,25,95,65,0,0);
        pMyWin->SaveButton=CreateObject(hd,BUTTON,SAVE_BUTTON,3,"Save",100,25,140,65,0,0);
		SetObjVar(hd,(HAND)pMyWin);
	return;
	case GM_Destroy:
         {
		HAND var;
		var=GetObjVar(hd);
		Gfree(var,sizeof(MyWin));
		}
	return;
    default:return;
	}
pMyWin=GetObjVar(hd);
if(pMyWin == NULL) return;
if(msg.type == GM_CTRL && GM_TextChange)
	{
	pMyWin->change=True;
	return;
	}
if(msg.type == GM_COMMAND)
  switch(msg.message)
  {
  case OPEN_BUTTON:
       pMyWin->status=1;
  /* !!!  Not stop and go on run !!! */
  
  case NEW_BUTTON:
       if(pMyWin->change == True)
	  {
	  efDialogWin->Start(hd,1,1,"X-Editor",100,100,360,200,Dialog_New,0);
	  return;
	  }
       else if(pMyWin->status ==1)
	  {
		   efDialogWin->Start(hd,2,1,"Open File",100,100,360,200,Dialog_GetFileName,0);
	  return;
	  }
	  if(*pMyWin->file!=0)
	  {
		  memset(pMyWin->file,0,256);
          edit_newfile(pMyWin->EditBox);
	  }
       return; 
  case SAVE_BUTTON:
	 
	   if(*pMyWin->file!=0)
	   {
	   efEditBox->SaveFile(pMyWin->EditBox,pMyWin->file);
	   pMyWin->change=False;
	   return;
	   }
	   pMyWin->status=3;
      efDialogWin->Start(hd,1,1,"X-Editor",100,100,360,200,Dialog_GetFileName,0);
	  
       return;
  default:return;
  } 
if(msg.type == GM_POST)
  switch(msg.message)
  {
  case GP_SAVE_NAME:
     efDialogWin->Start(hd,1,1,"X-Editor",100,100,360,200,Dialog_GetFileName,0);
     return;
  case GP_SAVE_NO:
     if(pMyWin->status == 0)
	  {
	  edit_newfile(pMyWin->EditBox);
	  pMyWin->change =False;
	  }
     else 		  
         efDialogWin->Start(hd,2,1,"Open File",100,100,360,200,Dialog_GetFileName,0);
     return;
  case GP_SAVE_FILE:
        memcpy(pMyWin->file,(char*)msg.icode,(int)msg.jcode);	
		Gfree((HAND)msg.icode,(int)msg.jcode);
		efEditBox->SaveFile(pMyWin->EditBox,pMyWin->file);
		pMyWin->change=False;
		if(pMyWin->status == 0)
        edit_newfile(pMyWin->EditBox);
        else if(pMyWin->status==1)
		  {
          efDialogWin->Start(hd,2,1,"Open File",100,100,360,200,Dialog_GetFileName,0);
	      }
        if(pMyWin->status==3) pMyWin->status=0;
        return;
 case GP_OPEN_FILE:
        memcpy(pMyWin->file,(char*)msg.icode,(int)msg.jcode);	
		Gfree((HAND)msg.icode,(int)msg.jcode);
		efEditBox->LoadFile(pMyWin->EditBox,pMyWin->file);
		pMyWin->change=False;
		pMyWin->status=0;
	 return;
  default:return;
  }
}

int gmain(void*data)
{
CreateObject(0,MAINWINDOW,1,1,"X-Editor 0.0.1 www.ecurb2006.com",0,0,640,480,MainWin,data);
return 0;
}

USER_PRO Dialog_New(HAND hd,MESSAGE msg)
{
HAND host;
PMyWin pMyWin;

host=GetObjHost(hd);
pMyWin=GetObjVar(host);
if(pMyWin == NULL) return;

if(msg.type == GM_SYSTEM)
	switch(msg.message)
	{
	case GM_Create:   
		CreateObject(hd,BUTTON,1,1,"Yes",20,60,90,85,0,0);
	    CreateObject(hd,BUTTON,2,1,"No", 95,60,165,85,0,0);
	    CreateObject(hd,BUTTON,3,1,"Cannel",170,60,240,85,0,0);
		return ;
    case GM_Draw:
		{
		HDC hdc;
		hdc=efGDI->Start(hd);
		efGDI->SetColor(hdc,COLOR_BLACK);
        efGDI->DrawText(hdc,30,30,"Save file ?");
		efGDI->End(hd,hdc);
		}
		return ;
	default:return ;
	}
if(pMyWin == NULL) return;
if(msg.type == GM_COMMAND)
  switch(msg.message)
  {
  case 1:
       if(*pMyWin->file == 0)
       SendMessage(GetObjHost(hd),GM_POST,GP_SAVE_NAME,0,0,0);
       else SendMessage(GetObjHost(hd),GM_POST,GP_SAVE_FILE,0,0,0);
       efDialogWin->Quit(hd);
       return;
  case 2:
       SendMessage(GetObjHost(hd),GM_POST,GP_SAVE_NO,0,0,0);
       efDialogWin->Quit(hd);
       return;
  case 3:efDialogWin->Quit(hd);
       return;
  default:return;
  }
}

USER_PRO Dialog_GetFileName(HAND hd,MESSAGE msg)
{
HAND TextBox;
if(msg.type == GM_SYSTEM)
	switch(msg.message)
	{
	case GM_Draw:
        {
		HDC hdc;
		hdc=efGDI->Start(hd);
		efGDI->SetColor(hdc,COLOR_BLACK);
        efGDI->DrawText(hdc,5,30,"File:");
		efGDI->End(hd,hdc);
		}
		return;
	case GM_Create:
		TextBox=CreateObject(hd,TEXTBOX,1,1,"",60,30,240,50,0,0);
	    SetObjVar(hd,TextBox);
	    CreateObject(hd,BUTTON,2,1,"OK",60,60,130,90,0,0);
		CreateObject(hd,BUTTON,3,1,"Cannel",135,60,205,90,0,0);
		return ;
	case GM_Destroy:
        {
		 
		HAND host;
        PMyWin pMyWin;

        host=GetObjHost(hd);
        pMyWin=GetObjVar(host);
        if(pMyWin->status= 3) 
			pMyWin->status=0;
		}
		return;
	default:return;
	}
TextBox=GetObjVar(hd);
if(msg.type == GM_COMMAND)
	switch(msg.message)
	{
	case 2:
		{
		char *filename;
		int namelong;
		namelong=efTextBox->Long(TextBox);
		namelong++;
		filename=Gmalloc(namelong,"");
		efTextBox->Text(TextBox,filename);	 
		if(GetObjID(hd)==1)
		SendMessage(GetObjHost(hd),GM_POST,GP_SAVE_FILE,(uint32)filename,(uint32)namelong,0);
		if(GetObjID(hd)==2)
        SendMessage(GetObjHost(hd),GM_POST,GP_OPEN_FILE,(uint32)filename,(uint32)namelong,0);
		}
        efDialogWin->Quit(hd);
		return;
	case 3:
		{
		HAND host;
        PMyWin pMyWin;

        host=GetObjHost(hd);
        pMyWin=GetObjVar(host);
        if(pMyWin != NULL) 
			pMyWin->status=0;
		efDialogWin->Quit(hd);
		}
		return;
	default:return;
	}
}

void edit_newfile(HAND EditBox)
{
		FILE *fp;
		fp=fopen("temp","w");
		if(fp==NULL) 
			{
			puts("Can't create file!");
			return ;
			}
		fclose(fp);
        efEditBox->LoadFile(EditBox,"temp");
}

⌨️ 快捷键说明

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