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

改造 CRectTracker 實現 QQ 風格截圖:解決閃爍、訊息傳遞、自訂游標與顏色

     編輯:關於VC++

三大改造重點

1. 提示視窗文字閃爍優化

僅更新 RGB 數值部分,避免全文重繪:

void CMyDlg::UpdateRGBTip(COLORREF clr) {
    CString str; str.Format(L"(%d,%d,%d)", GetRValue(clr), GetGValue(clr), GetBValue(clr));
    if (str == m_oldStr) return;
    int len = m_edit.LineLength(6); // 第 6 行長度
    m_edit.SetSel(20, len + 6);     // 選中舊 RGB 文字
    m_edit.ReplaceSel(str);         // 替換
    m_oldStr = str;
}

2. TrackRubberBand 內部訊息迴圈補發 DispatchMessage

MFC 原始碼 TrackHandle 中 GetMessage 後直接 switch,導致主視窗收不到訊息。複製 TRCKRECT.CPP 至專案,在 GetMessage 後插入:

DispatchMessage(&msg); // 讓主視窗也能處理 WM_MOUSEMOVE 等

3. 自訂選框顏色與游標

  • 新增全域畫筆 _afxBlackSolidPen,Construct() 中建立
  • 新增 SetRectColor(COLORREF) 修改畫筆顏色
  • Draw() 中根據 m_nStyle 選用點線/實線畫筆
  • 調整控點繪製:pDC->FillSolidRect(rect, m_rectColor)
  • 新增 SetResizeCursor(HCURSOR) 覆寫調整時游標

類別遷移步驟

  1. 從 AFXEXT.H 複製 CRectTracker 宣告為 CMyTracker
  2. 從 TRCKRECT.CPP 複製實作,移除 DEBUG 相關代碼
  3. 內聯建構函數改為普通實作呼叫 Construct()
  4. 專案中直接使用 CMyTracker,不影響系統 MFC

效果展示

QQ截圖效果

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