# cww 兄! 相信你看到我的答案会吓一跳, 因为很简单就做出来了...

Posted by Sephiroth on August 04, 1999 at 17:12:42:

In Reply to: 太难了 posted by cww on August 04, 1999 at 09:12:08:

我想有很多人都被事物的外表所蒙蔽了, 大家会认为 TabControl
有几个 Container 呢?
由始自终我都是认为所有的控制项只有一个 Container. 做出实验如下:
随便找几种不同的 TabControl lay 到 Form 上面, 最好有 3rd party 的
以便互相验证. 然后放几个不同的 Control 到不同的 Tab 上面, 假设我放了
一个 Text1 在 Tab1, 一个 Command1 在 Tab2, 然后切换页, Text1 一定
不会跑到 Tab2 去, 可是这时候请大家按一下 F4, 看看其它页的那些元件
位置, 结果你会发现其它页的元件 .Left 都变成负数....
这样答案就呼之欲出了吧!! 之前我也想过是不是放个 Picture Box 在上面
然后做 ZOrder, 结果发现 Label 就放不上去了. TabControl 其实
用 VB 还蛮好写的, 主要难是难在那些 Contain Controls 的管理上, 那要
如何知道别人是怎么管理的? 最简单的方法是用 UltraEdit 打开 *.frm
看看他们 PropertyPag 到底是怎么存的不就知道了.

这或许可称之为逆向思考吧! 原理是不是蛮简单的. 至于实作时, 必须去 SubClass
UserControl 的 WM_LBUTTONDOWN 这个讯息, 来做子元件的加入及删除.
或许将来弟的网页生出来时会放上去吧, 不过要先用这一招来赚钱说 :p

第二个问题, 打死你都不相信, 我也是在写 TabControl 时,突发奇想
然后猛找 MSDN, 看看有没有这种 API, 后来灵光一闪呼叫出 Spy++,
让你猜我要做什么?

用 Spy++ 把所有可当成 Container 的元件都测一遍, 发现它们都有 WS_CLIPCHILDREN
这个值(其实不用测, 用想的也早该想到了), 然后再用 GetWindowLong 去
做两次 AND 运算答案就出来了, 是不是比上一题更简单. 只是没有人想过
会有这种奇招罢了!

ps. 我已经找到徒弟了, 看来要好好的 "照顾照顾" 一番, 哈!!

Follow Ups: