From 664e37abfe5c796c1279b8295fb030f126b0a7d8 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Wed, 30 Nov 2011 11:36:13 -0600 Subject: Initial import of qscintilla from 2007 --- doc/Scintilla/Steps.html | 142 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100755 doc/Scintilla/Steps.html (limited to 'doc/Scintilla/Steps.html') 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 @@ + +How to use the Scintilla Edit Control in windows? +

How to use the Scintilla Edit Control in windows?

+

+ This should be a little step by step explanation how to use Scintilla in the windows environment. +

+

+

How to create Scintilla Edit Control?

+

+ 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 | WS_CLIPCHILDREN,
+		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. +

+

+

How to control the Scintilla Edit Control?

+

+ 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 to control Scintilla

+

+ 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.) +

+

+ 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 should be set to NULL. +

+

+

The fast way to control Scintilla

+

+ 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. +

+

+ 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. +

+ +

+

How will I receive notifications?

+

+ 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. +

+

+ 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;
+			
+

+

+ +

+ Page contributed by Holger Schmidt. +

+ + -- cgit v1.2.1