diff options
author | nyamatongwe <unknown> | 2000-11-26 12:11:16 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2000-11-26 12:11:16 +0000 |
commit | 344ba40ea060dd2fdeb3223ef9a2f45eccf8092e (patch) | |
tree | de08a4675832d413fd413e83969ca9361a6b4dee | |
parent | dcf614b69ebfebbd9dd10e8ba3cf36f3029a196f (diff) | |
download | scintilla-mirror-344ba40ea060dd2fdeb3223ef9a2f45eccf8092e.tar.gz |
HowTo document from Holger Schmidt.
-rw-r--r-- | doc/Steps.html | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/doc/Steps.html b/doc/Steps.html new file mode 100644 index 000000000..76779e9ef --- /dev/null +++ b/doc/Steps.html @@ -0,0 +1,139 @@ +<!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><link href="style.css" rel="stylesheet"></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, + 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 recieve 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 sould be set to NULL. + </p> + </p> + <p><h3>The fast way to control Scintilla</h3> + <p> + The fast way of controling the Scintilla Edit Control is to call message handling function by yourself. + You can retrive 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 recive notifications?</h3> + <p> + Whenever an event occures 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 recieving 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> + +</body></html> + |