移动网上营业厅查询通话记录,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的拖拽元素的原理一样的
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论