摘自Scintilla文档
一.如何在窗口中建立Scintilla编辑控件
1. 载入动态链接库
1
hmod
=
LoadLibrary(
"
SciLexer.DLL
"
);
2 if (hmod == NULL)
3 {
4 MessageBox(hwndParent,
5 "The Scintilla DLL could not be loaded.",
6 "Error loading Scintilla",
7 MB_OK | MB_ICONERROR);
8}
9
2 if (hmod == NULL)
3 {
4 MessageBox(hwndParent,
5 "The Scintilla DLL could not be loaded.",
6 "Error loading Scintilla",
7 MB_OK | MB_ICONERROR);
8}
9
2. 创建窗口(已经注册)
hwndScintilla = CreateWindowEx( 0 ,二.如何控制窗口类控件
" Scintilla " , "" , WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN,
10 , 10 , 500 , 400 ,hwndParent,(HMENU)GuiID, hInstance,NULL);
方法一:给控件发送消息和接受来自控件的响应
SendMessage(hwndScintilla,sci_command,wparam,lparam);
方法二:首先通过SCI_GETDIRECTFUNCTION 和 SCI_GETDIRECTPOINTER消息获取编辑控件回调函数的指针和第一个参数,接下来就可以直接使用编辑控件的消息处理函数了。
int ( * fn)( void * , int , int , int );然后使用该回调函数:
void * ptr;
fn = ( int (__cdecl * )( void * , int , int , int ))SendMessage(hwndScintilla,SCI_GETDIRECTFUNCTION, 0 , 0 );
ptr = ( void * )SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER, 0 , 0 );
fn(ptr,sci_command,wparam,lparam);
三.如何接受响应
只要在父窗口消息处理函数中对WM_NOTIFY消息做相应处理
NMHDR
*
lpnmhdr;
[]
case
WM_NOTIFY:
lpnmhdr
=
(LPNMHDR) lParam;
if
(lpnmhdr
->
hwndFrom
==
hwndScintilla)
{
switch(lpnmhdr->code)
{
case SCN_CHARADDED:
[…]
break;
}}
break
;
整个过程没有任何问题,做好后是这个样子的Download。
此时你会发现该控件你没有发送任何消息就已经具备了一定的功能,有redo undo操作,还有复制黏贴。