windows程序设计 中有这段话:
typedef structure tagSCROLLINFO
{
UINT cbSize; //设为sizeof(SCROLLINFO)
UINT fMask;
...
...
}SCROLLINFO;一些结构也类似地将第一个字段定义为结构的大小.这样,以后的windows版本可以扩充结构而同时保持与以前的应用程序兼容.
这段话我是看懂了,但是到底怎么使结构扩充后保持兼容我不知道,能否给个具体的例子?
“以后的windows版本可以扩充结构而同时保持与以前的应用程序兼容” -- 我的理解是这样:
假设第一个版本是这样子的:(瞎猜的)
//version 1:
typedef structure tagSCROLLINFO
{
UINT cbSize; //设为sizeof(SCROLLINFO) = 24
UINT fMask;
int nMin;
int nMax;
UINT nPage;
int nPos;
}SCROLLINFO;
第二个版本为了处理拖动,增加了一个nTrackPos:
//version 2:
typedef structure tagSCROLLINFO
{
UINT cbSize; //设为sizeof(SCROLLINFO) = 28
UINT fMask;
int nMin;
int nMax;
UINT nPage;
int nPos;
int nTrackPos;
}SCROLLINFO;
注意:新增加的nTrackPos
是加在最后的。
注意:新增加的nTrackPos
是加在最后的。
注意:新增加的nTrackPos
是加在最后的。
(重要的事情要说三遍)
兼容:传给版本1的应用程序一个版本2的SCROLLINFO时,版本1的应用程序中,虽然是看不到nTrackPos
(版本1没有定义),但是由于前面的fMask等的位置没有变,版本1的应用程序也能正常跑起来。