From 344ba40ea060dd2fdeb3223ef9a2f45eccf8092e Mon Sep 17 00:00:00 2001
From: nyamatongwe
+ This should be a little step by step explanation how to use Scintilla in the windows environment.
+ How to use the Scintilla Edit Control in windows?
+
+ First of all, load the Scintilla DLL with something like: +
+
+
+ hmod = LoadLibrary("SciLexer.DLL");
+ if (hmod==NULL)
+ {
+ MessageBox(hwndParent,
+ "The Scintilla DLL could not be loaded.",
+ "Error loading Scintilla",
+ MB_OK | MB_ICONERROR);
+ }
+
+ + 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. +
++ Now you can use this new control just like any other windows control. +
++ + hwndScintilla = CreateWindowEx(0, + "Scintilla","", WS_CHILD|WS_VISIBLE|WS_TABSTOP, + 10,10,500,400,hwndParent,(HMENU)GuiID, hInstance,NULL); ++
+ Note the new window class name: "Scintilla". By reaching this point you actually included + a Scintilla Edit Control to your windows program. +
+ ++ You can control Scintilla by sending commands to the Edit Control. + There a 2 ways of doing this. A simple and fast way. +
++ 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.) +
++ 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. +
++ + SendMessage(hwndScintilla,sci_command,wparam,lparam); ++
+ like: +
++ + SendMessage(hwndScintilla,SCI_CREATEDOCUMENT, 0, 0); ++
+ Some of the commands will return a value and unused parameters sould be set to NULL. +
+ ++ 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. +
++ 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 :) +
++ The whole thing has to look like this: +
++ + 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); ++
+ 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. +
+ + ++ 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. +
++ So in Scintillas parent window message handling function you have to include some code like this: +
+
+ 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;
+
+
+
+
+
+
--
cgit v1.2.3