📄 xedit.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 + -