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

VC++ SetTextColor 返回值機制解析

     編輯:程式設計綜合問答

代碼片段

COLORREF clr = dc.SetTextColor(dc.GetBkColor()); // clr 為何是 0(黑色)?
dc.TextOut(..., m_strLine); // 用背景色輸出文字(不可見)
// ...
dc.SetTextColor(clr); // 恢復文字顏色為黑色

關鍵結論

CDC::SetTextColor(COLORREF crColor) 返回值是設置前的文字顏色,而非新設置的顏色。

執行流程

  1. dc.GetBkColor() 返回背景色(假設白色 0xFFFFFF)。
  2. dc.SetTextColor(白色) 將文字顏色設為白色,**返回值為之前的文字顏色**(默認黑色 0x000000),賦給 clr。
  3. TextOut 用白色文字在白色背景上繪製 → 不可見。
  4. SetTextColor(clr) 恢復文字顏色為黑色 → 後續繪製可見。

設計意圖

這是經典的「保存現狀 → 臨時修改 → 恢復現狀」模式,常用於橡皮筋選框、反色顯示等場景。MSDN 文檔明確說明:「返回值為先前的文字顏色」。

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