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

CChart 圖表教學第八課:手動訊息處理實現互動功能

     編輯:關於C語言

透明化訊息處理機制

第三課曾簡述 CChart 互動功能,本課深入剖析其底層運作,採用手動訊息處理方式,讓開發者完全掌控繪圖流程。

專案建立與核心差異

步驟 1-5 與第一課相同(建立 Lesson08、複製庫檔案)。關鍵差異在步驟 7:

static CChart chart;  // 直接定義 CChart 而非 CChartWnd

這是核心變化:CChart 為核心繪圖類,不包含訊息處理包裝,需自行處理視窗訊息。

繪圖初始化代碼

case WM_CREATE:
    chart.SetType(kTypeXY);
    chart.AddPoint2D(-3.0, 9.0);
    chart.AddPoint2D(-2.0, 4.0);
    chart.AddPoint2D(-1.0, 1.0);
    chart.AddPoint2D(0.0, 0.0);
    chart.AddPoint2D(1.0, 1.0);
    chart.AddPoint2D(2.0, 4.0);
    chart.AddPoint2D(3.0, 9.0);
    chart.SetTitle(_T("另一個 CChart 程序!"));
    break;

省去 GetChart() 呼叫,直接操作 chart 物件。

繪圖回調與防閃爍

case WM_PAINT:
    // 原有 DrawText 註解或刪除
    chart.OnDraw(hdc, rt);
    break;

case WM_ERASEBKGND:
    return 0;  // 防止背景重繪閃爍

手動訊息分派實現互動

將關鍵訊息轉交 CChart::Interactive 處理:

case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
case WM_MOUSEMOVE:
case WM_CONTEXTMENU:
case WM_KEYDOWN:
case WM_SIZE:
case WM_ERASEBKGND:
    chart.Interactive(hWnd, message, wParam, lParam);
    break;

執行後滑鼠互動功能完整恢復,效果與第一課完全一致。

互動效果

架構理解

CChartWnd 實際上是包含訊息處理的 CChart 包裝類。手動處理方式雖多寫幾行代碼,但靈活度更高,便於整合至既有架構。

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