有请各位高手:问个Delphi中记录类型的问题(0分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
我在查TMessage帮助时,发现:
type
TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;
这里的TMessage记录是不是有两中:
TMessage = packed record
Msg: Cardinal;
WParam: Longint;
LParam: Longint;
Result: Longint;
end;
与TMessage = packed record
Msg: Cardinal;
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word;
end;这两种?
但我不知何时取第一个,何时取第二个?是不是与case Integer of有关?
我想请教一下:这里的Integer取0还是取1是与什么有关的?谢谢。
 
本来想帮你,
可查了半天帮助也不是很明白。 :(
我猜(猜!):
tmessage中第二个参数是系统保留字,它决定后面的参数格式。
如果不求甚解的话,你就直接用就行了,管这些干啥。
//可怜的孩子
 
此数据机构被称为联合型记录,在C language 叫 unino
存取结构为

msg + wparam + lparam +result
wparamhi,wparamlo+ LParamLo, LParamHi 。。。


wparamhi为 wparam high bit 占在wparam的高位
wparamlo 为 wparam low bit 占在wparam的低位

之所以要如此定义,应为要是要取wparam,有时只要wparam的低位或高位
如wint所说。
如果要取wparam ,就yourrecord.wparam
如果要取wparamhi ,就yourrecord.wparamhi




 
>>>>>>>>>这里的TMessage记录是不是有两中:

不定义成两中,为了代码紧抽

>>>>>>>>一个,何时取第二个?是不是与case Integer of有关?

决定你的应用,在消息处理中,有时要高位,地位,有时要完整。

--------------
关于数据结构类型,可产靠《数据结构》


 
就是不明白那个INTEGER是从哪里蹦出来的。。。。
 
这个叫变体记录,就是根据那个 integer 的值来确定下面的参数使用
哪个,这个 integer 不用变量,只写就可以了,
这样写只是为了方便使用,或者根据一个值来定义不同的域。

 
你无须对integer作出选择,你只要用你想用的就行,
正如你所说,TMESSAGE就等于那两个记录,随便用那一个都行,win32多用前者.
请注意后二者的字节大小是相同的,详细情况,请参见charlie calvert 的
<delphi2编程大全>一书.
 
接受答案了.
 
后退
顶部