タイトルバーのないシェルを移動できるようにする

マウスダウンしたらタイトルバーでマウスダウンしたように見せかけます。

package swt.window.move;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wb.swt.SWTResourceManager;

public class NoTitleBarWindowMove {

	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display, SWT.RESIZE);
		shell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GRAY));
		shell.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				OS.ReleaseCapture();
				OS.SendMessage(shell.handle, OS.WM_NCLBUTTONDOWN, OS.HTCAPTION, 0);
			}
		});

		shell.setSize(256, 128);
		shell.setLayout(new FillLayout(SWT.HORIZONTAL));
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
		display.dispose();
	}
}

タイトルバーなくてもリサイズ可にしてると…

リサイズありにするとタイトルバーっぽい部分が残る。
NO_TRIMにするとこの部分も消えるけど、リサイズが出来なくなる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

17 + 12 =