2008-04-05
工作小记
花了两天时间,把单煤层储量计算程序升级成了多地层体积计算程序,主要是界面功夫,核心库没有变化。现在的界面比上次的要复杂几倍,但是设计得还好,没有陷入RAD的事件处理陷阱中。原先的C++核心库不是为多地层设计的,在不修改API的情况下用于现在的程序虽然能工作,但有些冗余计算。如果要去修改库的话,真正的工作量还是在VB6这边,我的C++代码设计得很有弹性,可一旦修改了函数原型,又要在VB6中写一大堆代码,把数据搬来搬去,这种事做起来实在无聊。
这次又体会到VB6的几个不顺手的特性:
1. 不能把变长数组声明为类模块的公开成员
不能作为类模块的公开成员的东西还有很多,比如字符串。这很扯,那么多限制,VB6的类模块还有多大用处?本来想用它的封装功能,后来还是选择了struct。
2. 没有指针
我要交换两个结构的数据,其中的大头是动态数组。也许借助适当的SAFEARRAY的WIN32 API可以交换两个数组变量的“引用”(而非数组数据)?我不知道,我也没有用索引数组模拟指针的效果,现在就是直接交换数组数据。这么做虽然不至于影响用户界面的响应能力,但作为程序员,还是觉得这很罪恶,唯一的托辞是,给我多少钱,我就办多少事儿。
3. 语句表达能力弱
有时候在C里一行代码可以完成的事,在VB6里要用五六行。
这里的原因有一部分是语法层面上的,比如定义变量时不能初始化,没有+=运算符(重要的不是可以少写一遍变量名,而是那句代码可以作为表达式而非语句使用)等。
还有一部分原因是……语义?比如不对条件表达式进行短路求值。在C中,这么写是很普遍的:
if (index < 0 || list[index]...) ...
在VB6中,却得:
if index < 0 then
...
elseif list[index]... then
...
end if
4. 不直观的Combobox.Change/Click事件
无论是鼠标点击还是按上下方向键切换当前项目,都会触发Click事件——而不是Change事件。
Change事件的触发条件是:通过编程方式或界面输入设置其Text属性,修改ListIndex属性。
相比C#、C++,VB6简直就是个半成品,可是我却被限制只能用它,理想 & 现实?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下午安兴冲冲地打电话问我:你知不知道那个公司发给你的工资测算表中,还有一页是他们的工资等级表?
我没注意,只看到他们给我定的等级是试用C4转正C3。我以为C是部门类型,那样的话我进去之后,还有C2、C1两个等级的升级余地,两个太少了,也许有C0?
这个女人,我还没上班呢,就琢磨我的工资表了……听她一说才知道,我的位置是:
////
A1
A2
A3
A4
A5
B1
B2
B3
B4
B5
C1
C2
C3 <---- i'll be here... :(
C4
C5
D1
D2
D3
D4
D5
////



