转:http://www.cnblogs.com/qilinzhi/archive/2008/04/19/1160977.html

 

 在Windows CE上的Form可以控制它的大小,但是不能像winform上的窗体一样随意拖动,并且当控制Form大小后Form只会显示其工作区,而不会显示它的caption。
    为了实现窗体拖动,我们可以使用模拟的方式实现,用鼠标的事件来模拟拖动。最下面有示例代码下载。
    
    为了实现可以拖动的窗体,首先要为窗体做如下设置:
    将要拖动的Form的如下属性全部设为false
    ControlBoxMinimizeBoxMaximizeBox
    将FormBorderStyle设为FormBorderStyle.None
    这样才能使窗体以自定义的大小显示。

    由于浮动的窗体不会显示caption,所以我们要自己模拟一个capting,首先我们写一个继承于Panel的类TitleBarPanel,用作captiong,代码如下:

 1Windows Mobile上实现可拖动的窗口public class TitleBarPanel : System.Windows.Forms.Panel
 2    }

其中有一个Label用于caption显示的标题。
mouseDown属性用于表示鼠标是否处于按下状态。
该类重写了OnMouseDown,OnMouseMove,OnMouseUp事件,用于实现拖动。
在MouseDown事件触发的时候,将当olePoint设为当前点,并将包含该标题的窗体的moving属性设为true。
FloatingDialog的代码在下面。
当MouseMove事件触发时,如果鼠标是按下状态,就计算出位移量dx,dy,并将窗体的位置加上算出的偏移量。接着调用Refresh方法刷新窗体,使窗体触发OnPaint方法重画。
OnMouseUp触发时,将mouseDown设为false,并将窗体的moving属性设为false,并刷新窗体。


为了实现可拖动的窗体,我写了一个基类FloatingDialog,只要继承于该类的窗体即可实现拖动。代码如下:

Windows Mobile上实现可拖动的窗口public class FloatingDialog: Form
    }

该类中有三个属性,titlePanel, blackPen, moving.
titlePanel即为前面写的TitleBarPanel类,为窗体的标题。
由于窗体浮动显示的时候是没有边框,所以要自己画一个边框上去,balckPen就是用来画边框的。
moving用于表示窗体是否在移动。
该类重写了OnPaint事件,用于画边框。

剩下的工作就是添加一个FloatingForm窗体,并继承于FloatingDialog类,
在主Form中调用如下方法:

Windows Mobile上实现可拖动的窗口public void AddFloatingForm()
        }

即可实现FloatingForm拖动

示例代码:下载

相关文章: