
首先载入 Scintilla 控件的动态库,如下:
hmod = LoadLibrary("SciLexer.DLL");
if (hmod == NULL)
{
MessageBox(hwndParent,
"The Scintilla DLL could not be loaded.",
"Error loading Scintilla",
MB_OK | MB_ICONERROR);
}
如果动态库成功载入,该动态库就已经为我们注册了一个新的 window class。
好了,我们已经可以像使用其他的windows控件一样来使用这个控件了:
hwndScintilla = CreateWindowEx(0, "Scintilla", "",
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN,
10, 10, 500, 400, hwndParent, (HMENU)GuiID, hInstance, NULL);
请注意这个新的 window class 的名称是 "Scintilla"。到这里,我们实际上已经在我们的 windows 程序中引入了这个 Scintilla 控件。
怎样操作 Scintill缉掸光赶叱非癸石含将a 控件呢?
简单地说,我们可以通过直接向 Scintilla 发送 commands 来操作该控件。scintilla有两种方式,一种方式使用起来比较简单而另外一种方式在执行速度上有优势。
操作 Scintilla 控件的简单的方法
这种方法和我们使用其他的 windows 控件没什么两样。我们可以发送消息给 Scintilla 控件,然后接受来自 Scintilla 控件的通知(notifications )消息(请注意, Scintilla 控件是将这些通知消息都发送到其父窗体上);
Scintilla 能够识别每一个 command,我们可以直接用 SendMessage 函数来向 Scintilla 控件发送消息:
SendMessage(hwndScintilla, sci_command, wparam, lparam);
譬如:
SendMessage(hwndScintilla, SCI_CREATEDOCUMENT, 0, 0);
有些 commands 是有返回值的,而另外一些命令的参数没有用到,这些参数需要设置成 NULL。
操作 Scintilla 控件的快速的方法
Scintilla 为我们提供了一个消息处理函数,我们可以获取到这个消息处理函数,然后直接调用这个函数函数来执行相应的 commands。这种方式要比使用 SendMessage 发送消息的处理速度要快。
首先,我们可以通过 SCI_GETDIRECTFUNCTION 和 SCI_GETDIRECTPOINTER 这两个命令来获取到上面提到的消息处理函数和该函数所需要的第一个参数。scintilla获取这两个指针我们必须通过 SendMessage :)(译者注:新版本的Scintilla 已经在动态库中导出了相应的函数)
整个过程如下:
int (*fn)(void*, int, int, int);
void * ptr;
int canundo;
fn = (int (__cdecl *)(void *, int, int, int))SendMessage(
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-53177-1.html
相信党和国家
中青年大约占总人口1