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

指定矩形區域內旋轉顯示文字:DrawRotatedText 函式實作

     編輯:關於VC++

提供一個實用函式,在指定矩形範圍內以任意角度旋轉繪製文字,支援裁切與不透明背景選項。

函式原型與參數


void DrawRotatedText(CDC* pDC, const CString str, CRect rect,
    double angle, UINT nOptions);
  • pDC:裝置環境指標
  • str:顯示文字
  • rect:顯示範圍矩形
  • angle:旋轉角度(度數)
  • nOptions:ExtTextOut 旗標(ETO_CLIPPED、ETO_OPAQUE)

完整實作代碼


void DrawRotatedText(CDC* pDC, const CString str, CRect rect,
    double angle, UINT nOptions) {
    // 角度轉弧度
    double pi = 3.141592654;
    double radian = pi * 2 / 360 * angle;

    // 取得文字尺寸與中心點
    CSize textSize = pDC->GetTextExtent(str);
    CPoint center(textSize.cx / 2, textSize.cy / 2);

    // 計算旋轉後中心點偏移
    CPoint rCenter(
        long(cos(radian) * center.x - sin(radian) * center.y),
        long(sin(radian) * center.x + cos(radian) * center.y)
    );

    // 設定文字對齊與背景模式
    pDC->SetTextAlign(TA_BASELINE);
    pDC->SetBkMode(TRANSPARENT);

    // 繪製旋轉文字
    pDC->ExtTextOut(
        rect.left + rect.Width() / 2 - rCenter.x,
        rect.top + rect.Height() / 2 + rCenter.y,
        nOptions, &rect, str, NULL
    );
}

使用範例


// 在矩形 (100,100,300,300) 內,逆時針旋轉 15 度繪製文字
DrawRotatedText(pDC, "VC知識庫", CRect(100,100,300,300), 15, ETO_CLIPPED);

原理解析

  • 以文字幾何中心為旋轉樞紐,計算旋轉後中心點相對原位置的偏移。
  • TA_BASELINE 設定基線對齊,配合 ExtTextOut 精確控制輸出位置。
  • nOptions 可控制是否裁切矩形外像素(ETO_CLIPPED)與是否填充不透明背景(ETO_OPAQUE)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved