win32编写记事本
Windows内记事本工具的功能详解

Windows内记事本工具的功能详解关于Windows内记事本工具的实用功能详解1、让记事本自动记录上次打开的时间方法:在记事本的第一行写上“.LOG”(不包括绰号并且为大写字母,注意前面有个点),这样今后打开记事本文件就知道上次最后的打开时间了。
2、让记事本自动换行每次打开记事本文件总是显示一行长长的文本,阅读起来一点不方便,其实只要选择菜单上的格式,然后将自动换行勾选上,这样文本就会根据记事本窗口大小自动换行了。
3、让记事本随叫随到在计算机使用过程中记事本可算是鞠躬尽瘁了,用它的地方老多老多的,可是每次总不能是“开始/程序/附件/记事本”或者“鼠标右键/新建/文本文档”吧,浪费时间不说,还容易误操作!那么我们就让它随叫随到,到系统的“%systemroot%system32”目录,找到notepad.exe,右键属性,在“快捷键”窗口按下你想使用的快捷键,确定,不过在此处键入启动或切换到该程序的快捷键。
快捷键自动包括Ctrl+Alt组合键,请按要添加的该组合键中键,例如,要定义Ctlr+ALT+H组合的`快捷键,请按H。
不能使用ESC、Enter、TAB,空格键、Print screen、Delete或backspace作为组合键中的按键。
其他程序不能使用该组合键,如果该快捷键与基于windows的程序中的访问键冲突,则访问键就不起作用。
访问键是某个字母或数字,即当它与ALT键组合使用时,其效果与使用鼠标单击命令的效果相同。
4、利用记事本浏览网页特效做网页的朋友一定会经常测试一些网页特效,反正做博客我就是正常测试一些好玩的代码,每次打开一些网页编辑器或者软件实在麻烦(速度实在是慢),其实利用记本本就可以轻松完成,而且记事本的速度可能是超快。
方法:将想要测试的网页代码粘贴到记事本,选择“文件/另存为”,文件名选择英文或者英文+数字的形式,后缀为.html,比如haha.html,然后打开IE浏览器选择“文件/打开”,找到刚才的haha.html文件并且打七,这样可以在浏览器中预览网页效果了。
pywin32简易入门(转)

pywin32简易⼊门(转)停更⼀年多了,最近对PY产⽣了兴趣,应为想解放双⼿,⼜不想⽤按键精灵之类的软件,于是乎就百度到了这个东东“pywin32”打开了新世界的⼤门,So,就在这记录学习笔记吧。
⾔归正传准备部分1pip install pywin32准备部分2⼯欲善其事必先利其器,先装个Spy++,百度⼀⼤把,就不放链接了,具体使⽤⽅法参考这⾥(⼀段简短的介绍)不过也够⽤了。
代码部分⾸先import win32guiimport win32conwin = win32gui.FindWindow('Notepad','新建⽂本⽂档.txt - 记事本')tid = win32gui.FindWindowEx(win,None,'Edit',None)win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, '你好hello word!')win32gui.PostMessage(tid,win32con.WM_KEYDOWN,win32con.VK_RETURN,0)print("%x" % tid)print("%x" % win2)⼀句⼀句解释:win = win32gui.FindWindow('Notepad','新建⽂本⽂档.txt - 记事本')这⾥搬运⼀下⼤佬博客的解释,FindWindow(lpClassName=None, lpWindowName=None)描述:⾃顶层窗⼝(也就是桌⾯)开始搜索条件匹配的窗体,并返回这个窗体的句柄。
不搜索⼦窗⼝、不区分⼤⼩写。
找不到就返回0 参数:lpClassName:字符型,是窗体的类名,这个可以在Spy++⾥找到。
lpWindowName:字符型,是窗⼝名,也就是标题栏上你能看见的那个标题。
python3 win32print开发文档 -回复

python3 win32print开发文档-回复Python3 win32print开发文档Win32print是一个Python扩展模块,它提供了与Windows打印机子系统交互的功能。
本篇文章将为你介绍win32print的使用方法和详细文档,以帮助你在开发过程中轻松实现与打印机相关的功能。
1. Win32print安装和导入首先,你需要安装pywin32库。
可以通过在命令行中运行"pip install pywin32"来安装它。
安装完成后,你可以在Python代码中导入win32print模块,通过以下代码实现:import win32print2. 获取打印机列表首先,在开始使用win32print之前,我们需要了解系统中存在哪些打印机。
通过调用win32print的EnumPrinters函数,我们可以获取打印机列表。
以下是一个示例代码:def get_printer_list():printer_list = []printer_info =win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL) for printer in printer_info:printer_list.append(printer[2])return printer_listprint(get_printer_list())通过调用get_printer_list函数,我们就可以在控制台上打印出系统中的打印机列表。
3. 设置默认打印机在打印之前,你可能需要将某个特定的打印机设置为默认打印机。
通过调用win32print的SetDefaultPrinter函数,可以很轻松地实现这一功能。
以下是一个示例代码:def set_default_printer(printer_name):printer_info =win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL) for printer in printer_info:if printer[2] == printer_name:win32print.SetDefaultPrinter(printer[2])print("默认打印机已设置为: " + printer[2])returnprint("找不到指定的打印机: " + printer_name)set_default_printer("Microsoft Print to PDF")通过调用set_default_printer函数,我们可以将打印机设置为系统中的某个打印机。
记事本代码

记事本代码#include<iostream.h>#include<string.h>#include<ctype.h> //为了以下使用isdigit(string)函数作铺垫typedef struct node{char a[100]; //每行100字符node * next; //关于此处next的作用还不清楚,但不可去掉}node;class notepad{public:notepad(){i=1;line=0;}~notepad(){}void operator_interface();void input();void ct_input();void delete1();void copy();void paste();void open();void save();char * find();void print();char store[100]; //储存需复制内容private:char * ptr_array[100]; //指针数组,记录100行行指针int linelen[100]; //最大100行int line; //当前总行数char d[30]; //记录操作数据int k,l; //记录当前查找行ilint i; //文档录入初始标记};void notepad::operator_interface(){cout<<"********************************************************"<<en dl;cout<<"***0.继续录入文档"<<endl;cout<<"***1.输入文档内容"<<endl;cout<<"***2.删除某些内容"<<endl;cout<<"***3.复制某些内容"<<endl;cout<<"***4.粘贴某些内容"<<endl;cout<<"***5.打开文档内容"<<endl;cout<<"***6.是否保存文档"<<endl;cout<<"***7.获取操作帮助"<<endl;cout<<"***8.我要结束操作"<<endl;cout<<"********************************************************"<<en dl;}void notepad::input(){-99"<<endl; cout<<"输入总行数,格式:01char e[10];cin>>e;char *lin=e;if(*(lin+2)=='\0'&&isdigit(*lin)&&isdigit(*(lin+1))){line=(*lin-'0')*10+(*(lin+1)-'0');if(line!=0){cout<<"请输入各行内容"<<endl;while(i<=line){cout<<"第"<<i<<"行 ";node *p=new node;cin>>p->a;ptr_array[i]=p->a;linelen[i]=strlen(p->a);i++;}}else cout<<"你输入的行数有误"<<endl;}else cout<<"你输入的行数有误"<<endl; }void notepad::ct_input(){if(line!=0){int i=line+1;cout<<"输入要录入的总行数,格式:01-99"<<endl;char e[10];cin>>e;char *lin=e;if(*(lin+2)=='\0'&&isdigit(*lin)&&isdigit(*(lin+1))){ line=line+(*lin-'0')*10+(*(lin+1)-'0');if(line!=0){cout<<"请输入各行内容"<<endl;while(i<=line){cout<<"第"<<i<<"行 ";node *p=new node;cin>>p->a;ptr_array[i]=p->a;linelen[i]=strlen(p->a);i++;}}else cout<<"你输入的行数有误"<<endl;}else cout<<"你输入的行数有误"<<endl;}else cout<<"当前文档并无内容,请先输入1录入文档"<<endl; }void notepad::print(){cout<<endl<<endl;int j=1;cout<<"当前文档内容为:"<<endl;while(j<=line){cout<<"第"<<j<<"行 ";char *q=ptr_array[j];while(*q!='\0'){cout<<*q;q++;}cout<<endl;j++;}cout<<endl;}char * notepad::find(){ //暂未解决跨行查找问题k=1;cin>>d;l=strlen(d);char *n=d;int c=1;char *m=ptr_array[k];while(k<=line){if(*m=='\0'){k=k+1;if(k<=line)m=ptr_array[k];}if(*m!='\0'&&*m!=*n)m++;while(*n!='\0'&&*m!='\0'&&*m==*n){ m=m+1;n=n+1;c=c+1;}if(*n=='\0'){return m-c+1;}else {n=d;c=1;}}return NULL;}void notepad::delete1(){char * dp1;char * dp2;cout<<"请输入要删除的文本前几位字符,注意区分"<<endl;dp1=find();int l1=k;cout<<"请输入要删除的文本末几位字符,注意区分"<<endl;dp2=find();int l2=k;if(dp1==NULL||dp2==NULL||l1>l2)cout<<"输入错误"<<endl;else{dp2=dp2+l;if(l1==l2){while(*dp2!='\0'){*dp1=*dp2;dp1++;dp2++;}*dp1='\0';linelen[l1]=strlen(ptr_array[l1]);}else {if(l1+1<l2){for(intt1=l1+1,t2=l2;t2<=line;t1++,t2++)ptr_array[t1]=ptr_array[t2]; line=line-l2+l1+1;l2=l1+1;}*dp1='\0';char *dp21=ptr_array[l2];while(*(dp2-1)!='\0'){*dp21=*dp2;dp21++;dp2++;}linelen[l1]=strlen(ptr_array[l1]);linelen[l2]=strlen(ptr_array[l2]);}if(linelen[l1]==0){for(int v=l1;v<=line;v++)ptr_array[v]=ptr_array[v+1]; line--;}if(linelen[l2]==0){for(int v=l2;v<=line;v++)ptr_array[v]=ptr_array[v+1]; line--;}}}void notepad::copy(){char * cp1;char * cp2;cout<<"请输入要复制的文本前几位字符,注意区分"<<endl; cp1=find();int l1=k;cout<<"请输入要复制的文本末几位字符,注意区分"<<endl; cp2=find();int l2=k;char *pt=store;if(cp1!=NULL&&cp2!=NULL&&l1<=l2){cp2=cp2+l;while(cp1!=cp2){if(*cp1=='\0'){l1++;cp1=ptr_array[l1];}else {*pt=*cp1;pt++;cp1++;}}*pt='\0';}else cout<<"输入错误"<<endl; }void notepad::paste(){cout<<"请输入要粘贴位置的前几位字符(在首字符后粘贴)"<<endl; char *pat=find();if(pat!=NULL){int choice2;cout<<"请选择要粘贴内容:1/从内存中0/我自己输入"<<endl; cin>>choice2;if(!choice2)cin>>store;char *ppt=store;for(char *pat1=pat;*(pat1+1)!='\0';pat1++); //定位至末尾int pl=strlen(store);*(pat1+pl+1)='\0';while(pat1!=pat){ //移位*(pat1+pl)=*pat1;pat1--;}pat++;for(int u=1;u<=pl;u++){*pat=*ppt;ppt++;pat++;}linelen[k]=linelen[k]+pl;}else cout<<"输入错误"<<endl;}void notepad::open(){print();}void notepad::save(){cout<<"是否保存文件,1/是0/否"<<endl;char g[10];int choice1;cin>>g;char *choi=g;if(*(choi+1)=='\0'&&isdigit(*choi)){ choice1=*choi-'0';if(choice1==1)cout<<"文件已保存"<<endl; else if(choice1==0){for(int w=1;w<=line;w++){ //相当于析构函数的作用ptr_array[w]=NULL;linelen[w]=0;}line=0;}else cout<<"输入错误"<<endl;}else cout<<"输入错误"<<endl; }void main(){cout<<"欢迎使用本程序,您可以在要输入文档内容时通过切换输入法实现输入汉字,byhk"<<endl;notepad b;b.operator_interface();char f[10];int choice;cin>>f;char *choic=f;if(*(choic+1)=='\0'&&isdigit(*choic)){ //错误输入处理机制choice=*choic-'0';}else choice=9;while(choice!=8){switch(choice){case 0:b.ct_input();break;case 1:b.input();break;case 2:b.delete1();b.print();break;case 3:{b.copy();cout<<endl;char *p_t=b.store;int fzcd=strlen(b.store);cout<<"你所要复制的内容长度为"<<endl<<fzcd<<endl; cout<<"你所要复制的内容为"<<endl;while(*p_t!='\0'){cout<<*p_t;p_t++;}cout<<endl;}break;case 4:b.paste();b.print();break;case 5:b.open();break;case 6:b.save();break;case 7:b.operator_interface();break;case 8:break;default:break;}if(choice==9||(choice>=0&&choice<=7)){ //输入错误时的操作及输入正确时 //的继续操作判断if(choice==9)cout<<"你输入的操作有误,请重新输入,输入 7 获取操作帮助"<<endl;else cout<<"继续你的操作,输入 7 获取操作帮助"<<endl;cin>>f;choic=f;if(*(choic+1)=='\0'&&isdigit(*choic)) //错误输入处理机制choice=*choic-'0';else choice=9;}}cout<<"感谢您的使用"<<endl; }。
程序员常用的记事本

程序员常用的记事本
程序员常用的记事本软件有很多种,下面是几个常用的:
1. Notepad++: Notepad++ 是一款免费的纯文本编辑器,具备语法高亮、代码折叠、拼写检查等功能。
它支持多种编程语言,包括 C、C++、Java、Python 等。
2. Sublime Text: Sublime Text 是一款功能强大的文本编辑器,它支持多种编程语言,包括 Python、JavaScript、Ruby 等。
它还具有快捷键、语法高亮、插件等功能,让用户更高效地编写代码。
3. Atom: Atom 是一款开源的文本编辑器,它支持多种编程语言,包括 C、C++、Java、Python 等。
它具有强大的插件系统,用户可以根据自身需求安装各种插件,提高编写代码的效率。
4. Visual Studio Code: Visual Studio Code 是一款免费、开源的轻量级编程工具,它支持多种编程语言,包括 C、C++、Java、Python 等。
它还具有代码补全、调试器、编辑器插件等功能,让用户更高效地编写代码。
5. Quiver: Quiver 是一款为程序员设计的笔记软件,它可以混合文字、代码、Markdown 和 LaTeX 等内容。
它支持多种平台,包括macOS、Windows 和 Linux 等。
它还具有同步、笔记搜索、标签等功能,让程序员更方便地记录和管理笔记。
windows环境下32位汇编语言程序设计附书代码

windows环境下32位汇编语言程序设计附书代码汇编语言是一种底层计算机语言,用于编写与计算机硬件直接交互的程序。
在Windows环境下,可以使用32位汇编语言进行程序设计。
本文将介绍一些常见的32位汇编语言程序,并附带相关的代码示例。
1.程序的基本结构:在32位汇编语言中,程序的基本结构由三个部分组成:数据段、代码段和堆栈段。
数据段用来声明和初始化程序中使用的全局变量和常量。
例如,下面的代码段声明了一个全局变量message,存储了一个字符串。
```data segmentmessage db 'Hello, World!',0data ends```代码段包含了程序的实际执行代码。
下面的代码段使用`mov`指令将message变量中的字符串存储到寄存器eax中,并使用`int 21h`来调用MS-DOS功能1来显示字符串。
```code segmentstart:mov eax, offset messagemov ah, 09hint 21hmov ah, 4chint 21hcode ends```堆栈段用来存储函数调用过程中的局部变量和返回地址。
2.入栈和出栈操作:在程序中,我们经常需要使用堆栈来保存和恢复寄存器的值,以及传递函数参数和保存函数返回值。
以下是一些常用的堆栈操作指令: ```push reg ;将reg中的值压入堆栈pop reg ;将堆栈顶部的值弹出到reg中```下面的示例演示了如何使用堆栈来保存和恢复寄存器的值:```code segmentstart:push eax ;将eax保存到堆栈mov eax, 10 ;设置eax的值为10pop ebx ;将堆栈顶部的值弹出到ebxadd eax, ebx ;将eax和ebx相加int 3 ;调试中断,用于程序的暂停mov ah, 4chint 21hcode ends```3.条件判断和跳转指令:汇编语言中的条件判断和跳转指令用于根据条件的成立与否来改变程序的执行流程。
第9章 Win32编程

第9章
Win32编程
9.1.1 Windows API的有关概念
Windows API都是以DLL输出函数的形式提供的, 大部分核心的API服务都在Kernel32.dll、GUI32.dll和 User32.dll三个文件内,它们位于Windows\System (Winnt\System32)目录内。还有许多重要的API函数在 Windows (Winnt)或Windows\System (Winnt\System32) 目录中的其它DLL文件内(本章第5节将介绍DLL)。这 些函数数量庞大,而且随着Windows版本的升级仍在 不断增加。对于普通程序员来说,不可能也没必要知 道每个API函数的用法,但应了解一些API的知识并且 能在需要时迅速查到自己感兴趣的API函数的资料。
GetActiveWindow、FindWindow等API函数取得其句柄。
第9章
Win32编程
下面一个例子是在当前Windows环境下查找一个标 题为“Hello”的窗口,如果查到该窗口,就将其标题 改为“How Are You”。 HWND hWnd ; if (hWnd = FindWindow (0, "Hello"))
判断一个窗口是否处于最小化状态
改变窗口的位置 改变窗口的位置和大小
第9章
Win32编程
BringWindowToTop FindWindow FlashWindow GetWindowText
将指定的窗口带到顶部 寻找符合某些条件的窗口 使指定的窗口闪烁显示 取窗口的标题或控件的内容
SetWindowText
运行外部应用程序 退出Windows并关闭或重新启动系统等 创建形状各异的窗口 打开剪贴板 清除剪贴板上的数据 关闭剪贴板
Win32汇编语言与Win32应用程序设计

Wi 2 n 应用程序一般使用 c语言编程 , 3 但是 在某些需 要进行深层编 程 的情况下 , 例如 Wi 2 n 应用程序执行机制分 析、 3 病毒清除、 加密解密等 深层编程 中, 或者对于某些 速度 要求较高 的程 序, 需要使 用汇编语 言( 甚 至机器语言 ) 直接编写 W n2 i3 应用程序。Wi 2应用程序虽然和其他 3 n 3 2 位应 用程序( 如 3 位保 护模式 D S 例 2 O 程序 ) 一样可 以使用 36 编语 8汇 言和保护模式编程 , 是 Wi3 但 n2应用程序的执行 机制与其他 3 2位应用 程 序存在一定的差别 , 例如消息循环 、 动态链接等 , 而且 Wi3 汇编语言 n2
. — .
s ar t t
任选一种 文本编辑器 ,就可用于编辑 Wi 2 n 汇编语言源程序 。如 : 3 E I、 DT 记事本等都可 以 ,i ac + Vsl + 等编程语 言中的编辑器 也可 以 , u 甚至 WO D wP 9 R 、 s 7等可 以编辑文本 文件 的字 处理 软件都可 以 。推荐 使用 A M DT 这是一款专用 的汇编语 言编辑器 。 S E I,
20 年 第 l 卷 第 2 期 06 6 2
收稿 日期 :06 0 — 5 2 0 —6 2
Wi3 n 2汇编 语言与 Wi3 n 2应用程序设计
孙彦
( 山西工程职业 技术学院 , 山西太原 ,3 0 9 00 0 )
摘 要: 简要介绍 了 Wi3 n 2汇编语 言, 并就 Wi3 n 2汇编语 言用于 Wi3 n2应用程序设计
。
CONI NFORMATI ON =0 0 0 4 h 0000 MB I
—
1 进 行 Wi3 n2汇编 语 言编程 的基 本软 件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北科技学院课程设计说明书专业:网络工程课程名称: 汇编课程设计班级:姓名: 学号:设计题目: win32编写记事本设计时间: 2011-12-05 至2011-12-16 评语: ________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____课程设计报告的要求1、需求分析:描述问题,简述课题要解决的问题是什么,有什么要求和限制条件。
2、总体设计(程序设计组成框图、流程图)3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,过程调用关系描述等))4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施5、测试结果,用几组测试数据进行测试算法设计的正确性。
6、附录。
源程序清单和结果:源程序要加注释。
结果要包括测试数据和运行结果。
《汇编语言》课程设计案例一、问题陈述及其需求分析要求:在windows系统下利用32位汇编编写一个简单但功能能实现的记事本。
内容:在利用32位汇编编写记事本的时候,考虑到很多问题:(1)首先最重要的是汇编软件的选择,刚开始用asm2011软件编写,最终不行,最后参考资料,如坚持用它的话,必须用代码编写资源代码才能使用;因此为了方便,区别于dos系统下的汇编,我采用了Radasm汇编软件。
(2)其次是记事本的编辑,由于记事本我们大家都常见,曾经也用过高级语言编写过,例如java,因此对其格式很了解,但是还有一个问题就是,我们将如何用汇编这种语言来编写记事本呢,例如如何编写记事本基本框架,编写菜单栏,建立菜单项,添加文本编辑区及建立文本编辑区。
(3)最后当然最重要的还是记事本具体的架构和主要功能的实现,例如记事本中的简单功能,复制,剪切,粘贴之类的;同时还要写出检测功能,以达到对其文本区得以正常编辑及功能的正常使用。
(4)最后还有一点,就是自己的体会和感想,首次接触32位汇编语言设计,这让自己对其知识模块有了一定的了解,通过参考资料,以及网上有关知识,让自己的程序编程有了一定了的提高。
Win32编写记事本基本功能如下:记事本包括很多东西,其中最重要的是菜单,它包括:文件,编辑,格式,查看,帮助。
文件菜单中提供以下功能:1、新建 (&N)\tCtrl+N2、打开(&O)\tCtrl+O3、保存(&S)\tCtrl+S4、另存为(&A)\tCtrl+Alt+S5、退出编辑菜单中提供以下功能: 1、撤销 (&U)\tCtrl+Z2、复制(&C)\tCtrl+C3、剪切(&T)\tCtrl+X4、粘贴(&V)\tCtrl+V5、全选(&A)\tCtrl+A6、查找(&F)\tCtrl+F7、替换(&H)\tCtrl+H 格式菜单中提供以下功能: 1、字体 2、背景颜色查看菜单中提供以下功能: 1、工具栏 2、状态栏帮助菜单中提供以下功能: 1、关于记事本 2、帮助二、总体设计1、思路流程图:结束用控件建立菜单和文本区的响应关系在窗口中添加文本编辑区构造菜单栏构建记事本窗口开始2、窗口建立流程图:3、记事本的总体结构流程图:消息循环刷新窗口客户区显示窗口建立窗口 注册窗口类 得到应用程序的句柄菜单资源结束文本编辑区相应变化菜单和文本编辑区一一对应响应 运行窗口过程 _ProcWinMain添加richEdit 控件(文本编辑区)构建窗口开始对应反馈相应的操作4、其他比较重要的功能流程图: (1)、新建流程图: (2)、另存为流程图:三、详细设计1、模块简介 1.程序头文件 名称:记事本.inc说明:程序头文件主要包含了文件的定义,ID 等值定义,变量定义以及记事本基本功能提示定义。
2.菜单资源文件 名称:记事本.rc开始调用_CheckModify 子程序文本区内容是否有变化Y调用_SaveFile 子程序,保存文件N调用CloseHandle 关闭文件及相应文件进程调用_SetCaption 来设置新建文件的标题调用_SetStatus 来设置 菜单项的可用状态结束开始初始化另存为对话框显示另存为对话框创建新文件新文件创建成功 ?Y调用_SaveFile 子程序,保存文件N输出错误信息结束说明:菜单资源文件主要定义了记事本的菜单和菜单项、菜单和菜单项的关系、菜单加速键命令及菜单项的地址。
3. 窗口模块名称:_WinMain说明:该模块是搭建整体框架,贯穿整体的主要部分,更是核心部分,它关系着窗口的显示,菜单和文本编辑区的加载,窗口过程的调用等。
4.窗口过程名称:_ProcWinMain说明:是该程序的核心部分,也是窗口的重要组成部分,其中设定了窗口的一些窗口命令,而且还在窗口命令中建立了菜单和文本编辑区richEdit组件的联系。
5.文件的读写名称:_ProcStream说明:该模块主要是实现richEdit组件中文本的读写操作。
6.检查文本有无改变名称:_CheckModify说明:检查richEdit组件中的文本内容是否有变化,从而确定是否进行离开、新建操作。
7.打开文件名称:_OpenFile说明:通过调用系统打开对话框来选择已存在的要打开的文件。
打开过程使用_ProcStream 子程序(已完成文件的读写过程)。
8.保存文件名称:_SaveFile说明:通过向窗口发送输出流操作的消息,同时调用_ProcStream进行写操作,以达到保存文件的目的。
9.另存为名称:_SaveAs说明:首先通过调用保存文件对话框来确定要保存文件的名称和位置,然后调用_SaveFile 来保存文件。
10.退出名称:_Quit说明:通过调用_CheckModify来检查richEdit组件中的文本内容是否有变化,从而确定是保存后退出还是直接退出。
11.查找对话框和文本编辑显示区名称:_Init说明:该模块主要是注册和初始化查找框的结构,建立工具栏、状态栏以及文本编辑显示区。
12.查找模块名称:_FindText说明:该模块主要是设置查找范围,设置查找选项,显示查找框并高亮显示查找到的内容。
13.替换文本名称:_ReplaceText和_ReplaceAll说明:调用查找模块找到需要替换的文本,然后决定是否进行替换或全部替换。
14.设置字体名称:_SetFont和_ChooseFont说明:通过调用系统字体的对话框来设置richEdit组件中的文本字体和颜色等。
15.重新排列窗口位置名称:_ResizeWindow说明:计算及调整工具栏,状态栏以及Richedit控件位置。
16.设置背景色名称:_ChooseColor说明:通过调用系统背景色的设置框来设置richEdit组件中的文本背景颜色等2、算法说明主要设计算法的说明1.窗口建立的算法设计(_WinMain)(1)、获得应用程序的句柄,同时加载菜单、加速键菜单,用LoadLibray函数来装入库,以便用richEdit的类名来创建控件。
(2)、注册窗口类。
在此之前,需要对窗口参数清零,然后对窗口进行初始化,包括加载鼠标类型,加载标题栏图标,设置窗口的尺寸和风格,获得窗口过程的地址等。
(3)、建立窗口,保存窗口句柄。
在此期间,需要指明窗口的具体大小和窗口出现的位置,窗口的类名、标题、风格、附加风格以及窗口所属的具体模块。
(4)、通过使用ShowWindow函数显示窗口。
(5)、通过使用UpdateWindow函数刷新窗口客户区。
(6)、消息循环。
通过不断的接收消息和处理消息来完成窗口中发生的一切操作。
在窗口程序结束之前需要使用FreeLibrary来释放库。
2.窗口过程的算法设计(_ProcWinMain)窗口过程是窗口中文本实现功能的核心部分,其中WM_COMMAND是实现所有命令的基础,它控制着菜单项与文本编辑区的一一对应联系关系。
当然主要是通过if-elseif-else-endif语句实现多分支的选择,通过对子程序的调用实现相应的操作。
3.菜单的算法设计菜单的实现主要是编写rc资源文件→程序中声明菜单项→窗口建立中加载菜单项→窗口过程中设置菜单项功能。
菜单项中几个典型例子的算法设计1.新建的算法设计新建时需要考虑到的问题有:原文件是否保存,清空文本编辑区内容,设置标题栏的标题。
首先通过调用子程序_CheckModify来检查文本内容与上次保存或建立时有无变化。
若有,则调用_SaveFile来保存文件;若没有,则用CloseHandle函数来关闭现在的文件以及该文件的线程,设置文件的句柄为0。
然后调用_SetCaption子程序来设置新建文件的标题,调用_SetStatus来设置新建窗口的菜单项的可用状态。
2.另存为的算法设计另存为的实现要经过初始化另存为对话框,打开另存为对话框,创建新文件,保存文件。
在初始化另存为对话框时,为了防止之前程序遗留下来的垃圾数据的影响,应该先用RtlZeroMemory函数将所有参数置零,然后对所需要的参数进行设置。
设置好另存为对话框后使用GetSaveFileName函数来调出并显示。
之后进行新文件的创建,创建成功则保存文件,创建失败则输出创建失败信息。
四、编码和测试1、界面显示1、记事本整体运行结果主界面如图所示:2、记事本第一部分界面如图所示(标题):3、记事本第二部分界面如图所示(菜单):4、记事本第三部分界面如图所示(工具栏):5、记事本第四部分界面如图所示(文本编辑区):6、记事本第五部分界面如图所示(状态栏):2、内容界面显示1、文件菜单(1)打开界面(2)保存界面(3)退出界面(如果文本有改动则是这样,如果没改动则直接关掉)2、编辑菜单(1)查找界面3、格式菜单(1)字体界面(2)背景颜色界面4、帮助菜单(1)关于记事本界面(2)帮助界面五.总结与体会本次实验给我感触真是深刻呀,首先自己在没接触过WIN32的前提下来做这次实验,让我感觉到一定的困难和困惑,其次是32位汇编和我们所学知识的16位汇编在本质上有大大的区别,让我原本以为能借助16位汇编的大部分知识来模仿的愿望打破,最后就是汇编软件的差异让我无从适应,以前我们都是用asm汇编软件进行编写,我觉得对那个软件还算是比较熟悉吧,但是这次32位汇编编写记事本,我用到了新的一种汇编软件,radasm,虽然没有什么本质上的软件不同,但是作为我来说,好像换了个环境一样,一下子没法下手了,这样,在汇编开始之前,我就觉得本次实验不简单,对我来说是件很困难的事情。