문제

alt text

Windows에서만 실행되는 Java/SWT 응용 프로그램의 개발을 상속했습니다. 범위가 필요한 기능 중 하나는 SWT Windows 제목 표시 줄 대신 Google-Chrome 유형의 타이틀 바입니다. 응용 프로그램의 탭은 창 제어 버튼과 동일한 수준으로 나타납니다.

내 이해는 다음을 필요로한다는 것입니다.

  • 메뉴와 달리 사용자 정의 모양을 렌더링하고 탭을 관리 할 수있는 Windows 위젯을 작성하십시오.
  • JNI를 통해 Java로 사용하기 위해 Windows 위젯을 DLL로 노출하십시오.
  • 사용자 정의 SWT 위젯을 작성하여 랩핑하고 탭 관리 인터페이스를 노출시킵니다.

Java 프로그래밍, Swing/AWT를 통한 GUI 프로그래밍 및 비 Gui C# 프로그래밍에 대한 많은 경험이 있습니다. Windows GUI 프로그래밍과 SWT는 나에게 새로운 것이므로 어디서부터 시작 해야할지 잘 모르겠습니다. 내가 지금까지 찾은 최고는 2001 년 기사입니다. 나만의 SWT 위젯 작성.

가장 큰 미지의 것은 사용자 정의 Windows 응용 프로그램 창을 구현하는 가장 좋은 방법입니다.

도움이 되었습니까?

해결책

제목 플래그없이 쉘 인스턴스를 작성한 다음 Google- 크롬 유사 탭을 수동으로 렌더링 할 수 있습니다. 이렇게하면 a를 만들 수도 있습니다 비 교정 창

다른 팁

SWT의 JNI 층에 아직없는 것들을 다룰 때는 항상 JNA. JNA 프로토 타입이 있으면 SWT의 기본 인터페이스를 확장하거나 자신의 별도의 JNI 레이어를 만들 수 있습니다 (SWT 탄소/코코아 위젯을 다룰 때 여러 번 저에게 잘 작동하는 접근 방식입니다).

같은 트림없이 쉘을 만드는 것이 좋습니다.

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

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top