mirror of
				https://github.com/notepad-plus-plus/notepad-plus-plus.git
				synced 2025-10-31 03:24:04 +01:00 
			
		
		
		
	git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@653 f5eea248-9336-0410-98b8-ebc06183d4e3
		
			
				
	
	
		
			143 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!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>
 | |
| 
 |