如何在.NET中调用DrawThemeTextEx

2024-01-11

我需要在 Vista/7 玻璃窗中编写带有发光效果的文本,并且我正在尝试调用 API 来在那里编写一些文本。我已经检查了一个很棒的sample http://www.codeproject.com/KB/vista/textonglass.aspx在 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 匹配。值的官方描述如下:零件和状态 http://msdn.microsoft.com/en-us/library/bb773210.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在.NET中调用DrawThemeTextEx 的相关文章

  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 如何从 NSURLProtocol 内部获取请求 UIWebView

    我的应用程序使用 NSURLProtocol 的子类 应用程序中有多个 UIWebView 对于 NSURLProtocol 中实现的特定算法 我需要知道哪一个 UIWebView 发送请求 我的理解是 self client 返回的对象应
  • Shell 脚本 - Shell 变量不保留值

    bin bash while true do if eq 0 then result operand1 operand2 result operand1 operand2 result operand1 operand2 if result
  • 将列表元素追加到python中的列表列表中

    给出以下列表 list1 1 2 3 4 5 6 7 8 list2 10 11 12 13 最好的改变方式是什么list1所以它变成了Python中的以下列表 1 2 10 3 4 11 5 6 12 7 8 13 您可以使用zip x
  • anorm joda-time - 本地日期时间支持

    与 Anorm 2 5 2 SQL s insert into user name registered date values name registered date on name gt user name registered da
  • Hibernate Search - 如何默认列出所有记录

    我正在使用 Hibernate 搜索 我的 jsp 页面中有一个搜索文本框 如果我输入一些文本 它会返回正确的结果 但是 如果我留空消息并单击搜索按钮 它不会返回任何记录 Code Session session HibernateUtil
  • 将 COALESCE 与 Group by 结合使用

    我有一个表 其中包含如下数据 pid category name subcategoryname 424 Bathing Infant Care Baby Lotion 428 Bathing Infant Care Baby Lotion
  • QtWidgets.QFileDialog.getOpenFileName 返回一个元组

    我最近更新到了 Qt5 for Python 的新版本 在此过程中 我不得不根据发生的一些显着变化来更改我的代码 我想深入了解我创建的这行代码 这感觉像是一种肮脏的方式来解决获得一个问题的问题string代替tuple从函数 注意 0 在该
  • 嵌套 JSON:如何向对象添加(推送)新项目?

    我刚刚从数组 对象和 JSON 开始 所以希望我在这里忽略了一些简单的东西 我在尝试时遇到错误添加 推送 我的 json 对象中的一个新项目 我遇到以下错误 Result of expression library push undefin
  • 如何更改模式视图 iOS 6 上的状态栏

    我有以下星座 主视图 自定义 UIViewController 无导航控制器或导航栏 包含一个按钮 该按钮以模态方式连接到第二个表视图控制器 该控制器嵌入在导航控制器中 MainView gt 导航控制器 gt TableView 在 Ma
  • 生成后如何在expect shell脚本中获取子进程pid

    脚本的一部分a exp usr bin expect spawn ssh qTfnN D port user host expect assword 我怎样才能得到pid子进程 ssh 如果我在 bash shell 中执行这些 而不是在脚
  • 如何告诉 pyximport 使用 cython --cplus 选项?

    pyximport 非常方便 但我不知道如何让它使用 Cython 的 C 语言选项 从命令行运行cython cplus foo pyx 如何使用 pyximport 实现等效功能 谢谢 让 Cython 创建 C 文件的一种方法是使用
  • Javascript 对引用与值定义的变量的混淆

    我了解 javascript 语言的以下属性 var bar 1 var foo bar bar something entirely different foo is still 1 然而 当尝试将此逻辑应用于对象时 它的行为似乎有所不同
  • C 中变量的作用域与生命周期

    有人可以准确解释 C 中变量的范围和生命周期的概念吗 在 C 中是否有所不同 我对范围和生活感到困惑 变量的 范围 是源代码的一个区域 您可以在其中引用该变量 生命周期 是程序执行期间存在的时间 默认情况下 局部变量的生命周期与其作用域相同
  • 如何在 Twig 中调用“time_diff”过滤器

    我怎样才能调用 时间差 Twig 中的函数 The code post created at time diff Output The filter time diff does not exist 如果您使用 Symfony 2 并想使用
  • 即使提供访问令牌后,Google 选择器仍要求登录

    首先 经过一些研究 我发现很多人都遇到过这个问题 但我没有找到任何具体的解决方案 说到这个问题 客观的 我想将谷歌驱动器与我的应用程序集成 以便用户可以从我的应用程序将文件上传到他们的驱动器 因此 用户首先必须将其驱动器与应用程序集成 然后
  • 循环并将对象推入数组

    HTML div class row div class col xs 5 stateName Kuala Lumpur div div class col xs 7 div div
  • 序列化OrientDB RecordID时无限递归

    在我的架构中 我有一个像这样的抽象类 JsonAutoDetect JsonMethod NONE public abstract class AbstractEntity Id private Object id Version priv
  • 使用 Laravel 迁移创建外键时 MySQL 错误

    我已经设置了 Laravel 应用程序并且正在使用Sentry 2 https cartalyst com manual sentry用于用户身份验证 我有一个模型叫Post与默认哨兵一起User桌子 我想让一个用户拥有很多帖子 并且一个帖
  • 如何在php中存储复选框值

    我有条件应用复选框 我想在其中存储字符串值 条件应用 但是 我收到插入错误 因此给出解决方案如何在数据库中存储值 HTML 可能类似于
  • 如何在.NET中调用DrawThemeTextEx

    我需要在 Vista 7 玻璃窗中编写带有发光效果的文本 并且我正在尝试调用 API 来在那里编写一些文本 我已经检查了一个很棒的sample http www codeproject com KB vista textonglass as