当前位置: 移动技术网 > IT编程>开发语言>.net > c#(wpf)中WebBrowser拖动来移动窗口,改变窗口位置

c#(wpf)中WebBrowser拖动来移动窗口,改变窗口位置

2019年01月12日  | 移动技术网IT编程  | 我要评论

移动网上营业厅查询通话记录,80端口,new divide 伴奏

前言

wpf中的webbrowser相比之前的winform阉割了不少东西,也增加了不少东西,但是msdn对wpf也没有较好的文档

webbrowser可以说是一个.net控件,相对于wpf中的控件,不在同一线程,它们不可重叠,相当于两个独立的窗口(window)

正题

如上图所示,使用前端技术来实现的页面,因为要用到轮播,才用的webbrowser,wpf做这些很麻烦,但是无边框窗体,如果我们要拖动窗口,如果是wpf原生控件的话,很简单,给控件添加事件,然后

        private void window_mousemove(object sender, mouseeventargs e)
        {
            if (e.leftbutton == mousebuttonstate.pressed)
            {
                try
                {
                    this.dragmove();
                }
                catch { }
            }
        }

但是如果想要通过拖动webbrowser来移动窗口这样是不行,我们需要通过js的拖拽事件响应到c#端进行窗口定位
js拖拽代码

    var drag = function () {
        var drag = function (e) {
            e = e || window.event;
            window.external.drag();
        }

        var dragend = function () {
            document.onmouseup = null;
            document.onmousemove = null;
            window.external.dragend();
        }

        var dragstart = function (e) {
            e = e || window.event;
            document.onmouseup = dragend;
            document.onmousemove = drag;
            window.external.dragstart();
            return false;
        }
        document.onmousedown = dragstart;
    }

c#端只需要接收到动作然后根据鼠标位置设置窗口的position即可

        public void dragstart()
        {
            point p = new point();
            getcursorpos(out p);
            this.offset.x = p.x - instance.left;
            this.offset.y = p.y - instance.top;
        }

        public void drag()
        {
            point p = new point();
            getcursorpos(out p);
            instance.left = p.x - this.offset.x;
            instance.top  = p.y - this.offset.y;
        }

        public void dragend()
        {
            this.offset.x = 0;
            this.offset.y = 0;
        }

这里的point是使用了结构体

    [structlayout(layoutkind.sequential)]

    public struct point
    {
        public int x;
        public int y;

        public point(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        public override string tostring()
        {
            return ("x:" + x + ", y:" + y);
        }
    }

getcursorpos 是调用了user32.dll的getcursorpos来获取鼠标位置

        [dllimport("user32.dll")]
        public static extern bool getcursorpos(out point pt);

具体这些算的,就比较简单了,跟js的拖拽元素的原理一样的

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网