Question

alt text

J'ai hérité du développement d'une application Java / SWT s'exécutant sous Windows uniquement. L'une des demandes de fonctionnalités dont j'ai besoin d'étendue est une barre de titre de type Google Chrome à la place de la barre de titre de fenêtres SWT. Les onglets de l'application apparaissent au même niveau que les boutons de contrôle de la fenêtre.

Je crois comprendre que je devrai:

  • écrire un widget Windows capable de restituer l'aspect personnalisé et de gérer les onglets plutôt que les menus.
  • exposer le widget Windows en tant que dll à utiliser en Java via JNI
  • écrivez un widget SWT personnalisé pour l'envelopper et pour exposer l'interface de gestion des onglets.

J'ai beaucoup d'expérience avec la programmation Java, la programmation d'interface graphique avec Swing / AWT et la programmation C # non graphique. La programmation de l’interface graphique Windows et SWT étant nouvelle pour moi, je ne sais pas par où commencer. Le meilleur que j'ai trouvé jusqu'à présent est un article de 2001 sur écrit votre propre widget SWT .

Mon plus gros inconnu est le meilleur moyen d'implémenter une fenêtre d'application Windows personnalisée.

Était-ce utile?

La solution

Vous pouvez créer une instance de shell sans indicateur TITLE, puis restituer manuellement les onglets de type Google Chrome. De cette façon, vous pouvez même créer un fenêtres non rectangulaires .

Autres conseils

lorsqu’il s’agit de choses ne figurant pas encore dans la couche JNI de SWT, vous devez toujours vous rappeler que vous pouvez rapidement prototyper des choses avec JNA . Lorsque le prototype JNA est utilisé, vous pouvez soit étendre l’interface native de SWT, soit créer votre propre couche JNI distincte (c’est une approche qui m’a bien fonctionné à plusieurs reprises avec les widgets SWT Carbon / Cocoa).

Je recommande de créer un shell sans Trim, comme suit:

new Shell (display, SWT.NO_TRIM);

Ceci créerait un shell sans la barre de titre. Vous pouvez ensuite créer vos propres boutons Fermer / Réduire / Agrandir.

Voici un exemple qui génère une seule barre de progression sans l’activité Barre de titre.

entrer la description de l'image ici

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;

public class ProgressBarGui {

    Display display;
    Shell shell;

    public static void main (String [] args) {
        final Display display = new Display ();
        final Shell shell = new Shell (display, SWT.NO_TRIM);


        //Something to put into shell.
        shell.setLayout (new FormLayout ());

        ProgressBar proBar = new ProgressBar (shell, SWT.SMOOTH);
        proBar.setSelection (50);
        FormData progBarData = new FormData (100, 20);
        progBarData.top = new FormAttachment (0);
        progBarData.left = new FormAttachment (0);
        proBar.setLayoutData (progBarData);

        //recompute shell's size and position to fit widget.
        shell.pack ();

        shell.open ();
        while (!shell.isDisposed ()) {
            if (!display.readAndDispatch ())
                display.sleep ();
        }
        // region.dispose();
        display.dispose ();
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top