| 類型 | 代表 | 特徵 | 技術重點 |
|---|---|---|---|
| 直角座標式 | Visio, VS WinForm 設計器 | 元素以 XY 絕對座標定位、可重疊、拖曳調整大小位置 | 繪圖最佳化、圖層管理、8 點控制點、矩形覆蓋運算、雙緩衝 |
| 流式排版式 | Word, VS WebForm 設計器 | 元素依序流動排版、不重疊、支援鍵盤輸入、游標管理 | 版面配置引擎、斷行演算法、游標定位、增量佈局 |
本文聚焦直角座標式設計器。
RefreshView/RefreshSize)、滑鼠/鍵盤事件 (HandleMouseDown/Move/Up)、樹狀結構維護 (Parent/Items/OwnerDocument)、可編輯介面 (ILabelEditable)。DesignRectangleElement (矩形基底)、DesignLineElement (線段)、DesignElementContainer (容器)、DesignCaptionContainer (標題列容器)、DesignTextElement (文字)、DesignTextElementExt (進階排版)、DesignTableElement (表格/儲存格)、DesignImageElement (圖片, IDisposable) 等。<Prop>Value</Prop>) 優於屬性法,利於多行文字、擴充性、閱讀性。XmlDocument/XDocument 載入,再映射建立 DOM 樹。Control.OnPaint → 取得 Graphics + ClipRectangle。DesignDocument.RefreshView(g, clipRect) 初始化、遍歷樹狀結構。visibleRects[] 給元素。RefreshView(g, visibleRects) 僅繪製可見區域內容。DoubleBuffered=true 或手動 BufferedGraphics)。Graphics.Transform = Matrix,滑鼠座標須反向轉換。UserControl,DoubleBuffered=true。OnMouseDown/Move/Up → 座標轉換 (螢幕→文件→元素局部) → 委派給 CurrentElement.HandleMouseXxx。SystemInformation.DragSize 門檻過濾誤觸。ILabelEditable,動態顯示 TextBox 覆蓋元素位置。LoadXml/ SaveXml 由衍生類實作。DesignDocument 實作 IDispatch 或暴露給 Jint/IronPython。Canvas + Adorner + VisualTree 原生支援縮放、命中測試、動畫、向量繪圖。Canvas API / SVG + Fabric.js、Konva.js、JointJS 成熟庫。WYSIWYG 設計器是圖形學、資料結構、事件驅動、序列化、擴充架構綜合體現。掌握 DOM 設計、繪圖最佳化、座標轉換、拖曳邏輯四大核心,即可建構穩健可擴充的設計器基礎設施。