Java Tutorial/SWT/WIN32
Содержание
- 1 17. Add System Setting Change Listener
- 2 17. Detect a system settings change
- 3 17. Embed Word in an applet (win32 only)
- 4 17. How to access About, Preferences and Quit menus on carbon.
- 5 17. Invoke an external batch file
- 6 17. Invoke the system text editor on autoexec.bat
- 7 17. Load System File Icon
- 8 17. OLE and ActiveX: browse the typelibinfo for a program id (win32 only)
- 9 17. OLE and ActiveX: get events from IE control (win32 only)
- 10 17. Using System Icon Image
17. Add System Setting Change Listener
<source lang="java">
import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; public class SystemSettingChangeListener {
public static void main(String[] args) { final Display display = new Display(); Shell shell = new Shell(display); display.addListener(SWT.Settings, new Listener() { public void handleEvent(Event event) { System.out.println("Setting changed"); } }); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
}</source>
17. Detect a system settings change
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
/*
* example snippet: detect a system settings change * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ * * @since 3.2 */
import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; public class DetectSystemSettingChange {
public static void main(String[] args) { final Display display = new Display(); final Shell shell = new Shell(display); shell.setText("The SWT.Settings Event"); shell.setLayout(new GridLayout()); Label label = new Label(shell, SWT.WRAP); label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); label.setText("Change a system setting and the table below will be updated."); final Table table = new Table(shell, SWT.BORDER); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); TableColumn column = new TableColumn(table, SWT.NONE); column = new TableColumn(table, SWT.NONE); column.setWidth(150); column = new TableColumn(table, SWT.NONE); for (int i = 0; i < colorIds.length; i++) { TableItem item = new TableItem(table, SWT.NONE); Color color = display.getSystemColor(colorIds[i]); item.setText(0, colorNames[i]); item.setBackground(1, color); item.setText(2, color.toString()); } TableColumn[] columns = table.getColumns(); columns[0].pack(); columns[2].pack(); display.addListener(SWT.Settings, new Listener() { public void handleEvent(Event event) { for (int i = 0; i < colorIds.length; i++) { Color color = display.getSystemColor(colorIds[i]); TableItem item = table.getItem(i); item.setBackground(1, color); } TableColumn[] columns = table.getColumns(); columns[0].pack(); columns[2].pack(); } }); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } static int[] colorIds = new int[] { SWT.COLOR_INFO_BACKGROUND, SWT.COLOR_INFO_FOREGROUND, SWT.COLOR_LIST_BACKGROUND, SWT.COLOR_LIST_FOREGROUND, SWT.COLOR_LIST_SELECTION, SWT.COLOR_LIST_SELECTION_TEXT, SWT.COLOR_TITLE_BACKGROUND, SWT.COLOR_TITLE_BACKGROUND_GRADIENT, SWT.COLOR_TITLE_FOREGROUND, SWT.COLOR_TITLE_INACTIVE_BACKGROUND, SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT, SWT.COLOR_TITLE_INACTIVE_FOREGROUND, SWT.COLOR_WIDGET_BACKGROUND, SWT.COLOR_WIDGET_BORDER, SWT.COLOR_WIDGET_DARK_SHADOW, SWT.COLOR_WIDGET_FOREGROUND, SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW, SWT.COLOR_WIDGET_LIGHT_SHADOW, SWT.COLOR_WIDGET_NORMAL_SHADOW, }; static String[] colorNames = new String[] { "SWT.COLOR_INFO_BACKGROUND", "SWT.COLOR_INFO_FOREGROUND", "SWT.COLOR_LIST_BACKGROUND", "SWT.COLOR_LIST_FOREGROUND", "SWT.COLOR_LIST_SELECTION", "SWT.COLOR_LIST_SELECTION_TEXT", "SWT.COLOR_TITLE_BACKGROUND", "SWT.COLOR_TITLE_BACKGROUND_GRADIENT", "SWT.COLOR_TITLE_FOREGROUND", "SWT.COLOR_TITLE_INACTIVE_BACKGROUND", "SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT", "SWT.COLOR_TITLE_INACTIVE_FOREGROUND", "SWT.COLOR_WIDGET_BACKGROUND", "SWT.COLOR_WIDGET_BORDER", "SWT.COLOR_WIDGET_DARK_SHADOW", "SWT.COLOR_WIDGET_FOREGROUND", "SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW", "SWT.COLOR_WIDGET_LIGHT_SHADOW", "SWT.COLOR_WIDGET_NORMAL_SHADOW", };
}</source>
17. Embed Word in an applet (win32 only)
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
//package org.eclipse.swt.snippets; /*
* example snippet: Embed Word in an applet (win32 only) * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ * * @since 3.0 */
import java.applet.Applet; public class MainClass extends Applet {
org.eclipse.swt.widgets.Display display; org.eclipse.swt.widgets.Shell swtParent; java.awt.Canvas awtParent; public void init() { Thread thread = new Thread(new Runnable() { public void run() { setLayout(new java.awt.GridLayout(1, 1)); awtParent = new java.awt.Canvas(); add(awtParent); display = new org.eclipse.swt.widgets.Display(); swtParent = org.eclipse.swt.awt.SWT_AWT.new_Shell(display, awtParent); swtParent.setLayout(new org.eclipse.swt.layout.FillLayout()); org.eclipse.swt.ole.win32.OleFrame frame = new org.eclipse.swt.ole.win32.OleFrame( swtParent, org.eclipse.swt.SWT.NONE); org.eclipse.swt.ole.win32.OleClientSite site; try { site = new org.eclipse.swt.ole.win32.OleClientSite(frame, org.eclipse.swt.SWT.NONE, "Word.Document"); } catch (org.eclipse.swt.SWTException e) { String str = "Create OleClientSite Error" + e.toString(); System.out.println(str); return; } setSize(500, 500); validate(); site.doVerb(org.eclipse.swt.ole.win32.OLE.OLEIVERB_SHOW); while (swtParent != null && !swtParent.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } }); thread.start(); } public void stop() { if (display != null && !display.isDisposed()) { display.syncExec(new Runnable() { public void run() { if (swtParent != null && !swtParent.isDisposed()) swtParent.dispose(); swtParent = null; display.dispose(); display = null; } }); remove(awtParent); awtParent = null; } }
}</source>
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
/*
* How to access About, Preferences and Quit menus on carbon. * NOTE: This snippet uses internal SWT packages that are * subject to change without notice. * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ */
import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.carbon.*; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; public class Snippet178 {
private static final int kHICommandPreferences = ("p" << 24) + ("r" << 16) + ("e" << 8) + "f"; private static final int kHICommandAbout = ("a" << 24) + ("b" << 16) + ("o" << 8) + "u"; private static final int kHICommandServices = ("s" << 24) + ("e" << 16) + ("r" << 8) + "v"; public static void main(String[] arg) { Display.setAppName("AppMenu"); // sets name in Dock Display display = new Display(); hookApplicationMenu(display, "About AppMenu"); Shell shell = new Shell(display); shell.setText("Main Window"); shell.open(); while (!shell.isDisposed()) if (!display.readAndDispatch()) display.sleep(); display.dispose(); } static void hookApplicationMenu(Display display, final String aboutName) { // Callback target Object target = new Object() { int commandProc(int nextHandler, int theEvent, int userData) { if (OS.GetEventKind(theEvent) == OS.kEventProcessCommand) { HICommand command = new HICommand(); OS.GetEventParameter(theEvent, OS.kEventParamDirectObject, OS.typeHICommand, null, HICommand.sizeof, null, command); switch (command.rumandID) { case kHICommandPreferences: return handleCommand("Preferences"); //$NON-NLS-1$ case kHICommandAbout: return handleCommand(aboutName); default: break; } } return OS.eventNotHandledErr; } int handleCommand(String command) { Shell shell = new Shell(); MessageBox preferences = new MessageBox(shell, SWT.ICON_WARNING); preferences.setText(command); preferences.open(); shell.dispose(); return OS.noErr; } }; final Callback commandCallback = new Callback(target, "commandProc", 3); //$NON-NLS-1$ int commandProc = commandCallback.getAddress(); if (commandProc == 0) { commandCallback.dispose(); return; // give up } // Install event handler for commands int[] mask = new int[] { OS.kEventClassCommand, OS.kEventProcessCommand }; OS.InstallEventHandler(OS.GetApplicationEventTarget(), commandProc, mask.length / 2, mask, 0, null); // create About ... menu command int[] outMenu = new int[1]; short[] outIndex = new short[1]; if (OS.GetIndMenuItemWithCommandID(0, kHICommandPreferences, 1, outMenu, outIndex) == OS.noErr && outMenu[0] != 0) { int menu = outMenu[0]; int l = aboutName.length(); char buffer[] = new char[l]; aboutName.getChars(0, l, buffer, 0); int str = OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault, buffer, l); OS.InsertMenuItemTextWithCFString(menu, str, (short) 0, 0, kHICommandAbout); OS.CFRelease(str); // add separator between About & Preferences OS.InsertMenuItemTextWithCFString(menu, 0, (short) 1, OS.kMenuItemAttrSeparator, 0); // enable pref menu OS.EnableMenuCommand(menu, kHICommandPreferences); // disable services menu OS.DisableMenuCommand(menu, kHICommandServices); } // schedule disposal of callback object display.disposeExec(new Runnable() { public void run() { commandCallback.dispose(); } }); }
}</source>
17. Invoke an external batch file
<source lang="java">
import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Display; public class ExternalBatchFileInvoke {
public static void main(String[] args) { Display display = new Display(); Program.launch("c:\\cygwin\\cygwin.bat"); display.dispose(); }
}</source>
17. Invoke the system text editor on autoexec.bat
<source lang="java">
import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Display; public class InvokeSystemTextEditor {
public static void main(String[] args) { Display display = new Display(); Program p = Program.findProgram(".txt"); if (p != null) p.execute("c:\\autoexec.bat"); // Windows-specific filename display.dispose(); }
}</source>
17. Load System File Icon
<source lang="java">
import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; public class SystemFileIconLoad {
public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout()); Label label = new Label(shell, SWT.NONE); Image image = null; Program p = Program.findProgram(".txt"); ImageData data = p.getImageData(); image = new Image(display, data); label.setImage(image); p = Program.findProgram(".bmp"); data = p.getImageData(); image = new Image(display, data); label = new Label(shell, SWT.NONE); label.setImage(image); p = Program.findProgram(".doc"); data = p.getImageData(); image = new Image(display, data); label = new Label(shell, SWT.NONE); label.setImage(image); label.pack(); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } if (image != null) image.dispose(); display.dispose(); }
}</source>
17. OLE and ActiveX: browse the typelibinfo for a program id (win32 only)
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
//package org.eclipse.swt.snippets; /*
* OLE and ActiveX example snippet: browse the typelibinfo for a program id (win32 only) * NOTE: This snippet uses internal SWT packages that are * subject to change without notice. * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ */
import org.eclipse.swt.SWT; import org.eclipse.swt.SWTException; import org.eclipse.swt.internal.ole.win32.TYPEATTR; import org.eclipse.swt.ole.win32.OLE; import org.eclipse.swt.ole.win32.OleAutomation; import org.eclipse.swt.ole.win32.OleControlSite; import org.eclipse.swt.ole.win32.OleFrame; import org.eclipse.swt.ole.win32.OleFunctionDescription; import org.eclipse.swt.ole.win32.OlePropertyDescription; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class OLEActiveXTypeLib {
public static void main(String[] args) { if (args.length == 0) { System.out.println("Usage: java Main <program id>"); return; } String progID = args[0]; Display display = new Display(); Shell shell = new Shell(display); OleFrame frame = new OleFrame(shell, SWT.NONE); OleControlSite site = null; OleAutomation auto = null; try { site = new OleControlSite(frame, SWT.NONE, progID); auto = new OleAutomation(site); } catch (SWTException ex) { System.out.println("Unable to open type library for " + progID); return; } printTypeInfo(auto); auto.dispose(); shell.dispose(); display.dispose(); } private static void printTypeInfo(OleAutomation auto) { TYPEATTR typeattr = auto.getTypeInfoAttributes(); if (typeattr != null) { if (typeattr.cFuncs > 0) System.out.println("Functions :\n"); for (int i = 0; i < typeattr.cFuncs; i++) { OleFunctionDescription data = auto.getFunctionDescription(i); String argList = ""; int firstOptionalArgIndex = data.args.length - data.optionalArgCount; for (int j = 0; j < data.args.length; j++) { argList += "["; if (j >= firstOptionalArgIndex) argList += "optional, "; argList += getDirection(data.args[j].flags) + "] " + getTypeName(data.args[j].type) + " " + data.args[j].name; if (j < data.args.length - 1) argList += ", "; } System.out.println(getInvokeKind(data.invokeKind) + " (id = " + data.id + ") : " + "\n\tSignature : " + getTypeName(data.returnType) + " " + data.name + "(" + argList + ")" + "\n\tDescription : " + data.documentation + "\n\tHelp File : " + data.helpFile + "\n"); } if (typeattr.cVars > 0) System.out.println("\n\nVariables :\n"); for (int i = 0; i < typeattr.cVars; i++) { OlePropertyDescription data = auto.getPropertyDescription(i); System.out.println("PROPERTY (id = " + data.id + ") :" + "\n\tName : " + data.name + "\n\tType : " + getTypeName(data.type) + "\n"); } } } private static String getTypeName(int type) { switch (type) { case OLE.VT_BOOL: return "boolean"; case OLE.VT_R4: return "float"; case OLE.VT_R8: return "double"; case OLE.VT_I4: return "int"; case OLE.VT_DISPATCH: return "IDispatch"; case OLE.VT_UNKNOWN: return "IUnknown"; case OLE.VT_I2: return "short"; case OLE.VT_BSTR: return "String"; case OLE.VT_VARIANT: return "Variant"; case OLE.VT_CY: return "Currency"; case OLE.VT_DATE: return "Date"; case OLE.VT_UI1: return "unsigned char"; case OLE.VT_UI4: return "unsigned int"; case OLE.VT_USERDEFINED: return "UserDefined"; case OLE.VT_HRESULT: return "int"; case OLE.VT_VOID: return "void"; case OLE.VT_BYREF | OLE.VT_BOOL: return "boolean *"; case OLE.VT_BYREF | OLE.VT_R4: return "float *"; case OLE.VT_BYREF | OLE.VT_R8: return "double *"; case OLE.VT_BYREF | OLE.VT_I4: return "int *"; case OLE.VT_BYREF | OLE.VT_DISPATCH: return "IDispatch *"; case OLE.VT_BYREF | OLE.VT_UNKNOWN: return "IUnknown *"; case OLE.VT_BYREF | OLE.VT_I2: return "short *"; case OLE.VT_BYREF | OLE.VT_BSTR: return "String *"; case OLE.VT_BYREF | OLE.VT_VARIANT: return "Variant *"; case OLE.VT_BYREF | OLE.VT_CY: return "Currency *"; case OLE.VT_BYREF | OLE.VT_DATE: return "Date *"; case OLE.VT_BYREF | OLE.VT_UI1: return "unsigned char *"; case OLE.VT_BYREF | OLE.VT_UI4: return "unsigned int *"; case OLE.VT_BYREF | OLE.VT_USERDEFINED: return "UserDefined *"; } return "unknown " + type; } private static String getDirection(int direction) { String dirString = ""; boolean comma = false; if ((direction & OLE.IDLFLAG_FIN) != 0) { dirString += "in"; comma = true; } if ((direction & OLE.IDLFLAG_FOUT) != 0) { if (comma) dirString += ", "; dirString += "out"; comma = true; } if ((direction & OLE.IDLFLAG_FLCID) != 0) { if (comma) dirString += ", "; dirString += "lcid"; comma = true; } if ((direction & OLE.IDLFLAG_FRETVAL) != 0) { if (comma) dirString += ", "; dirString += "retval"; } return dirString; } private static String getInvokeKind(int invKind) { switch (invKind) { case OLE.INVOKE_FUNC: return "METHOD"; case OLE.INVOKE_PROPERTYGET: return "PROPERTY GET"; case OLE.INVOKE_PROPERTYPUT: return "PROPERTY PUT"; case OLE.INVOKE_PROPERTYPUTREF: return "PROPERTY PUT BY REF"; } return "unknown " + invKind; }
}</source>
17. OLE and ActiveX: get events from IE control (win32 only)
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
//package org.eclipse.swt.snippets; /*
* OLE and ActiveX example snippet: get events from IE control (win32 only) * NOTE: This snippet uses internal SWT packages that are * subject to change without notice. * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ */
import org.eclipse.swt.SWT; import org.eclipse.swt.SWTError; import org.eclipse.swt.internal.ole.win32.ru; import org.eclipse.swt.internal.ole.win32.ruObject; import org.eclipse.swt.internal.ole.win32.GUID; import org.eclipse.swt.internal.ole.win32.IDispatch; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.ole.win32.OLE; import org.eclipse.swt.ole.win32.OleAutomation; import org.eclipse.swt.ole.win32.OleControlSite; import org.eclipse.swt.ole.win32.OleEvent; import org.eclipse.swt.ole.win32.OleFrame; import org.eclipse.swt.ole.win32.OleListener; import org.eclipse.swt.ole.win32.Variant; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class GetEventsFromIE {
public static void main(String[] args) { final Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); OleControlSite controlSite; try { OleFrame frame = new OleFrame(shell, SWT.NONE); controlSite = new OleControlSite(frame, SWT.NONE, "Shell.Explorer"); controlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE); } catch (SWTError e) { System.out.println("Unable to open activeX control"); return; } shell.open(); // IWebBrowser final OleAutomation webBrowser = new OleAutomation(controlSite); // When a new document is loaded, access the document object for the new // page. int DownloadComplete = 104; controlSite.addEventListener(DownloadComplete, new OleListener() { public void handleEvent(OleEvent event) { int[] htmlDocumentID = webBrowser.getIDsOfNames(new String[] { "Document" }); if (htmlDocumentID == null) return; Variant pVarResult = webBrowser.getProperty(htmlDocumentID[0]); if (pVarResult == null || pVarResult.getType() == 0) return; // IHTMLDocument2 OleAutomation htmlDocument = pVarResult.getAutomation(); // Request to be notified of click, double click and key down events EventDispatch myDispatch = new EventDispatch(EventDispatch.onclick); IDispatch idispatch = new IDispatch(myDispatch.getAddress()); Variant dispatch = new Variant(idispatch); htmlDocument.setProperty(EventDispatch.onclick, dispatch); myDispatch = new EventDispatch(EventDispatch.ondblclick); idispatch = new IDispatch(myDispatch.getAddress()); dispatch = new Variant(idispatch); htmlDocument.setProperty(EventDispatch.ondblclick, dispatch); myDispatch = new EventDispatch(EventDispatch.onkeydown); idispatch = new IDispatch(myDispatch.getAddress()); dispatch = new Variant(idispatch); htmlDocument.setProperty(EventDispatch.onkeydown, dispatch); // Remember to release OleAutomation Object htmlDocument.dispose(); } }); // Navigate to a web site int[] ids = webBrowser.getIDsOfNames(new String[] { "Navigate", "URL" }); Variant[] rgvarg = new Variant[] { new Variant("http://www.google.ru") }; int[] rgdispidNamedArgs = new int[] { ids[1] }; webBrowser.invoke(ids[0], rgvarg, rgdispidNamedArgs); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } // Remember to release OleAutomation Object webBrowser.dispose(); display.dispose(); }
} // EventDispatch implements a simple IDispatch interface which will be called // when the event is fired. class EventDispatch {
private COMObject iDispatch; private int refCount = 0; private int eventID; final static int onhelp = 0x8001177d; final static int onclick = 0x80011778; final static int ondblclick = 0x80011779; final static int onkeyup = 0x80011776; final static int onkeydown = 0x80011775; final static int onkeypress = 0x80011777; final static int onmouseup = 0x80011773; final static int onmousedown = 0x80011772; final static int onmousemove = 0x80011774; final static int onmouseout = 0x80011771; final static int onmouseover = 0x80011770; final static int onreadystatechange = 0x80011789; final static int onafterupdate = 0x80011786; final static int onrowexit = 0x80011782; final static int onrowenter = 0x80011783; final static int ondragstart = 0x80011793; final static int onselectstart = 0x80011795; EventDispatch(int eventID) { this.eventID = eventID; createCOMInterfaces(); } int getAddress() { return iDispatch.getAddress(); } private void createCOMInterfaces() { iDispatch = new COMObject(new int[] { 2, 0, 0, 1, 3, 4, 8 }) { public int method0(int[] args) { return QueryInterface(args[0], args[1]); } public int method1(int[] args) { return AddRef(); } public int method2(int[] args) { return Release(); } // method3 GetTypeInfoCount - not implemented // method4 GetTypeInfo - not implemented // method5 GetIDsOfNames - not implemented public int method6(int[] args) { return Invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); } }; } private void disposeCOMInterfaces() { if (iDispatch != null) iDispatch.dispose(); iDispatch = null; } private int AddRef() { refCount++; return refCount; } private int Invoke(int dispIdMember, int riid, int lcid, int dwFlags, int pDispParams, int pVarResult, int pExcepInfo, int pArgErr) { switch (eventID) { case onhelp: System.out.println("onhelp"); break; case onclick: System.out.println("onclick"); break; case ondblclick: System.out.println("ondblclick"); break; case onkeyup: System.out.println("onkeyup"); break; case onkeydown: System.out.println("onkeydown"); break; case onkeypress: System.out.println("onkeypress"); break; case onmouseup: System.out.println("onmouseup"); break; case onmousedown: System.out.println("onmousedown"); break; case onmousemove: System.out.println("onmousemove"); break; case onmouseout: System.out.println("onmouseout"); break; case onmouseover: System.out.println("onmouseover"); break; case onreadystatechange: System.out.println("onreadystatechange"); break; case onafterupdate: System.out.println("onafterupdate"); break; case onrowexit: System.out.println("onrowexit"); break; case onrowenter: System.out.println("onrowenter"); break; case ondragstart: System.out.println("ondragstart"); break; case onselectstart: System.out.println("onselectstart"); break; } return COM.S_OK; } private int QueryInterface(int riid, int ppvObject) { if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG; GUID guid = new GUID(); COM.MoveMemory(guid, riid, GUID.sizeof); if (COM.IsEqualGUID(guid, COM.IIDIUnknown) || COM.IsEqualGUID(guid, COM.IIDIDispatch)) { COM.MoveMemory(ppvObject, new int[] { iDispatch.getAddress() }, 4); AddRef(); return COM.S_OK; } COM.MoveMemory(ppvObject, new int[] { 0 }, 4); return COM.E_NOINTERFACE; } int Release() { refCount--; if (refCount == 0) { disposeCOMInterfaces(); } return refCount; }
}</source>
17. Using System Icon Image
<source lang="java">
import org.eclipse.swt.SWT; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; public class SystemIconImage {
public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout());
Label label = new Label (shell, SWT.NONE); label.setImage(display.getSystemImage(SWT.ICON_ERROR)); label = new Label (shell, SWT.NONE); label.setText("SWT.ICON_ERROR"); label = new Label (shell, SWT.NONE); label.setImage(display.getSystemImage(SWT.ICON_INFORMATION)); label = new Label (shell, SWT.NONE); label.setText("SWT.ICON_INFORMATION"); label = new Label (shell, SWT.NONE); label.setImage(display.getSystemImage(SWT.ICON_WARNING)); label = new Label (shell, SWT.NONE); label.setText("SWT.ICON_WARNING"); label = new Label (shell, SWT.NONE); label.setImage(display.getSystemImage(SWT.ICON_QUESTION)); label = new Label (shell, SWT.NONE); label.setText("SWT.ICON_QUESTION"); shell.setSize(400, 350); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); }
}</source>