Scintilla控件在Win32环境下的使用(一)
原本想要学习一下语法高亮功能,做一个像Notepad++一样的编辑器。
然后就兴冲冲的下载了Notepad++的开源代码准备开始看。
但是整个框架比较复杂,看了一会之后突然发现Notepad++使用的是Scintilla这个很强大的控件,而且也是开源的。所以最后决定在分析Notepad++源代码之前先使用一下Scintilla,然后研究一下Scintilla的源码。
下面是Scintilla 的官方网站:
http://www.scintilla.org/index.html
我们下载源代码。
然后准备编译。参考了下面这个博客:
http://blog.csdn.net/gnorth/article/details/7231513这里自己在编译makefile文件的时候出了一个错误:我使用了Visual Studio 命令提示(64位)下编译文件,结果编译出来之后的文件无法被vs识别。
一开始一直找不到错误,LoadLibrary 的返回值一直为0,后来用GetLastError()查看错误信息,才发现了原来是dll文件本身编译成了64位。
而我的程序是32位的,所以dll无法识别64位的dll。
后来用32位的 Visual Studio 命令提示重新编译出了32位的dll就对了。32位编译出来的dll是600多K, 而64位编译出来的是900多K。
具体编译的步骤:
打开Visual Studio 命令提示
进到下载好的scintilla文件目录下面的win32目录下面,
int (*SendEditor)(void*,int,int,int); //快速发送消息 SendEditor = (int (__cdecl *)(void *,int,int,int))SendMessage( hwndScintilla,SCI_GETDIRECTFUNCTION,0,0); ptr = (void *)SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER,0,0); canundo = SendEditor(ptr,SCI_CANUNDO,0,0);
以后自己就使用SendEditor,没有使用SendMessage了。
但是自己不理解的是:c应该没有重载 多态这些概念,我在使用SendEditor的时候里面必须写4个参数。感觉用起来也没方便多少。
自己C++没学多少。想请问下大家如何在C++下面实现该SendEditor的简洁方法?在此感谢大家。