2

この完全な例を使用して、Aero Glass にテキストを描画できました。レンダリングはまったく問題ありませんが、視覚的な問題があります。テキストの配置側でグローがクリップされます。

ここに画像の説明を入力

参考までに、テキスト形式は次のように定義されています。

  Dim uFormat As Integer = TextFormatFlags.NoPrefix Or TextFormatFlags.WordBreak Or _
            TextFormatFlags.TextBoxControl Or TextFormatFlags.EndEllipsis

これは修正できますか?

4

1 に答える 1

4

このでは、デフォルトでテキストの中央揃えが使用されています。使用する形式 (NoPrefix|WordBreak|TextBoxControl|EndEllipsis) は、既定では左揃えです。したがって、グローのクリッピングを修正するには、グローの境界を拡張する必要があります。
修正したサンプルは次のとおりです。

public void DrawTextOnGlass(IntPtr hwnd, String text, Font font, Rectangle bounds, int glowSize){
//...
    RECT glowRect = new RECT();
    RECT textRect = new RECT();

    glowRect.left = bounds.Left - glowSize;
    glowRect.right = bounds.Right + glowSize;
    glowRect.top = bounds.Top - glowSize;
    glowRect.bottom = bounds.Bottom + glowSize;

    textRect.left = glowSize;
    textRect.top = glowSize;
    textRect.right = glowRect.right - glowRect.left;
    textRect.bottom = glowRect.bottom - glowRect.top;
//...
    int uFormat = (int)(TextFormatFlags.NoPrefix
    | TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl | TextFormatFlags.EndEllipsis);
//...
    DrawThemeTextEx(renderer.Handle, Memdc, 0, 0, text, -1, uFormat, ref textRect, ref dttOpts);
    BitBlt(destdc, glowRect.left, glowRect.top, 
        glowRect.right - glowRect.left, 
        glowRect.bottom - glowRect.top, 
        Memdc, 0, 0, SRCCOPY);
//...    
}
于 2011-11-06T20:50:26.310 に答える