?? main.c
字號:
/*** $Id: main.c,v 1.22.2.2 2006/06/16 01:02:19 xwyan Exp $**** NoteBook, the M$ Windows like notepad Editor on MiniGUI.** Copyright (C) 2003 ~ 2006 Feynman Software.** Copyright (c) 2000, Feng Da ke (minx@thtfchain.com).**** Some idea and source come from VConGUI (Virture Console GUI) **** Create date: 2000/07/05** BTW: today, my sweetheart lovly MinMin comes back from millitery training.*/ /*** This source is free software; you can redistribute it and/or** modify it under the terms of the GNU General Public** License as published by the Free Software Foundation; either** version 2 of the License, or (at your option) any later version.**** This software is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU** General Public License for more details.**** You should have received a copy of the GNU General Public** License along with this library; if not, write to the Free** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,** MA 02111-1307, USA*//*** Modify records:**** Who When Where For What Status**-----------------------------------------------------------------------------** FrankXM 2000.07.05 CIMS104 Create processing** leon 2000.11.07 BJ.blpt Fix bugs Finished**** TODO:*/#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>#include <minigui/newfiledlg.h>#include <minigui/mgext.h>#include "notebook.h"static void AboutNotebook (HWND hParent){ MessageBox (hParent, "記事簿 -- Version 0.6\n\n" "是一個參考 M$ Windows 的 notepad 制作的文本編輯器, " "在 MiniGUI 下使用. \n\n" "開發這個文本編輯器的最大困難就是要同時排除多行" "編輯控件的故障. 如今還有很多的功能未實現, 請耐心等待后" "續版本, 歡迎提交 BUG 報告: minx@thtfchain.com -- 馮大可.\n\n" "本版本經陳雷 (chenlei@minigui.org), 魏永明 (ymwei@minigui.org) 進一步完善.", "記事簿", MB_OK | MB_ICONEXCLAMATION);};static void AboutLaodan (HWND hParent){ MessageBox (hParent, "老聃 (laodan), 本名李耳, 道家創始人" "著有道德二篇, 清凈無為以治萬物.\n\n" "本系統設計目的是試圖尋找 MiniGUI " "系統的應用前景, 并在制作中尋找方便的開發方法與工具.\n\n" "作者喜愛先秦哲學, 諸子百家之言, 每下工夫制作一新系統, " "必以一子為名. " "故作者在 MiniGUI 上的工作均以老聃 (Laodan) 為代名.", "老聃", 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; mii.typedata = (DWORD)"關于老聃..."; InsertMenuItem(hmnu, 1, 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)"查找下一個 F3"; 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, 0, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_OPEN; mii.typedata = (DWORD)"打開..."; InsertMenuItem(hmnu, 1, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_SAVE; mii.typedata = (DWORD)"保存"; InsertMenuItem(hmnu, 2, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_SAVEAS; mii.typedata = (DWORD)"另存為..."; InsertMenuItem(hmnu, 3, TRUE, &mii); mii.type = MFT_SEPARATOR; mii.state = 0; mii.id = 0; mii.typedata = 0; InsertMenuItem(hmnu, 4, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_PRINT; mii.typedata = (DWORD)"打印"; InsertMenuItem(hmnu, 5, TRUE, &mii); mii.type = MFT_SEPARATOR; mii.state = 0; mii.id = 0; mii.typedata = 0; InsertMenuItem(hmnu, 6, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_EXIT; mii.typedata = (DWORD)"退出"; InsertMenuItem(hmnu, 7, TRUE, &mii); return hmnu;}static HMENU createpmenuedit (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.state = 0; mii.id = IDM_UNDO; mii.typedata = (DWORD)"撤銷"; InsertMenuItem(hmnu, 0, TRUE, &mii); mii.type = MFT_SEPARATOR; mii.state = 0; mii.id = 0; mii.typedata = 0; InsertMenuItem(hmnu, 1, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_CUT; mii.typedata = (DWORD)"剪切"; InsertMenuItem(hmnu, 2, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_COPY; mii.typedata = (DWORD)"復制"; InsertMenuItem(hmnu, 3, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_PASTE; mii.typedata = (DWORD)"粘貼"; InsertMenuItem(hmnu, 4, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_DEL; mii.typedata = (DWORD)"刪除"; InsertMenuItem(hmnu, 5, TRUE, &mii); mii.type = MFT_SEPARATOR; mii.state = 0; mii.id = 0; mii.typedata = 0; InsertMenuItem(hmnu, 6, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_SELALL; mii.typedata = (DWORD)"全選"; InsertMenuItem(hmnu, 7, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_INSDATE; mii.typedata = (DWORD)"插入日期"; InsertMenuItem(hmnu, 8, TRUE, &mii); mii.type = MFT_SEPARATOR; mii.state = 0; mii.id = 0; mii.typedata = 0; InsertMenuItem(hmnu, 9, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_AUTOWRAP; mii.typedata = (DWORD)"自動換行"; InsertMenuItem(hmnu, 10, 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.state = 0; mii.id = IDM_40X15; mii.typedata = (DWORD)"40x15 (small)"; InsertMenuItem(hmnu, 0, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_80X24; mii.typedata = (DWORD)"80x24 (vt100)"; InsertMenuItem(hmnu, 1, TRUE, &mii); mii.type = MFT_STRING; mii.state = MF_CHECKED; mii.id = IDM_80X25; mii.typedata = (DWORD)"80x25 (ibmpc)"; InsertMenuItem(hmnu, 2, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_80X40; mii.typedata = (DWORD)"80x40 (xterm)"; InsertMenuItem(hmnu, 3, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_80X52; mii.typedata = (DWORD)"80x52 (ibmvga)"; InsertMenuItem(hmnu, 4, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_96X25; mii.typedata = (DWORD)"96x25 (wide)"; InsertMenuItem(hmnu, 5, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_96X40; mii.typedata = (DWORD)"96x40 (My favorite)"; InsertMenuItem(hmnu, 6, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_96X52; mii.typedata = (DWORD)"96x52 (large)"; InsertMenuItem(hmnu, 7, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_CUSTOMIZE; mii.typedata = (DWORD)"定制..."; InsertMenuItem(hmnu, 8, TRUE, &mii); mii.type = MFT_SEPARATOR; mii.state = 0; mii.id = 0; mii.typedata = 0; InsertMenuItem(hmnu, 9, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_DEFAULT; mii.typedata = (DWORD)"默認字符集"; InsertMenuItem(hmnu, 10, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_ANSI; mii.typedata = (DWORD)"ANSI"; InsertMenuItem(hmnu, 11, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_GB2312; mii.typedata = (DWORD)"GB2312"; InsertMenuItem(hmnu, 12, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_THAI; mii.typedata = (DWORD)"THAI"; InsertMenuItem(hmnu, 13, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_BIG5; mii.typedata = (DWORD)"BIG5"; InsertMenuItem(hmnu, 14, 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; mii.id = 120; mii.typedata = (DWORD)"視圖"; mii.hsubmenu = createpmenuview (); InsertMenuItem(hmnu, 2, TRUE, &mii); mii.type = MFT_STRING; mii.id = 130; mii.typedata = (DWORD)"搜索"; mii.hsubmenu = createpmenusearch (); InsertMenuItem(hmnu, 3, TRUE, &mii); mii.type = MFT_STRING; mii.id = 140; mii.typedata = (DWORD)"幫助"; mii.hsubmenu = createpmenuabout (); InsertMenuItem(hmnu, 4, TRUE, &mii); return hmnu;}static void SetWindowSize (HWND hWnd, PNOTEINFO pNoteInfo, WPARAM cmd_id){ int col, row; switch (cmd_id) { case IDM_40X15: col = 40; row = 15; break; case IDM_80X24: col = 80; row = 24; break; case IDM_80X25: col = 80; row = 25; break; case IDM_80X40: col = 80; row = 40; break; case IDM_80X52: col = 80; row = 52; break; case IDM_96X25: col = 96; row = 25; break; case IDM_96X40: col = 96; row = 40; break; case IDM_96X52: col = 96; row = 52; break; case IDM_CUSTOMIZE: { char cols [10];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -