可拖动的HTML窗口

本示例可参考示例文件"CaseStudy\WebViewer\调用Foxtable对象.Table"的窗口"可拖动HTML窗口"。

纯HTML窗口因为没有窗口边框和标题,所以默认无法拖动。

现在我们介绍一个不用编码就能实现拖动纯HTML窗口的方法,过程很简单:

1、开启WebViewer的非客户区支持:

wv.CoreWebView2.Settings.IsNonClientRegionSupportEnabled = True '开启非客户区支持

2、窗口的标题栏元素样式加上:

-webkit-app-region: drag;

窗口标题栏的按钮,例如关闭按钮加上样式:

-webkit-app-region: no-drag;

写一行代码,设置两个样式,即可实现窗口拖动的功能。

示例

AfterLoad事件代码:

'''Async
e.Form.BaseForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
'去掉窗口边框
Dim
wv As WebViewer = e.Form.Controls("WebViewer1").WebViewer
Await
wv.EnsureCoreWebView2Async(Nothing)
wv.CoreWebView2.AddHostObjectToScript(
"frm", e.Form) '注入当前窗口
wv.CoreWebView2.Settings.IsNonClientRegionSupportEnabled =
True '开启非客户区的支持
'
测试页面
Dim
html As String = <![CDATA[
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>
HTML窗口拖动演示</title>
    <style>
        body { margin:0; font-family:'Segoe UI', Arial, sans-serif; overflow:hidden; }
        #title-bar {
            height:40px; background:#f0f0f0; color:#1a1a1a;
            display:flex; align-items:center; justify-content:space-between;
            padding:0 12px; border-bottom:1px solid #e0e0e0;
            -webkit-app-region: drag; cursor:move;
        }
        #close-btn {
            width:28px; height:28px; border:none; border-radius:4px;
            background:transparent; color:#1a1a1a; font-size:16px;
            cursor:pointer; -webkit-app-region: no-drag;
        }
        #close-btn:hover { background:rgba(0,0,0,0.1); }
    </style>
</head>
<body>
    <div id="title-bar">
       
可拖动的窗口标题栏
        <button id="close-btn" onclick="closeForm()">×</button>
    </div>
    <script>
        const frm = window.chrome.webview.hostObjects.sync.frm;
        function closeForm() { frm.CloseAsync(); }
    </script>
</body>
</html>
]]>
.Value
wv.NavigateToString(html)
'打开测试页面

提示

我们也用纯js代码实现了一个可以拖动的HTML窗口,可以参考窗口“可拖动HTML窗口js版本”,普通用户没必要研究的。


本页地址:http://www.foxtable.com/webhelp/topics/6272.htm