diff options
Diffstat (limited to 'doc/Scintilla/Steps.html')
-rwxr-xr-x | doc/Scintilla/Steps.html | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/doc/Scintilla/Steps.html b/doc/Scintilla/Steps.html new file mode 100755 index 0000000..ff88e88 --- /dev/null +++ b/doc/Scintilla/Steps.html @@ -0,0 +1,142 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"><title>How to use the Scintilla Edit Control in windows?</title></head><body bgcolor="#ffffff"> + <p><h2>How to use the Scintilla Edit Control in windows?</h2> + <p> + This should be a little step by step explanation how to use Scintilla in the windows environment. + </p> + </p> + <p><h2>How to create Scintilla Edit Control?</h2> + <p> + First of all, load the Scintilla DLL with something like: + </p> + <pre> + + hmod = LoadLibrary("SciLexer.DLL"); + if (hmod==NULL) + { + MessageBox(hwndParent, + "The Scintilla DLL could not be loaded.", + "Error loading Scintilla", + MB_OK | MB_ICONERROR); + } + </pre> + <p> + If the DLL was loaded successfully, then the DLL has registered (yes, by itself) a new + window class. The new class called "Scintilla" is the new scintilla edit control. + </p> + <p> + Now you can use this new control just like any other windows control. + </p> + <pre> + + hwndScintilla = CreateWindowEx(0, + "Scintilla","", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN, + 10,10,500,400,hwndParent,(HMENU)GuiID, hInstance,NULL); + </pre> + <p> + Note the new window class name: "Scintilla". By reaching this point you actually included + a Scintilla Edit Control to your windows program. + </p> + </p> + <p><h2>How to control the Scintilla Edit Control?</h2> + <p> + You can control Scintilla by sending commands to the Edit Control. + There a 2 ways of doing this. A simple and fast way. + </p> + <p><h3>The simple way to control Scintilla</h3> + <p> + The simple way is just like with any other windows control. You can send messages to the + Scintilla Edit Control and receive notifications from the control. (Note that the notifications + are sent to the parent window of the Scintilla Edit Control.) + </p> + <p> + The Scintilla Edit Control knows a special message for each command. + To send commands to the Scintilla Edit Control you can use the SendMessage function. + </p> + <pre> + + SendMessage(hwndScintilla,sci_command,wparam,lparam); + </pre> + <p> + like: + </p> + <pre> + + SendMessage(hwndScintilla,SCI_CREATEDOCUMENT, 0, 0); + </pre> + <p> + Some of the commands will return a value and unused parameters should be set to NULL. + </p> + </p> + <p><h3>The fast way to control Scintilla</h3> + <p> + The fast way of controlling the Scintilla Edit Control is to call message handling function by yourself. + You can retrieve a pointer to the message handling function of the Scintilla Edit Control and + call it directly to execute a command. This way is much more faster than the SendMessage() way. + </p> + <p> + 1st you have to use the SCI_GETDIRECTFUNCTION and SCI_GETDIRECTPOINTER commands to + retrieve the pointer to the function and a pointer which must be the first parameter when calling the retrieved + function pointer. + You have to do this with the SendMessage way :) + </p> + <p> + The whole thing has to look like this: + </p> + <pre> + + int (*fn)(void*,int,int,int); + void * ptr; + int canundo; + + fn = (int (__cdecl *)(void *,int,int,int))SendMessage( + hwndScintilla,SCI_GETDIRECTFUNCTION,0,0); + ptr = (void *)SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER,0,0); + + canundo = fn(ptr,SCI_CANUNDO,0,0); + </pre> + <p> + with "fn" as the function pointer to the message handling function of the Scintilla Control + and "ptr" as the pointer that must be used as 1st parameter. + The next parameters are the Scintilla Command with its two (optional) parameters. + </p> + + </p> + <p><h3>How will I receive notifications?</h3> + <p> + Whenever an event occurs where Scintilla wants to inform you about something, the Scintilla Edit Control + will send notification to the parent window. This is done by a WM_NOTITY message. + When receiving that message, you have to look in the xxx struct for the actual message. + </p> + <p> + So in Scintillas parent window message handling function you have to include some code like this: + </p> + <pre> + NMHDR *lpnmhdr; + + [...] + + case WM_NOTIFY: + lpnmhdr = (LPNMHDR) lParam; + + if(lpnmhdr->hwndFrom==hwndScintilla) + { + switch(lpnmhdr->code) + { + case SCN_CHARADDED: + /* Hey, Scintilla just told me that a new */ + /* character was added to the Edit Control.*/ + /* Now i do something cool with that char. */ + break; + } + } + break; + </pre> + </p> + </p> + + <p> + <i>Page contributed by Holger Schmidt.</i> + </p> +</body></html> + |