首页

> 期刊发表知识库

首页 期刊发表知识库 问题

简单文本编辑器实验报告

发布时间:

简单文本编辑器实验报告

500

简单文本编辑器实验总结

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

文本编辑器实验报告

学习protel软件的体会  摘 要:介绍了Protel 99 SE的系统结构、主要特色以及在电路设计中的应用,指出了设计中出现的问题,并给出了具体的解决方法。  关键词:Protel 99 SE;电路原理图;印刷电路板;电路设计  2007年8月,在江苏省教育厅统一组织的“四新培训”活动中,我参加了由东南大学举办的“电子线路CAD——protel软件应用”培训。  作为初学者,我通过为期8天的学习,比较全面地了解和掌握了绘制、编辑电路原理图和印制电路图的方法和技巧,并能处理一些常见问题。在对protel软件的学习中,我有不少心得体会,下面我就谈一下我的学习体会。  一、简要介绍Protel软件。Protel是protel公司在80年代末推出的一款功能强大的电路CAD软件,其所设计的电子电路产品范围,涵盖了从小型的电子产品,一直到复杂的电子计算机,是目前国内电子行业使用最广泛的电子电路设计软件。我所学习的Protel 99 SE 是Protel公司推出的最新版本,应用于电路原理图设计、电路板设计等,他基于Windows环境,功能强大,人机界面友好,能让人们在具有最完整的功能环境下,提升设计上的品质和效率。  二、Protel99SE软件的组成。Protel99SE由五大系统构成。  1.原理图设计系统---原理图设计系统是用于原理图设计的Advanced Schematic  系统。这部分包括用于设计原理图的原理图编辑器Sch以及用于修改、生成零件的零件库编辑器SCHLib。  2.印刷电路板设计系统---印刷电路板设计系统是用于电路板设计的 Advanced PCB。这部分包括用于设计电路板的电路板编辑器PCB以及用于修改、生成零件封装的零件封装编辑器PCBLib。  3.信号模拟仿真系统---信号模拟仿真系统是用于原理图上进行信号模拟仿真的SPICE 3f5系统。  4. 可编程逻辑设计系统---可编程逻辑设计系统是基于CUPL的集成于原理图设计系统的PLD设计系统。  5.Protel99SE内置编辑器---这部分包括用于显示、编辑文本的文本编辑器Text和用于显示、编辑电子表格的电子表格编辑器Spread。  三、Protel99SE的主要特色。  1.Protel99SE系统针对Windows NT4/9X作了纯32位代码优化,使得Protel99SE设计系统运行稳定而且高效。   SmartTool(智能工具)技术将所有的设计工具集成在单一的设计环境中;SmartDoc(智能文档)技术将所有的设计数据文件储存在单一的设计数据库中,用设计管理器来统一管理;SmartTeam(智能工作组)技术能让多个设计者通过网络安全地对同一设计进行单独设计,再通过工作组管理功能将各个部分集成到设计管理器中。  3. 对印刷电路板设计时的自动布局采用两种不同的布局方式,即组群式和基于统计方式;新增加了自动布局规则设计功能;增强的交互式布局和布线模式。  4.电路板信号完整性规则设计和检查功能可以检测出潜在的阻抗匹配、信号传播延时和信号过载等问题; 广泛的集成向导功能引导设计人员完成复杂的工作。  5.原理图到印刷电路板的更新功能加强了Sch和PCB之间的联系; 可以用标准或者用户自定义模板来生成新的原理图文件;集成的原理图设计系统收集了超过60000个元器件。  6.通过完整的SPICE 3f5仿真系统可以在原理图中直接进行信号仿真;可以选择超过60种工业标准计算机电路板布线模板或者用户可以自己生成一个电路板模板。  四、用Protel99SE进行电路设计的基本步骤。  1.设计电路原理图  电路原理图的设计是整个电路设计的基础,因此电路原理图要设计好,以免影响后面  的设计工作。电路原理图的设计一般有如下步骤:  (1)设置原理图设计环境;(2)放置元件;(3)原理图布线;(4)编辑和调整;(5)检查原理图;(6)生成网络表。  2.设计印刷电路板  印刷电路板设计是从电路原理图变成一个具体产品的必经之路,因此,印刷电路板设计是电路设计中最重要、最关键的一步。通常,印刷电路板设计的具体步骤如下:  (1)规划电路板;(2)设置参数;(3)装入网络表;(4)元器件布局;(5)自动布线;(6)手工调整。  五、实例  下面以两级放大电路的设计来说明Protel 99 SE在电路设计中的应用。  设计要求:(1)使用单层电路板;(2)电源、地线铜膜线的宽度为27 mm;(3)一般布线的宽度为635 mm 。  1. 设计电路原理图  原理图设计最基本的要求是正确性,其次是布局合理,最后是在正确性和布局合理的前  提下力求美观。根据以上所述的电路原理图设计步骤,两级放大器电路原理图设计过程如下:  (1) 启动原理图设计服务器  进入Protel 99 SE,创建一个数据库,执行菜单File/New命令,从框中选择原理图服务器(Schematic Document)图标,双击该图标,建立原理图设计文档。双击文档图标,进入原理图设计服务器界面。  (2) 设置原理图设计环境  执行菜单Design/Options和Tool/Preferences,设置图纸大小、捕捉栅格、电气栅格等。  (3) 装入所需的元件库  在设计管理器中选择Browse SCH页面,在Browse区域中的下拉框中选择Library,然后单击ADD/Remove按钮,在弹出的窗口中寻找Protel 99 SE子目录,在该目录中选择Library\SCH路径,在元件库列表中选择所需的元件库,比如Miscellaneous devices�ddb,TI Databook库等,单击ADD按钮,即可把元件库增加到元件库管理器中。  (4)放置元件  根据实际电路的需要,到元件库中找出所需的元件,然后用元件管理器的Place按钮将元件放置在工作平面上,再根据元件之间的走线把元件调整好。  (5)原理图布线  利用Protel 99 SE提供的各种工具、指令进行布线,将工作平面上的器件用具有电气意义的导线、符号连接起来,构成一个完整的电路原理图。  (6)编辑和调整  利用Protel 99 SE 所提供的各种强大的功能对原理图进一步调整和修改,以保证原理图的美观和正确。同时对元件的编号、封装进行定义和设定等。  (7)检查原理图  使用Protel 99 SE 的电气规则,即执行菜单命令Tool/REC对画好的电路原理图进行电气规则检查。若有错误,根据错误情况进行改正。  (8) 生成网络表  网络表是电路原理图设计和印刷电路板设计之间的桥梁,执行菜单命令Design/Create Netlist可以生成具有元件名、元件封装、参数及元件之间连接关系的网络表。  经过以上的步骤,完成了两级放大电路原理图的设计。  两级放大电路原理图如下所示:  2.印刷电路板的设计  电路设计的最终目的是为了设计出电子产品,而电子产品的物理结构是通过印刷电路板来实现的。Protel 99 SE为设计者提供了一个完整的电路板设计环境,使电路设计更加方便有效。应用Protel 99 SE设计印刷电路板过程如下:  (1)启动印刷电路板设计服务器  执行菜单File/New命令,从框中选择PCB设计服务器(PCB Document)图标,双击该图标,建立PCB设计文档。双击文档图标,进入PCB设计服务器界面。  (2)规划电路板  根据要设计的电路确定电路板的尺寸。选取Keep Out Layer复选框,执行菜单命令Place/Keepout/Track,绘制电路板的边框。执行菜单Design/Options,在“Signal Lager”中选择Bottom Lager,把电路板定义为单面板。  (3)设置参数  参数设置是电路板设计的非常重要的步骤,执行菜单命令Design/Rules,左键单击Routing按钮,根据设计要求,在规则类(Rules Classes)中设置参数。  选择Routing Layer,对布线工作层进行设置:左键单击Properties,在“布线工作层面设置”对话框的“Pule Attributes”选项中设置Tod Layer为“Not Used”、设置 Bottom Layer为“Any”。  选择Width Constraint,对地线线宽进行设置:左键单击Add按钮,进入线宽规则设置界面,首先在Rule Scope区域的Filter Kind选择框中选择Net,然后在Net下拉框中选择GND,再在Rule Attributes区域将Minimum width、Maximum width和Preferred三个输入框的线宽设置为27 mm;  电源线宽的设置:在Net下拉框中选择VCC,其他与地线线宽设置相同;  整板线宽设置:在Filter Kind选择框中选择Whole Board,然后将Minimum width,Maximum width和Preferred三个输入框的线宽设置为635 mm。  (4)装入元件封装库  执行菜单命令Design/Add/Remove Library,在“添加/删除元件库” 对话框中选取所有元件所对应的元件封装库,例如:PCB Footprint,Transistor,General IC,International Rectifiers等。  (5)装入网络表  执行菜单Design/Load Nets命令,然后在弹出的窗口中单击Browse按钮,再在弹出的窗口中选择电路原理图设计生成的网络表文件(扩展名为Net),如果没有错误,单击Execute。若出现错误提示,必须更改错误。  (6)元器件布局  Protel 99 SE既可以进行自动布局也可以进行手工布局,执行菜单命令Tools/Auto Placement/Auto Placer可以自动布局。布局是布线关键性的一步,为了使布局更加合理,最好采用手工布局方式。  (7)自动布线  Protel 99 SE采用世界最先进的无网格、基于形状的对角线自动布线技术。执行菜单命令Auto Routing/All,并在弹出的窗口中单击Route all按钮,程序即对印刷电路板进行自动布线。只要设置有关参数,元件布局合理,自动布线的成功率几乎是100%。  (8)手工调整自动布线结束后,可能存在一些令人不满意的地方,可以手工调整,把电路板设计得尽善尽美。  (9) 打印输出印刷电路板图执行菜单命令File/Print/Preview,形成扩展名为PPC的文件,再执行菜单命令File/print Job,就可以打印输出印刷电路板图。  六、设计中的问题及解决方法  虽然Protel 99 SE功能强大,人机界面友好,但在设计过程中往往遇到一些问题。  1.生成的印刷电路板图与电路原理图不相符,有一些元件没有连上。这种情况时有发生,问题出在原理图上,原理图看上去是连上了,但画图不符合规范,导致未连接上。不规范的连线有:  ①连线超过元器件的断点;  ②连线的两部分有重复。  解决方法是在画原理图连线时,应尽量做到:  ①在元件端点处连线;  ②元器件连线尽量一线连通。  2.在印刷电路板设计中装入网络表时元器件不能完全调入。原因有:  ①原理图中未定义元件的封装形式;  ②印刷电路板封装的名称不存在,致使在封装库中找不到;  ③封装可以找到,但元件的管脚名称与印刷电路板库中封装的管脚名称不一致。  解决方法:  ①到网络表文档中查找未定义封装的元件,补上元件封装;  ②确认印刷电路板元件封装库是否已调入,同时检查原理图中元件封装名称是否与印刷电路板元件封装库中的名称是否一致;  ③将印刷电路板元件封装库中的元件修改成与原理图中定义的一致。如三极管的管脚名称在原理图中定义为1,2,3,而在印刷电路板封装库中焊盘序号定义为E,B,C,必须修改印刷电路板封装库中的三极管管脚名称,使他与原理图中定义的三极管管脚名称一致。  七、结语  随着电子工业的飞速发展,电路设计越来越复杂,手工设计越来越难以适应形势发展的需要,Protel 99 SE以其强大的功能、快捷实用的操作界面及良好的开放性,为设计者提供了现代电子设计手段,使设计者能快捷、准确地设计出满意的电路原理图和印刷电路板,不愧是从事电路设计的一个良好的工具。

简单文本编辑器的实验内容

一个简单的文本编辑器。(是在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;}

100分整个这么复杂的东东,难~~~~

不为答题,特为吐槽:这个项目拿c#java甚至python全日工作都得写至少一个星期吧。你还用c……

简单文本编辑器java报告

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

相关百科

热门百科

首页
发表服务