diff options
Diffstat (limited to 'doc')
| -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> + | 
