首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

智慧連接線元件:模仿 Visio 靈活繪圖功能的 MFC 實作

     編輯:關於VC++

前言

Microsoft Visio 的智慧連接線功能極為好用,可手動調整且彈性高。本文分享一個自行開發的 CSmartLines 類別,實現同樣功能,可整合至 MFC Doc/View 架構專案中。

圖一:連接線效果展示

整合步驟

  1. 建立基於 Document/View 架構的 MFC 專案(單文件或多文件皆可)
  2. 將 SmartLines.h 加入專案
  3. 在需顯示連接線的 View 中包含標頭檔:
    #include "SmartLines.h"
  4. 複製 SmartLines.dll 與 SmartLines.lib 至專案目錄
  5. 專案設定 → Link → Input → Additional Dependencies 加入 SmartLines.lib
  6. 圖二:專案設定匯入庫

  7. 在 View 類別中新增成員變數:CSmartLines m_lines;
  8. 處理 WM_LBUTTONDOWN 訊息:
    void CTestSmartLinesView::OnLButtonDown(UINT nFlags, CPoint point)
    {
        m_lines.Track(this, point);
        CScrollView::OnLButtonDown(nFlags, point);
    }
  9. 處理 WM_SETCURSOR 訊息:
    BOOL CTestSmartLinesView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
    {
        if (m_lines.OnSetCursor(pWnd, nHitTest))
            return TRUE;
        return CScrollView::OnSetCursor(pWnd, nHitTest, message);
    }
  10. 覆寫 OnDraw 繪製連接線:
    void CTestSmartLinesView::OnDraw(CDC* pDC)
    {
        CTestSmartLinesDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        m_lines.Draw(pDC);
    }

功能特性

  1. View 建構函數預設初始化 6 條線,可任意增加,注意首尾座標一致性
  2. 水平線僅能上下移動,垂直線僅能左右移動
  3. 拖曳線段中點可移動整條線;拖曳端點可改變長度;拖曳兩線交會節點可同時改變兩線長度與位置

應用場景

適用於流程圖編輯器、組織架構圖、網路拓撲圖等需動態連接線的 MFC 應用程式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved