很多搜索和研究之后,我找不到任何答案。 我将非常感激,可以帮助我的人。
在SWT的java,我想我的窗口是不可调整大小的,所以我定义它是这样的:
shell = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN);
但后来我想改变它是可调整大小的(比如我点击一个按钮后)。 我怎样才能改变上飞壳的风格?
很多搜索和研究之后,我找不到任何答案。 我将非常感激,可以帮助我的人。
在SWT的java,我想我的窗口是不可调整大小的,所以我定义它是这样的:
shell = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN);
但后来我想改变它是可调整大小的(比如我点击一个按钮后)。 我怎样才能改变上飞壳的风格?
你不能改变一个风格Shell
一旦被创建,所以你不能直接这样做。
你可以做的是创建一个新的Shell
(及其所有内容)与所需的样式,并设置其边界是相同的旧Shell
,然后关闭老贝。 Eclipse一样,这个时候它要的工具提示窗口转换到一个正常的窗口。
如果您的Windows专门开发,可以用非纯SWT代码(非便携式)实现这一目标。 有没有明显的毛刺,用再抚养控件(参见没有问题这个bug ,例如)。 只有resizable属性被改变。 下面是摘录:
public static void main(String[] args) {
final Display display = new Display();
Shell shell = new Shell(display);
final int style = OS.GetWindowLong(shell.handle, OS.GWL_STYLE);
OS.SetWindowLong(shell.handle, OS.GWL_STYLE, style & ~0x00040000);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
编辑:简单功能的使用方法:
private static final int WS_SIZEBOX = 0x00040000;
public static void setResizable(Shell shell, boolean resizable) {
final int style = OS.GetWindowLong(shell.handle, OS.GWL_STYLE);
final int newStyle = resizable ? style | WS_SIZEBOX : style & ~WS_SIZEBOX;
OS.SetWindowLong(shell.handle, OS.GWL_STYLE, newStyle);
}
public static boolean isResizable(Shell shell) {
final int style = OS.GetWindowLong(shell.handle, OS.GWL_STYLE);
return (style & WS_SIZEBOX) != 0;
}