86 lines
3.7 KiB
C#
86 lines
3.7 KiB
C#
// ============================================================
|
|
// 文档区停靠窗口:CAD 扒图工作区
|
|
// = 独立 cadbt.exe 主窗口的完整布局原样搬入:
|
|
// 左 报价工具(CadQuoteWindow,内嵌 Form3 报价三表)
|
|
// 中 CAD 查看器(CadViewerWindow,WebView2 网页 CAD)
|
|
// 内部用 Smart DockSurface 承载(与独立版 MainForm 相同的停靠结构,
|
|
// 内部布局可拖拽);F1/F2/F3 全局消息过滤器随窗口启停。
|
|
// ============================================================
|
|
using System;
|
|
using System.Windows.Forms;
|
|
|
|
namespace 成套报价软件
|
|
{
|
|
/// <summary>CAD 扒图工作区(DockState.Document):报价三表 + 网页 CAD 查看器。</summary>
|
|
public class Cad扒图窗口 : WeifenLuo.WinFormsUI.Docking.DockContent
|
|
{
|
|
private readonly F1MessageFilter _f1Filter = new F1MessageFilter();
|
|
private CadQuoteWindow _quote;
|
|
private CadViewerWindow _viewer;
|
|
|
|
/// <summary>内嵌的报价界面(主窗口功能区按钮跨窗口调用用;未创建为 null)。</summary>
|
|
public MyApp.Form3 报价表单
|
|
{
|
|
get { return _quote != null ? _quote.报价表单 : null; }
|
|
}
|
|
|
|
public Cad扒图窗口()
|
|
{
|
|
Text = "CAD扒图";
|
|
TabText = "CAD扒图";
|
|
this.BackColor = System.Drawing.Color.White;
|
|
|
|
// 与独立版 MainForm.CreateDockWindows_dockSurface1 相同的内部结构
|
|
var dockSurface = new Smart.CustomComponents.DockSurface();
|
|
dockSurface.Dock = DockStyle.Fill;
|
|
Controls.Add(dockSurface);
|
|
dockSurface.EnsureDefaultTheme(); // 必须:Show 前保证有效主题
|
|
|
|
_quote = new CadQuoteWindow();
|
|
_quote.CloseButtonVisible = false;
|
|
_quote.TabText = "报价工具";
|
|
_quote.Text = "报价工具";
|
|
_quote.Show(dockSurface, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft);
|
|
|
|
_viewer = new CadViewerWindow();
|
|
_viewer.CloseButtonVisible = false;
|
|
_viewer.TabText = "CAD 查看器";
|
|
_viewer.Text = "CAD 查看器";
|
|
_viewer.Show(dockSurface, WeifenLuo.WinFormsUI.Docking.DockState.Document);
|
|
|
|
// ★ 全局 F1/F2/F3 过滤器:焦点在任何 WinForms 控件上都触发元件合并
|
|
// (焦点在网页时由网页端转发,两路都汇聚到 CadBridge.F*Requested)
|
|
Application.AddMessageFilter(_f1Filter);
|
|
FormClosed += (s, e) =>
|
|
{
|
|
Application.RemoveMessageFilter(_f1Filter);
|
|
// 显式关内部窗口:Form3 解绑桥事件、CAD 查看器停 node 服务
|
|
try { if (_quote != null && !_quote.IsDisposed) _quote.Close(); } catch { }
|
|
try { if (_viewer != null && !_viewer.IsDisposed) _viewer.Close(); } catch { }
|
|
};
|
|
}
|
|
|
|
/// <summary>把 F1/F2/F3 按键(0x70/0x71/0x72)转成 CadBridge 事件,不拦截按键本身。</summary>
|
|
private class F1MessageFilter : IMessageFilter
|
|
{
|
|
public bool PreFilterMessage(ref Message m)
|
|
{
|
|
const int WM_KEYDOWN = 0x0100;
|
|
if (m.Msg == WM_KEYDOWN && (int)m.WParam == 0x70)
|
|
{
|
|
try { CadBridge.RaiseF1(); } catch { }
|
|
}
|
|
else if (m.Msg == WM_KEYDOWN && (int)m.WParam == 0x71)
|
|
{
|
|
try { CadBridge.RaiseF2(); } catch { }
|
|
}
|
|
else if (m.Msg == WM_KEYDOWN && (int)m.WParam == 0x72)
|
|
{
|
|
try { CadBridge.RaiseF3(); } catch { }
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|