Как реализовать Google-Chrome-подобную строку заголовка для приложения Java SWT - PullRequest
8 голосов
/ 27 октября 2009

alt text

Я унаследовал разработку приложения Java / SWT, работающего только в Windows. Один из запросов к функциям, который мне нужен, - это строка заголовка типа Google Chrome вместо строки заголовка окон SWT. Вкладки приложения отображаются на том же уровне, что и кнопки управления окном.

Насколько я понимаю, мне нужно:

  • написать виджет Windows, способный отображать пользовательский вид и управлять вкладками в отличие от меню.
  • выставить виджет Windows как dll для использования в Java через JNI
  • написать собственный виджет SWT, чтобы обернуть его и открыть интерфейс управления вкладками.

У меня большой опыт программирования на Java, программирования на GUI с использованием Swing / AWT и программирования на C # без использования GUI. Программирование Windows GUI и SWT являются новыми для меня, поэтому я не уверен, с чего начать. Лучшее, что я нашел на данный момент, это статья 2001 года о написании собственного SWT-виджета .

Моя самая большая неизвестность - лучший способ реализовать пользовательское окно приложения Windows.

Ответы [ 3 ]

8 голосов
/ 03 декабря 2009

Вы можете создать экземпляр Shell без флага TITLE, а затем вручную отобразить вкладки, похожие на Google Chrome. Таким образом, вы можете даже создать непрямоугольные окна

2 голосов
/ 17 апреля 2010

при работе с вещами, которые еще не находятся в слое JNI SWT, вы всегда должны помнить, что вы можете быстро создавать прототипы вещей с помощью JNA . При создании прототипа JNA вы можете либо расширить собственный интерфейс SWT, либо создать свой собственный отдельный слой JNI (этот подход хорошо работал несколько раз при работе с виджетами SWT Carbon / Cocoa)

0 голосов
/ 18 декабря 2014

Я рекомендую создать оболочку без трима, например:

new Shell (display, SWT.NO_TRIM);

Это создаст оболочку без строки заголовка. Впоследствии вы можете сделать свои собственные кнопки закрытия / сворачивания / увеличения.

Вот пример, который порождает одиночный индикатор выполнения без бизнеса строки заголовка.

enter image description here

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 ();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...