首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC 雙游標固定相對位置實現:自訂游標繪製技巧

     編輯:程式設計綜合問答

需求

VC6.0 MFC 專案中,視窗同時顯示兩個游標,相對位置固定 (如偏移 20px, 20px),僅主游標具備互動功能,副游標為視覺輔助。

實現步驟

  1. 隱藏系統游標:SetCursor(NULL) 或載入透明游標資源。
  2. 載入自訂游標資源:兩個 .cur 檔,分別設為主/副游標。
  3. 捕獲滑鼠移動:在主視窗 OnMouseMove 中取得座標 (x, y)。
  4. 繪製副游標:在另一視窗 (或同視窗不同區域) 的 OnPaint / OnMouseMove 中,以 DrawIconEx(hdc, x+offsetX, y+offsetY, hCursorSub, ...) 繪製副游標。
  5. 雙緩衝防閃爍:建立相容 DC,先繪製背景再疊加游標,最後 BitBlt 到螢幕。

關鍵代碼片段

void CMyView::OnMouseMove(UINT nFlags, CPoint point) {
  // 主游標由系統自動處理 (若未隱藏)
  // 通知另一視窗重繪副游標
  pOtherView->SetSubCursorPos(point + CPoint(20, 20));
  pOtherView->Invalidate(FALSE);
}

void COtherView::OnPaint() {
  CPaintDC dc(this);
  if (m_subCursorPos != CPoint(-1,-1)) {
    DrawIconEx(dc.m_hDC, m_subCursorPos.x, m_subCursorPos.y, 
               m_hSubCursor, 0, 0, 0, NULL, DI_NORMAL);
  }
}

注意事項

  • 游標熱點需對齊,否則視覺偏移。
  • 跨視窗座標轉換用 ClientToScreen / ScreenToClient。
  • 高 DPI 環境下需啟用 DPI 感知,否則游標尺寸異常。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved