我试图让SWT的DirectoryDialog打开,而没有在Windows上显示“Make new folder”button。 Windows'API支持这个,但不幸的是SWT不支持。
你可以在这里看到SWT的Windows实现: http : //kickjava.com/src/org/eclipse/swt/widgets/DirectoryDialog.java.htm
193行是魔法发生的地方。
lpbi.ulFlags = OS.BIF_NEWDIALOGSTYLE | OS.BIF_RETURNONLYFSDIRS | OS.BIF_EDITBOX | OS.BIF_VALIDATE;
我想将BIF_NONEWFOLDERBUTTON添加到标志(请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/bb773205(v=vs.85).aspx )。
我已经尝试了通过一个丑陋的reflection黑客,我添加BIF_NONEWFOLDERBUTTON到OS.BIF_NEWDIALOGSTYLE通过做一个按位或或静态字段。
不幸的是,这没有效果。 我假设这是因为Java内联(因为它是编译时间常量)。
因此我的问题是:如何在运行时修改第193行,使其包含这个常量?
我认为你可以做到这一点的唯一方法是制作自己的DirectoryDialog
副本并修改它。 我没有在Windows上尝试过,但在Mac OS X上可以使用类似的代码。
由于这个类使用内部类(特别是OS
类),所以这将违反Eclipse API接合规则 。 您的代码可能会因新版本中内部类的更改而中断。
该类还将特定于特定的操作系统和体系结构(Windows 32位或Windows 64位)。 这可以通过使用特定于操作系统和体系结构的插件或片段来管理。
我不认为这是可能的。 如果你能以某种方式访问lpbi
(例如,如果它是一个字段而不是本地变量),你可以做到这一点。 如果你有一个单独的应用程序,而不是一个Eclipse插件,你可以“修补”SWT,并在应用程序中包含修补的版本。