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

VC++ 滑鼠控制與事件處理基礎實作

     編輯:關於VC++

前言

本文示範如何在 Win32 SDK 環境下,透過視窗程序處理滑鼠訊息,實現滑鼠座標追蹤、按鍵狀態偵測、自訂游標切換與雙擊繪圖等基本功能。程式碼結構清晰,適合初學者理解 Windows 訊息機制與 GDI 繪圖基礎。

程式架構概覽

  • 視窗類別註冊 (ckzc):設定支援雙擊 (CS_DBLCLKS)、載入圖示與游標、註冊類別 MouseWClass。
  • 視窗建立 (ckcj):建立標題為「我的滑鼠---cnscom」的重疊視窗並顯示。
  • 訊息迴圈 (WinMain):標準 GetMessage/DispatchMessage 迴圈。
  • 視窗程序 (WndProc):核心邏輯,處理 WM_CREATE、WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_RBUTTONDOWN、WM_LBUTTONDBLCLK、WM_RBUTTONDBLCLK、WM_PAINT、WM_DESTROY 等訊息。

關鍵技術點解析

1. 滑鼠座標與按鍵狀態擷取

POINT ptMouse;
ptMouse.x = LOWORD(lParam);  // 水平座標
ptMouse.y = HIWORD(lParam);  // 垂直座標
DWORD fwKeys = wParam;       // 按鍵與鍵盤修飾鍵組合

2. 區域判斷與游標切換

預先定義兩個矩形區域 rect1、rect2,當滑標進入區域時切換為自訂游標 (RCCURSOR):

if (PtInRect(&rect1, ptMouse) || PtInRect(&rect2, ptMouse))
    SetCursor(hCursorPen);

3. 視窗標題即時顯示滑鼠資訊

使用 wsprintf 格式化座標與按鍵狀態 (MK_CONTROL, MK_SHIFT, MK_LBUTTON, MK_RBUTTON),再呼叫 SetWindowText 更新標題列。

4. 雙擊時在客戶區繪製座標文字

左鍵雙擊顯示紅色、右鍵雙擊顯示藍色,使用 GetDC/TextOut/ReleaseDC 即時繪製。

5. 繪圖資源管理

WM_CREATE 載入游標與位圖資源,WM_PAINT 使用 BitBlt 繪製太陽/月亮圖示,WM_DESTROY 釋放 hSun/hMoon 並發送 PostQuitMessage。

程式碼片段:視窗程序核心

LRESULT APIENTRY WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    // ... 變數宣告 ...
    switch(message)
    {
        case WM_CREATE:
            // 初始化矩形區域、載入自訂游標
            break;
        case WM_LBUTTONDOWN:
        case WM_RBUTTONDOWN:
        case WM_MOUSEMOVE:
            // 座標擷取、區域判斷、游標切換、標題列更新
            break;
        case WM_LBUTTONDBLCLK:
        case WM_RBUTTONDBLCLK:
            // 取得 DC、設定顏色、輸出座標文字
            break;
        case WM_PAINT:
            // 雙緩衝繪製位圖
            break;
        case WM_DESTROY:
            // 釋放資源、結束程式
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

總結

此範例涵蓋了 Win32 滑鼠程式設計的核心要素:訊息處理、座標運算、區域測試、游標管理、GDI 繪圖與資源釋放。初學者可由此延伸實作更複雜的滑鼠互動應用。

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