摘自Scintilla文檔

一.如何在窗口中建立Scintilla編輯控件

1.       載入動態鏈接庫

1hmod = LoadLibrary("SciLexer.DLL");
2if (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操作,還有復制黏貼。