【源码分享】Win32汇编版 【XP记事本】的实现 有图有真相
本帖最后由 lukelqz 于 2013-2-24 09:14 编辑其实呢在罗云彬的Win32汇编书里面已经有一章讲RichEdit控件的,个人觉得这个控件用来做编辑控件还是很好用的。
但是觉得罗云彬后面写的那个类似记事本的程序的功能不是很完善,寒假在家没网,后来我就照着XP记事本,就又写了一个。
还是有些亮点在里面的,比如自动换行的切换,拖放打开文件,XP系统下XP的按钮风格。
另外今天回校在Win7 64位下测试 有点小问题 不过修复了一下,应该好了。
欢迎大家测试BUG联系我
下面放些测试截图:
先来个拼接的
再来张
和xp记事本的对比,测试的是F5时间输入功能
跳行功能
字符串查找替换
Unix回车转换
拖放打开
开发日志2013.2.14 完成Notepad的资源文件
开发日志2013.2.15 完成Notepad的XP按钮风格,字体设置功能
开发日志2013.2.16 完成Notepad的自动换行功能,状态栏切换功能,背景色功能,插入时间功能
开发日志2013.2.17 完成Notepad的syslink控件打开网站功能,转到某行功能,查找字符串功能
开发日志2013.2.18 完成Notepad的替换字符串功能,新建打开保存另存为功能 完成运行状态下拖放打开文件功能
开发日志2013.2.19 完成Notepad的未启动情况下拖放打开文件功能 支持编辑状态的时候,文件可删除
开发日志2013.2.20 完成notepad的扩展功能,可更改tab位大小,实现Richedit右键弹出菜单功能
开发日志2013.2.22 完成Notepad的unix换行转换功能
另外还有一些自己想加的功能但是没实现。欢迎广大鱼油支招。
一、阅读方向的设置,这个功能我翻了很多资料,就是没实现,只能开始注册窗口类的时候用ES_LEFT或者ES_RIGHT来设置阅读方向,运行之后通过getwindowlong和setwindowlong来改窗口风格的方法来实现改阅读方向未成功
二、还有个待实现的功能:注册表的注册,完成双击打开txt等文件自动打开本软件
最后来个源码
**** Hidden Message *****
PS:刚刚开了一下360,说我写的软件,故意伪装成系统文件,报毒了呵呵,大家不放心的话,可以直接删掉exe文件,自己拿我源码重新编译一下,对了忘了说了,用的Win32汇编IDE是Radasm,挺好的IDE,关键支持自动API。
明天就是小年了,祝大家2013元宵节快乐~
还没学到 先看看 谢谢分享。。。。。。 看看,顶一下 给力。
感谢分享。 做的好用心{:5_108:},我做的几乎都是半成品。。。 不错哇,加顶 我来看看 是什么啊 赞一个. 哇哦,你写的这段KU也。 movzx eax,@stTime.wDay
push eax
movzx eax,@stTime.wMonth
push eax
movzx eax,@stTime.wYear
push eax
movzx eax,@stTime.wMinute
push eax
movzx eax,@stTime.wHour
push eax
mov eax,offset szDataFormat
push eax
lea eax,@szBuffer
push eax
call wsprintf
add esp,28在确认栈平衡的情况下我想也可以用ebp暂时代替esp,用MOV来哦
メ㊣逆ご帅☆ 发表于 2013-2-23 22:00 static/image/common/back.gif
哇哦,你写的这段KU也。 在确认栈平衡的情况下我想也可以用ebp暂时代替esp,用MOV来哦
{:5_96:}啊哟,俺是在家无聊,搞搞咯,寒假一个月没上网了,都是手机签到的。你说用mov不太会呢。教教我吧。我只知道ebp是子程序用来读参数和局部变量的,然后子程序leave的时候ebp会把保存的值还给esp,来维持堆栈平衡 本帖最后由 メ㊣逆ご帅☆ 于 2013-2-23 23:55 编辑
lukelqz 发表于 2013-2-23 22:55 http://bbs.fishc.com/static/image/common/back.gif
啊哟,俺是在家无聊,搞搞咯,寒假一个月没上网了,都是手机签到的。你说用mov不太会呢。教教我吧 ...
一个月没上网。要是我会蛋疼死。。。
其实原本我也不知道这样传参,不过跟着小甲鱼老师调试的时候经常看见他们是这样调用的
VC6也很经常这样做
我已经发现EBP不行了。。。。。EBP会影响到@stTime.wDay之类的,我改用EDI
;其实这个跟PUSH一个道理,PUSH是即时开辟栈空间,即时传参,而这个是一次性开辟,一次性传参
mov edi,esp;用EDI保存当前ESP地址(不能用ESP,会影响到@stTime.wDay之类的结构传值,它靠EBP的)
sub esp,28;一次性开辟,算好需要开辟大小4*7=28,然后就是使劲传参了
movzx eax,@stTime.wDay
mov ,eax
movzx eax,@stTime.wMonth
mov ,eax
movzx eax,@stTime.wYear
mov ,eax
movzx eax,@stTime.wMinute
mov ,eax
movzx eax,@stTime.wHour
mov ,eax
mov eax,offset szDataFormat
mov ,eax
lea eax,@szBuffer
mov ,eax
call wsprintf
add esp,28;mov esp,edi测试是可以的
学习学习 来看看 lukelqz 发表于 2013-2-23 22:55 static/image/common/back.gif
啊哟,俺是在家无聊,搞搞咯,寒假一个月没上网了,都是手机签到的。你说用mov不太会呢。教教我吧 ...
你这进步速度超神了$_$,边玩游戏都这么给力。
我win32学习比你久好多。羡慕嫉妒恨。
你一直理解能力都这么好么? 有种 大牛的感觉啊 祝大家2013元宵节快乐 有点厉害啊 佩服呀 メ㊣逆ご帅☆ 发表于 2013-2-23 23:10 static/image/common/back.gif
一个月没上网。要是我会蛋疼死。。。
其实原本我也不知道这样传参,不过跟着小甲鱼老师调试的时候经常看 ...
soga
明白了,感觉其实和子程序把esp暂时给ebp,然后leave的时候再恢复道理差不多哈。 メ㊣逆ご帅☆ 发表于 2013-2-23 23:19 static/image/common/back.gif
你这进步速度超神了$_$,边玩游戏都这么给力。
我win32学习比你久好多。羡慕嫉妒恨。
你一直理解能力都 ...
{:5_91:}俺都边学边玩,其实还是耐不下心来学,将近一个学期了,那本罗云彬的书到现在都没看完哦{:5_100:}
你的经验肯定比我丰富呵呵 完全搞不清 套路