首页 > 期刊发表知识库 > 简单文本编辑器的设计与实现

简单文本编辑器的设计与实现

发布时间:

简单文本编辑器的设计与实现

直接用MFC自动生成实现吧,不过要改一个基类,是改成CEDIT

#include #include "h"static char g_szClassName[] = "MyWindowClass";static HINSTANCE g_hInst = NULL;#define IDC_MAIN_TEXT 1001BOOL LoadFile(HWND hEdit, LPSTR pszFileName){ HANDLE hFile; BOOL bSuccess = FALSE; hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if(dwFileSize != 0xFFFFFFFF) { LPSTR pszFileText; pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1); if(pszFileText != NULL) { DWORD dwRead; if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL)) { pszFileText[dwFileSize] = 0; if(SetWindowText(hEdit, pszFileText)) bSuccess = TRUE; } GlobalFree(pszFileText); } } CloseHandle(hFile); } return bSuccess;}BOOL SaveFile(HWND hEdit, LPSTR pszFileName){ HANDLE hFile; BOOL bSuccess = FALSE; hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwTextLength; dwTextLength = GetWindowTextLength(hEdit); if(dwTextLength > 0) { LPSTR pszText; pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1); if(pszText != NULL) { if(GetWindowText(hEdit, pszText, dwTextLength + 1)) { DWORD dwWritten; if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL)) bSuccess = TRUE; } GlobalFree(pszText); } } CloseHandle(hFile); } return bSuccess;}BOOL DoFileOpenSave(HWND hwnd, BOOL bSave){ OPENFILENAME ofn; char szFileName[MAX_PATH]; ZeroMemory(&ofn, sizeof(ofn)); szFileName[0] = 0; lStructSize = sizeof(ofn); hwndOwner = hwnd; lpstrFilter = "文本文件 (*xt)\0*xt\0所有文件 (**)\0**\0\0"; lpstrFile = szFileName; MaxFile = MAX_PATH; lpstrDefExt = "txt"; if(bSave) { Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; if(GetSaveFileName(&ofn)) { if(!SaveFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName)) { MessageBox(hwnd, "保存文件失败", "错误信息", MB_OK | MB_ICONEXCLAMATION); return FALSE; } } } else { Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if(GetOpenFileName(&ofn)) { if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName)) { MessageBox(hwnd, "打开文件失败", "错误信息", MB_OK | MB_ICONEXCLAMATION); return FALSE; } } } return TRUE;}LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){ switch(Message) { case WM_CREATE: CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_MAIN_TEXT, g_hInst, NULL); SendDlgItemMessage(hwnd, IDC_MAIN_TEXT, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0)); break; case WM_SIZE: if(wParam != SIZE_MINIMIZED) MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); break; case WM_SETFOCUS: SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT)); break; case WM_COMMAND: switch(LOWORD(wParam)) { case CM_FILE_OPEN: DoFileOpenSave(hwnd, FALSE); break; case CM_FILE_SAVEAS: DoFileOpenSave(hwnd, TRUE); break; case CM_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0); break; case CM_ABOUT: MessageBox (NULL, "一个Windows C 记事本程序" , "关于", 0); } break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0;}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WNDCLASSEX WndClass; HWND hwnd; MSG Msg; g_hInst = hInstance; WndCbSize = sizeof(WNDCLASSEX); WndCstyle = 0; WndClpfnWndProc = WndProc; WndCbClsExtra = 0; WndCbWndExtra = 0; WndChInstance = g_hInst; WndChIcon = LoadIcon(NULL, IDI_APPLICATION); WndChCursor = LoadCursor(NULL, IDC_ARROW); WndChbrBackground = (HBRUSH)(COLOR_WINDOW+1); WndClpszMenuName = "MAINMENU"; WndClpszClassName = g_szClassName; WndChIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&WndClass)) { MessageBox(0, "注册窗口失败", "错误信息", MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL); return 0; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, "一个记事本程序", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, g_hInst, NULL); if(hwnd == NULL) { MessageBox(0, "创建窗口失败", "错误信息", MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while(GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return MwParam;}我只写到这里,可以存,取,

如果是在DOS平台,那10页是不够的。如果是在Win32平台,那可以用RichText控件来完成,那就简单多了。

实现简单的文本编辑器

PNEdit PNEdit 是一个类似于Vi的功能多样、用户可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。图形界面设计简洁方便让编辑窗口设置更加容易,快捷键和命令行操作方式使得文本编辑的速度和效率有所提高,内嵌的多个应用插件扩展了文本编辑功能。Table of Contents简介窗口设置编辑方式快捷命令应用插件版本信息参考资料简介PNEdit是一个功能多样、用户可定制的文本编辑器,支持tab分页和横向/纵向分割窗口等方式可同时对多个文件进行编辑,文本窗口中的颜色、语法、字体和高亮等属性有多种方式可以方便的设置。PNEdit产品概述 PNEdit是一种支持多模式的文本编辑器,在不同编辑模式下操作行为有所不同,在对编辑的文本内容的选择会有多种选择方式,在文本编辑操作时主要依靠大量的快捷键命令操作来实现快速高效的文本编辑功能。PNEdit文本编辑器中集成了目录浏览界面、高级编辑工具、高级搜索工具、编辑状态缓冲、编辑字符缓冲、编辑文件缓冲和编辑内容标记等应用插件以扩展文本编辑功能。 窗口设置在PNEdit中可以支持同时对多个文件进行文本编辑,在编辑窗口中打开的文本内容其颜色、语法、字体和高亮等属性都可以根据不同需求做相应的设置,用户可以在PNEdit工具打开之后在界面中的菜单或按钮打开对应的设置窗口做设置,也可以将需要设置的参数记录在设置文件中。PNEdit界面 1、编辑窗口文本编辑窗口支持多Tab的方式同时打开多个文件进行编辑,在每个Tab窗口还支持横向分割和纵向分割的方式同时打开多个文件进行编辑。文本编辑窗口中可以显示该窗口中打开的文件编辑状态的信息,每个编辑窗口都有保存文件和未保存文件这两个编辑状态。文本编辑窗口下方有一行编辑信息小窗口,在该小窗口中分为三段信息显示,分别为编辑命令显示区间、当前光标所在的行列位置、当前光标所在位置对应占整个文件浏览内容的百分比。2、颜色设置支持类型设置和详细设置两种方式改变所有编辑窗口中的颜色。3、语法设置支持多种语法高亮显示当前编辑窗口中的文本内容。4、字体设置支持类型设置和详细设置两种方式改变所有编辑窗口中的字体。5、高亮设置支持对编辑窗口中的Cursor、Select、Insert、Edit、Search、List和Tag等项的设置。6、设置文件对编辑窗口设置的参数记录可以保存在一个文件中,该文件需命名为”pnrc”,可以放在PNEdit工具启动目录、用户的Home目录和PNEdit工具包安装目录这三个地方,在PNEdit工具启动时自动读取该文件中的参数值,并将其作为工具打开时的初始值设置编辑窗口。 编辑方式PNEdit是一种支持多模式的文本编辑器,在不同编辑模式下操作行为有所不同,在对编辑的文本内容的选择会有多种选择方式,在做具体编辑操作时主要靠大量的快捷键命令操作来实现快速高效的文本编辑功能。1、编辑模式:PNEdit文本编辑器主要支持命令模式、输入模式和替换模式这3种不同的文本编辑方式。 命令模式,在该模式下文本编辑窗口的可输入编辑状态是关闭的,对文本内容进行编辑时可以通过鼠标键、单个快捷键、多个快捷键组合和命令行输入编辑命令这4种方式进行快捷的文件内容编辑操作。输入模式,在该模式下文本编辑窗口的可输入编辑状态是打开的,对文本内容进行编辑时可以通过字符直接输入、鼠标键、单个快捷键、多个快捷键组合和命令行输入编辑命令这5种方式进行快捷的文件内容编辑操作。替换模式,在该模式下文本编辑窗口的可输入编辑状态是关闭的,对文本内容进行编辑时可以通过快捷键”r”和快捷键”R”这2种编辑内容替换操作方式,分别对应替换光标所在字符和替换光标至行尾所有字符(碰到键则退出替换模式)。2、文本选择:PNEdit文本编辑器主要支持光标选择、字选择、行选择、段选择、全部选择和列选择这6种不同的文本内容选择模式。光标选择模式,在对文本内容进行选择时先通过鼠标左键点击一个位置(即为选择内容的起始点),然后鼠标左键按住不动移动至下一个位置(即为选择内容的结束点),释放鼠标左键则会高亮从起始点到结束点的文本内容,表示该部分内容已被选中。字选择模式,在对文本内容进行选择时用鼠标左键双击一个位置,释放鼠标左键则会高亮落在该位置上的字内容,表示该字内容已被选中。行选择模式,在对文本内容进行选择时用鼠标左键三击一个位置,释放鼠标左键则会高亮落在该位置上的行内容,表示该行内容已被选中。段选择模式,点击Edit菜单中的”Select”项下的”Paragraph”子项或文本编辑窗口中的弹出式菜单中的”Select Paragraph”项,则会高亮落在当前光标所在位置上的段内容,表示该段内容已被选中。全部选择模式,点击Edit菜单中的”Select”项下的”All”子项或文本编辑窗口中的弹出式菜单中的”Select All”项,则会高亮当前打开文件编辑窗口中的全部内容,表示该文本内容已被选中。列选择模式,在进入列模式之后移动光标位置,在移动过程中即会实时高亮列选择的内容。列模式下选中的是一个块内容,块的起始和结束都有行和列两个坐标,分别对应进入列模式时光标所在位置的行列值和光标移动之后光标所在位置的行列值,落在这两个点内的块内容即为被选中的内容。3、快捷命令:PNEdit文本编辑快捷命令有编辑选择、编辑输入、编辑更换、剪切复制粘贴、编辑参数、文件操作、光标移动、文本替换和列模式编辑这9种类型的快捷键命令。 快捷命令1、编辑选择:在文本编辑时可以使用快捷键对文本内容做选择。2、编辑输入:在文本编辑时可以使用快捷键将编辑窗口的可输入状态打开,将文本编辑窗口切换到输入模式。在输入模式下,键入的任何字符都被视为文本并添加到文件中。按Esc键退出输入模式。通过这些插入/替换命令可以撤消。当'autoindent'打开时,表示当前行的缩进将自动复制并应用于新行。3、编辑更换:在文本编辑时可以使用快捷键对文本内容做出更换,通过这些命令插入/替换可以撤消。当'autoindent'打开时,当前行的缩进将被复制和应用自动转到新行。4、剪切复制粘贴:在文本编辑时可以使用快捷键对文本内容做剪切、复制和粘贴等操作。5、编辑参数:在文本编辑时可以使用命令设置文本内容编辑时的一些常用参数。6、文件操作:在文本编辑时可以使用输入命令在文本编辑窗口中直接打开文件,以及在编辑的内容中选择文件打开,这里可以设置相对路径搜索文件。7、光标移到:在文本编辑时可以使用快捷键在打开的文本内容中做光标和窗口的跳转。8、文本替换:在文本编辑时可以使用快捷键对文本内容做替换,搜索并替换整个文件或部分文件,[range]在这里可以是以下几种方式:1、: 当前行;2、n: 第n行;3、 +n: 当前行加n行;4、 $: 最后一行;5、 m,n: 从第m行到第n行;6、'<,'>: 选中的文本;在列模式下,搜索和替换只应用于所选的列内容。没有使用[range]的其替换仅在当前行和'一样。9、列模式编辑:在文本编辑时可以使用快捷键对文本列的内容做编辑操作,其操作方式是垂直执行的,执行的命令也是可以撤消的。 应用插件PNEdit编辑器中还集成了目录浏览界面、高级编辑工具、高级搜索工具、编辑状态缓冲、编辑字符缓冲、编辑文件缓冲和编辑内容标记这7个应用插件。1、目录浏览界面当在编辑窗口中打开一个文件夹时即自动打开目录列表,显示当前层次的文件和文件夹,通过快捷键快速的浏览所有层次的目录结构,从目录列表中找出所要编辑的文件在窗口中打开。2、高级编辑工具可以使用All/Current-Line/Smart自动获取或直接输入需要编辑的位置,其支持在行或列模式的编辑,在行模式和列模式都支持剪切/复制/连接/粘贴等操作,插入/更改操作仅限于列模式。3、高级搜索工具可以使用All/Current-Line/Smart自动获取或直接输入需要搜索和替换的位置,其支持在行或列模式下的搜索和替换,支持普通和正则表达式两种pattern方式。4、编辑状态缓冲对于每个正在编辑的窗口都会创建一个独立的编辑状态缓冲区用于记录在该窗口中所做的每个编辑操作,可以使用该缓冲区对正在编辑的状态做撤销、重做、跳转和清除等操作。5、编辑字符缓冲所有编辑窗口共用同一块编辑字符缓冲区,其包含1个通用字符串缓冲区、10个剪贴板字符串缓冲区和26个有名字符串缓冲区,存储在每个字符串缓冲区中的内容都可以查看和修改。6、编辑文件缓冲编辑窗口中打开编辑过的文件都会创建一个副本被保存在编辑文件缓冲区中,这些存储的副本文件可以用来作为编辑文件的备份被重新打开。7、编辑内容标记对于正在编辑的文本可以选择特定行内容做标记将其高亮显示,被标记的条目被记录在列表中可以方便的浏览定位到标记的位置。 版本信息PNEdit_12PNEdit_03参考资料· 上海弗摩电子科技有限公司 .爱企查.2018-12-18[引用日期2021-07-16]

北京科技大学的吧。。。

文本编辑器的设计与实现

main不能使用在内部类中classVehicle{privateStringname;privateintamount;privateintmaxspeed;publicStringgetName(){returnname;}publicintgetAmount(){returnamount;}publicintgetMaxspeed(){returnmaxspeed;}publicvoidsetName(StringstuName){name=stuName;}publicvoidsetAmount(intstuAmount){amount=stuAmount;}publicvoidsetMaxspeed(intstuMaxspeed){maxspeed=stuMaxspeed;}publicVehicle(StringstuName,intstuAmount,intstuMaxspeed){setName(stuName);setAmount(stuAmount);setMaxspeed(stuMaxspeed);}}publicclassVehicleTest{publicstaticvoidmain(Stringargs[]){Vehiclecar=newVehicle("bus",18,120);Vehiclesteamboat=newVehicle("boat",19,110);Vehicleaeroplane=newVehicle("airliner",8,300);Sprintln("姓名"+"\t"+"数量"+"\t"+"最大速度");Sprintln(Name()+"\t"+Amount()+"\t"+Maxspeed());Sprintln(Name()+"\t"+Amount()+"\t"+Maxspeed());Sprintln(Name()+"\t"+Amount()+"\t"+Maxspeed());}}

lz,0分的悬赏,动力太小了

自己做作业!

classVehicleTest包含静态的main方法,静态方法需要在主线程类,你这里主线程类是classVehicle,VehicleTest被写成了一个内部类(Vehicle的{}里面)。可以把两个类改成并行的,可以写成2个源文件,可以把VehicleTest去掉,保留main方法,使他作为Vehicle的静态main方法。

简单文本编辑器的设计与实现的算法性能分析

你自已开发可费事了,有现成的。

一个简单的文本编辑器。(是在DEV C++下写的)//头文件//h#define CM_FILE_SAVEAS 9072#define CM_FILE_EXIT 9071#define CM_FILE_OPEN 9070#define CM_ABOUT 9069//主程序文件///*****************************************************/#include #pragma hdrstop#include "Mh"static char g_szClassName[] = "MyWindowClass";static HINSTANCE g_hInst = NULL;#define IDC_MAIN_TEXT 1001BOOL LoadFile(HWND hEdit, LPSTR pszFileName){ HANDLE hFile; BOOL bSuccess = FALSE; hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if(dwFileSize != 0xFFFFFFFF) { LPSTR pszFileText; pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1); if(pszFileText != NULL) { DWORD dwRead; if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL)) { pszFileText[dwFileSize] = 0; // Null terminator if(SetWindowText(hEdit, pszFileText)) bSuccess = TRUE; // It worked! } GlobalFree(pszFileText); } } CloseHandle(hFile); } return bSuccess;}BOOL SaveFile(HWND hEdit, LPSTR pszFileName){ HANDLE hFile; BOOL bSuccess = FALSE; hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwTextLength; dwTextLength = GetWindowTextLength(hEdit); if(dwTextLength > 0)// No need to bother if there's no { LPSTR pszText; pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1); if(pszText != NULL) { if(GetWindowText(hEdit, pszText, dwTextLength + 1)) { DWORD dwWritten; if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL)) bSuccess = TRUE; } GlobalFree(pszText); } } CloseHandle(hFile); } return bSuccess;}BOOL DoFileOpenSave(HWND hwnd, BOOL bSave){ OPENFILENAME ofn; char szFileName[MAX_PATH]; ZeroMemory(&ofn, sizeof(ofn)); szFileName[0] = 0; lStructSize = sizeof(ofn); hwndOwner = hwnd; lpstrFilter = "Text Files (*xt)\0*xt\0All Files (**)\0**\0\0"; lpstrFile = szFileName; MaxFile = MAX_PATH; lpstrDefExt = "txt"; if(bSave) { Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; if(GetSaveFileName(&ofn)) { if(!SaveFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName)) { MessageBox(hwnd, "Save file ", "Error", MB_OK | MB_ICONEXCLAMATION); return FALSE; } } } else { Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if(GetOpenFileName(&ofn)) { if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName)) { MessageBox(hwnd, "Load of file ", "Error", MB_OK | MB_ICONEXCLAMATION); return FALSE; } } } return TRUE;}LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){ switch(Message) { case WM_CREATE: CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_MAIN_TEXT, g_hInst, NULL); SendDlgItemMessage(hwnd, IDC_MAIN_TEXT, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0)); break; case WM_SIZE: if(wParam != SIZE_MINIMIZED) MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); break; case WM_SETFOCUS: SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT)); break; case WM_COMMAND: switch(LOWORD(wParam)) { case CM_FILE_OPEN: DoFileOpenSave(hwnd, FALSE); break; case CM_FILE_SAVEAS: DoFileOpenSave(hwnd, TRUE); break; case CM_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0); break; case CM_ABOUT: MessageBox (NULL, "File Editor for Windows !\n Using the Win32 API" , "A", 0); } break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0;}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WNDCLASSEX WndClass; HWND hwnd; MSG Msg; g_hInst = hInstance; WndCbSize = sizeof(WNDCLASSEX); WndCstyle = 0; WndClpfnWndProc = WndProc; WndCbClsExtra = 0; WndCbWndExtra = 0; WndChInstance = g_hInst; WndChIcon = LoadIcon(NULL, IDI_APPLICATION); WndChCursor = LoadCursor(NULL, IDC_ARROW); WndChbrBackground = (HBRUSH)(COLOR_WINDOW+1); WndClpszMenuName = "MAINMENU"; WndClpszClassName = g_szClassName; WndChIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&WndClass)) { MessageBox(0, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL); return 0; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, "A File Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 320, 240, NULL, NULL, g_hInst, NULL); if(hwnd == NULL) { MessageBox(0, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while(GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return MwParam;}

这个已经有很多完善的api在以jquery为库的api中有很多例子,如markitup,可以实现文本编辑器的所有功能,并且是轻量级有丰富易用的api,可自行扩展

文本编辑器的设计与实现java

1 可以用列表 将程序中的函数列出-----这个好做,JList,JTable,JLabel等都可以。2 点击列表项 可以还原到程序的相关行----什么意思?1 新建函数时 可以弹出对话框 用以输入函数名和函数体-----这也好做,前者用JTextfield,后者就看你是函数意义了。2 并在程序中自动生成代码----什么代码?好像和2同,意义不清。你这里的函数的概念是什么?都包括什么符号?多变量?微积分?泛涵?总要有各定域才好。你的应用对象是中学生?大学生?还是财会人员?要对这里的函数有个明确表示,不然输入函数体的时候会有很多 exception的。当然如果是编程的函数的概念就好办了。只需要动态编译所输入的代码,看能否过就好。但话又说回来,面向对象的编程,就java来说重载,复用,还有继承,抽象,这个涵数和其他的关系如何考虑啊?能说说问题的出处?目的?需求?。。。。。。谢谢。

import *;import *;import *;import *;import *; //Date neededimport PrintWriter;public class NotePad extends JFrame{ JTextArea jta; class newl implements ActionListener { public void actionPerformed(ActionEvent e) { setText(""); } } class openl implements ActionListener { public void actionPerformed(ActionEvent e) { JFileChooser jf=new JFileChooser(); showOpenDialog(NotePhis); } } //保存文件的监听 class savel implements ActionListener { public void actionPerformed(ActionEvent e) { JFileChooser jf = new JFileChooser(); showSaveDialog(NotePhis); } } //打印的监听 ? class printl implements ActionListener { public void actionPerformed(ActionEvent e) { // PrintWriter p = new PrintWriter(NotePhis); } } //退出记事本的监听 class exitl implements ActionListener { public void actionPerformed(ActionEvent e) { Sxit(0);//退出 } } //拷贝的监听 class copyl implements ActionListener { public void actionPerformed(ActionEvent e) { py(); } } //粘贴的监听 class pastel implements ActionListener { public void actionPerformed(ActionEvent e) { paste(); } } //剪切的监听 class cutl implements ActionListener { public void actionPerformed(ActionEvent e) { ut(); } } //查找的监听 //添加日期的监听 class datel implements ActionListener { public void actionPerformed(ActionEvent e) { Date d=new Date(); append(String()); } }//构造函数 public NotePad() { jta=new JTextArea("",24,40); JScrollPane jsp=new JScrollPane(jta); JMenuBar jmb=new JMenuBar(); JMenu mFile=new JMenu("File"); JMenu mEdit=new JMenu("Edit"); JMenuItem mNew=new JMenuItem("New",KeyEVK_N); mNaddActionListener(new newl()); mFadd(mNew); JMenuItem mOpen=new JMenuItem("Open",KeyEVK_O); mOaddActionListener(new openl()); mFadd(mOpen); JMenuItem mSave=new JMenuItem("Save"); mSaddActionListener(new savel()); mFadd(mSave); mFaddSeparator(); //添加分割线 JMenuItem mPrint = new JMenuItem("Print"); mPaddActionListener(new printl()); mFadd(mPrint); mFaddSeparator(); //添加分割线 JMenuItem mExit=new JMenuItem("Exit"); mEaddActionListener(new exitl()); mFadd(mExit); mFsetMnemonic(KeyEVK_F); //编辑菜单的子菜单的处理 JMenuItem jmi; jmi=new JMenuItem("Copy"); addActionListener(new copyl()); mEadd(jmi); jmi=new JMenuItem("Cut"); addActionListener(new cutl()); mEadd(jmi); jmi=new JMenuItem("Paste"); addActionListener(new pastel()); mEadd(jmi); mEaddSeparator(); //添加分割线 jmi=new JMenuItem("Find"); mEadd(jmi); jmi=new JMenuItem("FindNext"); mEadd(jmi); mEaddSeparator(); jmi=new JMenuItem("Select All"); mEadd(jmi); jmi=new JMenuItem("Date/Time"); addActionListener(new datel()); mEadd(jmi); add(mFile); add(mEdit); setJMenuBar(jmb); ContentPane()add(jsp); setSize(200,200); setVisible(true); } //主函数,程序入口点 public static void main(String s[]) { new NotePad(); } }

我这里有一个jar可以用,想看源代码的话你可以反编译。留一个邮箱,我给你发过去。

JDK自带一个简单的Notepad,你可以研究一下他的源代码。在%JAVA_HOME%\demo\jfc\Notepad 目录下JDK自带一个稍复杂的Stylepad,你可以研究一下他的源代码。在%JAVA_HOME%\demo\jfc\Stylepad目录下

  • 索引序列
  • 简单文本编辑器的设计与实现
  • 实现简单的文本编辑器
  • 文本编辑器的设计与实现
  • 简单文本编辑器的设计与实现的算法性能分析
  • 文本编辑器的设计与实现java
  • 返回顶部