📄 notebook.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <popt.h>
#include <unistd.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <minigui/mywindows.h>
#include <minigui/filedlg.h>
#define IDM_NEW 301
#define IDM_OPEN 120
#define IDM_SAVE 130
#define IDM_SAVEAS 140
#define IDM_SET 145
#define IDM_PRINT 150
#define IDM_EXIT 160
#define IDM_COPY 200
#define IDM_PASTE 210
#define IDM_CUT 220
#define IDM_DEL 230
#define IDM_UNDO 240
#define IDM_SELALL 250
#define IDM_INSDATE 260
#define IDM_AUTOWRAP 270
#define IDM_SEARCH 280
#define IDM_SECHNEXT 290
#define IDM_DEFAULT 391
#define IDM_ANSI 392
#define IDM_GB2312 393
#define IDM_BIG5 394
#define IDM_ABOUT 410
#define IDM_ABOUT_THIS 411
#define IDC_MLEDIT 104
#define MAX_NUMBER_ROWS 52
#define MAX_NUMBER_COLS 96
#define VGASTD_NUMBER_ROWS 15
#define VGASTD_NUMBER_COLS 40
#define VGAEXT_NUMBER_ROWS 52
#define VGAEXT_NUMBER_COLS 80
#define MIN_COLS 10
#define MAX_COLS 100
#define MIN_ROWS 10
#define MAX_ROWS 60
typedef struct _NoteInfo
{
BOOL isChanged;
char fileName[NAME_MAX+1]; /*存放文件名*/
char filePath[PATH_MAX+1]; /*存放文件路径*/
char fileFullName[NAME_MAX+PATH_MAX+1]; /*存放文件的路径和名字*/
long fileSize; /*文件长度*/
char* Buffer; /*文件缓冲*/
HWND hMLEditWnd; /*句柄*/
int lx, ty;
int rows, cols;
int winType;
int editCharset;
PLOGFONT log_font;
}NOTEINFO;
typedef NOTEINFO* PNOTEINFO;
void* NoteBook (void* data);
void* NewNoteBook (PNOTEINFO pNoteInfo);
static void AboutNotebook (HWND hParent)
{
MessageBox (hParent, "帮助","张峰",MB_OK | MB_ICONEXCLAMATION);
}
static void AboutLaodan (HWND hParent)
{
MessageBox (hParent, "张峰","张峰",MB_OK | MB_ICONEXCLAMATION);
}
static BOOL MergeFileFullName(PNOTEINFO pNoteInfo)
{
if ((strlen(pNoteInfo->filePath) < 1) || (strlen(pNoteInfo->fileName) < 1))
return FALSE;
if (pNoteInfo->filePath[strlen(pNoteInfo->filePath)-1] != '/')
strcat (pNoteInfo->filePath,"/");
strcpy (pNoteInfo->fileFullName,pNoteInfo->filePath);
strcat (pNoteInfo->fileFullName,pNoteInfo->fileName);
return TRUE;
}
BOOL DivideFileFullName(PNOTEINFO pNoteInfo)
{
char currentpath [PATH_MAX + 1];
char *str;
int temp ,i,j;
temp = strlen(pNoteInfo->fileFullName);
getcwd(currentpath,PATH_MAX);
if (temp <1) return FALSE;
if (pNoteInfo->fileFullName[temp-1]=='/') return FALSE;
if (strchr(pNoteInfo->fileFullName,'/')==NULL)
{
strcpy(pNoteInfo->filePath,currentpath);
strcpy(pNoteInfo->fileName,pNoteInfo->fileFullName);
MergeFileFullName(pNoteInfo);
return TRUE;
}
for (i= temp-1;i>=0;i--)
{
if (pNoteInfo->fileFullName[i]=='/')
break;
}
for (j=0;j<=i;j++)
{
pNoteInfo->filePath[j]=pNoteInfo->fileFullName[j];
}
pNoteInfo->filePath[i+1]=0;
str = (char*)(pNoteInfo->fileFullName + i + 1);
strcpy (pNoteInfo->fileName,str);
return TRUE;
}
static HMENU createpmenuabout (void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"帮助";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_ABOUT_THIS;
mii.typedata = (DWORD)"帮助主题";
InsertMenuItem(hmnu, 0, TRUE, &mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_ABOUT_THIS;
mii.typedata = (DWORD)"关于记事本";
InsertMenuItem(hmnu, 0, TRUE, &mii);
return hmnu;
}
static HMENU createpmenusearch (void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"搜索";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_SEARCH;
mii.typedata = (DWORD)"查找";
InsertMenuItem(hmnu, 0, TRUE, &mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_SECHNEXT;
mii.typedata = (DWORD)"查找下一个";
InsertMenuItem(hmnu, 1, TRUE, &mii);
return hmnu;
}
static HMENU createpmenufile (void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"文件";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_NEW;
mii.typedata = (DWORD)"新建";
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_OPEN;
mii.typedata = (DWORD)"打开";
InsertMenuItem(hmnu, 2, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_SAVE;
mii.typedata = (DWORD)"保存";
InsertMenuItem(hmnu, 3, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_SAVEAS;
mii.typedata = (DWORD)"另存为";
InsertMenuItem(hmnu, 4, TRUE, &mii);
mii.type = MFT_SEPARATOR;
mii.state = 0;
mii.id = 0;
mii.typedata = 0;
InsertMenuItem(hmnu, 5, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_SET;
mii.typedata = (DWORD)"页面设置";
InsertMenuItem(hmnu, 6, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_PRINT;
mii.typedata = (DWORD)"打印";
InsertMenuItem(hmnu, 7, TRUE, &mii);
mii.type = MFT_SEPARATOR;
mii.state = 0;
mii.id = 0;
mii.typedata = 0;
InsertMenuItem(hmnu, 8, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_EXIT;
mii.typedata = (DWORD)"退出";
InsertMenuItem(hmnu, 9, TRUE, &mii);
return hmnu;
}
static HMENU createpmenuedit (void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = 0;
mii.typedata = (DWORD)"编辑";
hmnu = CreatePopupMenu (&mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_UNDO;
mii.typedata = (DWORD)"撤销";
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_SEPARATOR;
mii.state = 0;
mii.id = 0;
mii.typedata = 0;
InsertMenuItem(hmnu, 2, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_CUT;
mii.typedata = (DWORD)"剪切";
InsertMenuItem(hmnu, 3, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_COPY;
mii.typedata = (DWORD)"复制";
InsertMenuItem(hmnu, 4, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_PASTE;
mii.typedata = (DWORD)"粘贴";
InsertMenuItem(hmnu, 5, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_DEL;
mii.typedata = (DWORD)"删除";
InsertMenuItem(hmnu, 6, TRUE, &mii);
mii.type = MFT_SEPARATOR;
mii.state = 0;
mii.id = 0;
mii.typedata = 0;
InsertMenuItem(hmnu, 7, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"查找";
InsertMenuItem(hmnu, 8, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"查找下一个";
InsertMenuItem(hmnu, 9, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"替换";
InsertMenuItem(hmnu, 10, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"转到";
InsertMenuItem(hmnu, 11, TRUE, &mii);
mii.type = MFT_SEPARATOR;
mii.state = 0;
mii.id = 0;
mii.typedata = 0;
InsertMenuItem(hmnu, 12, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_SELALL;
mii.typedata = (DWORD)"全选";
InsertMenuItem(hmnu, 13, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_INSDATE;
mii.typedata = (DWORD)"时间/日期";
InsertMenuItem(hmnu, 14, TRUE, &mii);
return hmnu;
}
static HMENU createpmenuview (void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"格式";
hmnu = CreatePopupMenu (&mii);
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"自动换行";
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"字体";
InsertMenuItem(hmnu, 2, TRUE, &mii);
return hmnu;
}
static HMENU createmenu (void)
{
HMENU hmnu;
MENUITEMINFO mii;
hmnu = CreateMenu();
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 100;
mii.typedata = (DWORD)"文件";
mii.hsubmenu = createpmenufile ();
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 110;
mii.typedata = (DWORD)"编辑";
mii.hsubmenu = createpmenuedit ();
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_STRING;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -