How to access About, Preferences and Quit menus on carbon. : WIN32 « SWT « Java Tutorial






/*******************************************************************************
 * 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.commandID) {
          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();
      }
    });
  }
}








17.127.WIN32
17.127.1.Using System Icon ImageUsing System Icon Image
17.127.2.Invoke the system text editor on autoexec.bat
17.127.3.Invoke an external batch file
17.127.4.Load System File IconLoad System File Icon
17.127.5.Embed Word in an applet (win32 only)
17.127.6.OLE and ActiveX: browse the typelibinfo for a program id (win32 only)
17.127.7.OLE and ActiveX: get events from IE control (win32 only)OLE and ActiveX: get events from IE control (win32 only)
17.127.8.How to access About, Preferences and Quit menus on carbon.
17.127.9.Add System Setting Change Listener
17.127.10.Detect a system settings changeDetect a system settings change