[疑难] 简单的DWT程序,简单的问题
popop
2008-09-24
初学DWT,先写了一个Hello world:
module popop.dwt.window; import dwt.DWT; import dwt.widgets.Button; import dwt.widgets.Display; import dwt.widgets.Label; import dwt.layout.FillLayout; import dwt.layout.RowLayout; import dwt.widgets.Shell; void main () { Display display = new Display; Shell shell = new Shell(display); shell.setText = "Hello DWT World"; shell.setLayout(new FillLayout()); Label lable=new Label(shell, 0); lable.setText("hello"); Button bt=new Button(shell, DWT.PUSH); bt.setText("This is a button"); shell.open; while (!shell.isDisposed) if (!display.readAndDispatch) display.sleep; display.dispose; } Descent+DSSS环境下程序正常编译并运行,但是我有几个疑问: 1. 编译出来的程序(选项: -L/SUBSYSTEM:windows:5 -L/rc:dwt -O -release) 太大,为2,781,212 bytes,有些无法忍受,尤其因为它只是一个Hello world. 有什么好办法能减少它的体积?Poseidon比它还小,是怎么做的? 2. 缺少 shell.setLayout(new FillLayout()); 这一句的话,只能出一个空窗口,SWT似乎不会这样哦。 3. new Label(shell, 0).setText("Hello DWT World"); 会被编译器认为语法非法,个人认为D语言完全应该支持这种风格的。 如上,请圈友们讨论一下。 |
|
betty_betty2008
2008-09-25
第1点俺认为是静态链接造成的吧;
第2点:不使用Layout时需设定shell 的Size or Location: shell.SetSize/shell.SetLocation; 第3点:D 支持如下语法: (new Button(shell,DWT.PUSH)).setText("Push me"); |
|
popop
2008-09-25
第二三点很好的解释了问题,谢谢。
betty_betty2008 写道 第1点俺认为是静态链接造成的吧;
gcc里面的编译链接选项 -ffunction-sections -fdata-sections -Wl,--gc-sections可以有效去除静态链接库中没有被程序调用的“死代码”,极大缩减生成的二进制文件的尺寸,但愿DMD/tango也可以这样。 |
|
ideage
2008-09-28
我发现DMD1.032后的文件都比较大了.1.031的要小些.当然,我直接用Win32Api.
|