AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C++

C++ Builder 实现控件的拖动-停靠操作

51自学网 http://www.51zixue.net
5.2 实现控件的拖动-停靠操作

TWinControl的派生类可作为停靠点,而TControl的派生类可作为停放到停靠点的子窗口。例如,要在窗体的窗口左边界提供一个停靠点,可将一个面板排列到窗体左边界并使面板成为一个停靠点。当可停靠的控件被拖动到面板中并释放时,它们成为面板的子控件。

· 使窗口控件成为一个停靠点。
· 使控件成为一个可停靠子控件。
· 控制子控件如何被停放。
· 控制子控件如何取消停靠。
· 控制子控件如何响应拖动-停靠操作。

5.2.1 使窗口控件成为一个停靠点
要使窗口控件成为一个停靠点:
1) 把DockSite属性设为true。
2) 要使停靠点对象只在包含已停放的客户时显示,将其AutoSize属性设为true。当AutoSize为true时,停靠点尺寸保持为0,直到它接受一个被停放的子控件。然后它会调整大小以适应子控件。

5.2.2 使控件成为一个可停靠子控件
要使控件成为一个可停靠子控件:
1) 把DragKind属性设为dkDock。当DragKind为dkDock时,可将控件移动到一个新的停靠点中,或取消控件的停靠以使它变成浮动窗口。当DragKind为dkDrag(缺省)时,必须使用OnDragOver、OnEndDrag和OnDragDrop事件来实现拖动控件而开始的拖放操作。
2) 把DragMode设为dmAutomatic。当DragMode为dmAutomatic时,拖动(根据DragKind的值判断是拖放操作或停靠操作)会在用户开始使用鼠标拖动控件时自动初始化。当 DragMode为dmManual时,需调用BeginDrag方法来开始拖动-停靠(或拖放)操作。
3) 设置TWinControl的派生类的FloatingDockSiteClass属性,以指定它作为那些被取消停靠的浮动窗口的暂驻窗口。当控件没有在停靠点被释放时,一个这类的窗口控件被动态创建,同时,成为该可停靠子控件的父类。若这个可停靠子控件是TWinControl的派生类,则不需单独为它创建一个停靠点来暂驻控件,尽管可以为获得边界和标题栏而指定一个窗体。为了省略动态暂驻窗口,把控件的
FloatingDockSiteClass设为与控件的类一样,则它将变成一个没有父类的浮动窗口。

5.2.3 控制子控件如何被停放
当子控件在停靠点上方被释放时,停靠点会自动接受子控件。对于大多数控件来说,第一个被停放的子控件填满客户区,第二个被停放的子控件将客户区分隔为两个独立的区域等等。Page控件将子控件停放入新页中(若子控件为另一个Page控件则合并页)。

有三个事件允许停靠点进一步限制子控件如何停放:
 
 

上一篇:C++ Builder 处理控件中的文本  下一篇:C++ Builder 实现控件拖放操作