gpt4 book ai didi

c# - 如何在 .NET 中调用 DrawThemeTextEx

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:36 25 4
gpt4 key购买 nike

我需要在 Vista/七玻璃窗中写一个带有发光的文本,我正在尝试调用 API 在那里写一些文本。我检查了一个很棒的sample在 CodeProject 中,但问题是我使用的是 .NET 1(请不要问 :-)

我需要将以下 .NET 2 代码转换为 PInvoke、.NET 1 代码。

// using System.Windows.Forms.VisualStyles
VisualStyleRenderer renderer = new VisualStyleRenderer(
VisualStyleElement.Window.Caption.Active);

// call to UxTheme.dll
DrawThemeTextEx(renderer.Handle,
memoryHdc, 0, 0, text, -1, (int)flags,
ref textBounds, ref dttOpts);

VisualStyleRenderer 在 .NET 1 中不存在,所以我需要以其他方式获取 renderer.Handle

最佳答案

定义 OpenThemeData API 和 DrawThemeTextEx,以及一些必需的结构和常量:

    [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
private static extern IntPtr OpenThemeData(IntPtr hwnd, string pszClassList);

[DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
private extern static Int32 DrawThemeTextEx(IntPtr hTheme, IntPtr hdc, int iPartId, int iStateId, string pszText, int iCharCount, uint flags, ref RECT rect, ref DTTOPTS poptions);

[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}

[StructLayout(LayoutKind.Sequential)]
private struct DTTOPTS
{
public int dwSize;
public int dwFlags;
public int crText;
public int crBorder;
public int crShadow;
public int iTextShadowType;
public int ptShadowOffsetX;
public int ptShadowOffsetY;
public int iBorderSize;
public int iFontPropId;
public int iColorPropId;
public int iStateId;
public bool fApplyOverlay;
public int iGlowSize;
public IntPtr pfnDrawTextCallback;
public IntPtr lParam;
}

// taken from vsstyle.h
private const int WP_CAPTION = 1;
private const int CS_ACTIVE = 1;

然后,这样调用它:

IntPtr handle = OpenThemeData(IntPtr.Zero, "WINDOW");
DrawThemeTextExt(handle, hdc, WS_CAPTION, CS_ACTIVE, ...)

WS_CAPTION 和 CS_ACTIVE 值分别匹配 .NET 2 的 Caption 和 Active。值在此处正式描述:Parts and States

关于c# - 如何在 .NET 中调用 DrawThemeTextEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com