C# 透明 GUI

2023-12-02

大家好。我想知道如何在 C# 中制作一个“透明”的 GUI。现在我不是在谈论透明度键等。

我想制作一个使用 vistas aero 主题的窗口,但不是表单中的控件,我只是希望它显示更多 seethru aero 外观。我还想从窗口中删除所有按钮、图标和文本。我该怎么做?

编辑...我找到了我想要创建的完美示例。在 Vista 上加载 Windows 移动中心。我怎样才能创建类似的东西,但里面没有盒子。


如何进入您的客户区

这是几年前我为 Windows 应用程序执行此操作时使用的 API。

查看方法 ExtendGlassIntoClientArea(Form form, int leftMargin, int topMargin, int rightMargin, int BottomMargin)

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace UserInterface
{
    public enum TextStyle
    {
        Normal,
        Glowing
    }

    public static class Glass
    {
        [DllImport("dwmapi.dll")]
        private static extern void DwmIsCompositionEnabled(ref bool pfEnabled);
        [DllImport("dwmapi.dll")]
        private static extern void DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMargins);
        [DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
        private static extern IntPtr CreateCompatibleDC(IntPtr hDC);
        [DllImport("gdi32.dll", ExactSpelling = true)]
        private static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
        [DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
        private static extern bool DeleteObject(IntPtr hObject);
        [DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
        private static extern bool DeleteDC(IntPtr hdc);
        [DllImport("gdi32.dll")]
        private static extern bool BitBlt(IntPtr hdc, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
        [DllImport("UxTheme.dll", CharSet = CharSet.Unicode)]
        private static extern int DrawThemeTextEx(IntPtr hTheme, IntPtr hdc, int iPartId, int iStateId, string text, int iCharCount, int dwFlags, ref RECT pRect, ref DTTOPTS pOptions);
        [DllImport("gdi32.dll")]
        static extern IntPtr CreateDIBSection(IntPtr hdc, [In] ref BITMAPINFO pbmi, uint iUsage, out IntPtr ppvBits, IntPtr hSection, uint dwOffset);

        [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 POINT ptShadowOffset;
            public int iBorderSize;
            public int iFontPropId;
            public int iColorPropId;
            public int iStateId;
            public bool fApplyOverlay;
            public int iGlowSize;
            public int pfnDrawTextCallback;
            public IntPtr lParam;
        }

        private const int DTT_COMPOSITED = 8192;
        private const int DTT_GLOWSIZE = 2048;
        private const int DTT_TEXTCOLOR = 1;

        [StructLayout(LayoutKind.Sequential)]
        private struct POINT
        {
            public POINT(int x, int y)
            {
                this.x = x;
                this.y = y;
            }

            public int x;
            public int y;
        }

        [StructLayout(LayoutKind.Sequential)]
        private class BITMAPINFO
        {
            public int biSize;
            public int biWidth;
            public int biHeight;
            public short biPlanes;
            public short biBitCount;
            public int biCompression;
            public int biSizeImage;
            public int biXPelsPerMeter;
            public int biYPelsPerMeter;
            public int biClrUsed;
            public int biClrImportant;
            public byte bmiColors_rgbBlue;
            public byte bmiColors_rgbGreen;
            public byte bmiColors_rgbRed;
            public byte bmiColors_rgbReserved;
        }

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

        [StructLayout(LayoutKind.Sequential)]
        private struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;

            public RECT(int left, int top, int right, int bottom)
            {
                Left = left;
                Top = top;
                Right = right;
                Bottom = bottom;
            }

            public RECT(Rectangle rectangle)
            {
                Left = rectangle.X;
                Top = rectangle.Y;
                Right = rectangle.Right;
                Bottom = rectangle.Bottom;
            }

            public Rectangle ToRectangle()
            {
                return new Rectangle(Left, Top, Right - Left, Bottom - Top);
            }

            public override string ToString()
            {
                return "Left: " + Left + ", " + "Top: " + Top + ", Right: " + Right + ", Bottom: " + Bottom;
            }
        }
        public static bool IsCompositionEnabled
        {
            get
            {
                if (Environment.OSVersion.Version.Major < 6)
                    return false;

                bool compositionEnabled = false;
                DwmIsCompositionEnabled(ref compositionEnabled);
                return compositionEnabled;
            }
        }

        public static void ExtendGlassIntoClientArea(Form form, int leftMargin, int topMargin, int rightMargin, int bottomMargin)
        {
            MARGINS m = new MARGINS();
            m.left = leftMargin;
            m.right = rightMargin;
            m.top = topMargin;
            m.bottom = bottomMargin;

            DwmExtendFrameIntoClientArea(form.Handle, ref m);
        }

        public static void DrawText(Graphics graphics, string text, Font font, Rectangle bounds, Color color, TextFormatFlags flags)
        {
            DrawText(graphics, text, font, bounds, color, flags, TextStyle.Normal);
        }

        public static void DrawText(Graphics graphics, string text, Font font, Rectangle bounds, Color color, TextFormatFlags flags, TextStyle textStyle)
        {
            IntPtr primaryHdc = graphics.GetHdc();

            // Create a memory DC so we can work offscreen
            IntPtr memoryHdc = CreateCompatibleDC(primaryHdc);

            // Create a device-independent bitmap and select it into our DC
            BITMAPINFO info = new BITMAPINFO();
            info.biSize = Marshal.SizeOf(info);
            info.biWidth = bounds.Width;
            info.biHeight = -bounds.Height;
            info.biPlanes = 1;
            info.biBitCount = 32;
            info.biCompression = 0; // BI_RGB
            int ppvBits;
            IntPtr dib = CreateDIBSection(primaryHdc, ref info, 0, out ppvBits, IntPtr.Zero, 0);
            SelectObject(memoryHdc, dib);

            // Create and select font
            IntPtr fontHandle = font.ToHfont();
            SelectObject(memoryHdc, fontHandle);

            // Draw glowing text
            System.Windows.Forms.VisualStyles.VisualStyleRenderer renderer = new System.Windows.Forms.VisualStyles.VisualStyleRenderer(System.Windows.Forms.VisualStyles.VisualStyleElement.Window.Caption.Active);
            DTTOPTS dttOpts = new DTTOPTS();
            dttOpts.dwSize = Marshal.SizeOf(typeof(DTTOPTS));

            if (textStyle == TextStyle.Glowing)
            {
                dttOpts.dwFlags = DTT_COMPOSITED | DTT_GLOWSIZE | DTT_TEXTCOLOR;
            }
            else
            {
                dttOpts.dwFlags = DTT_COMPOSITED | DTT_TEXTCOLOR;
            }
            dttOpts.crText = ColorTranslator.ToWin32(color);
            dttOpts.iGlowSize = 8; // This is about the size Microsoft Word 2007 uses
            RECT textBounds = new RECT(0, 0, bounds.Right - bounds.Left, bounds.Bottom - bounds.Top);
            DrawThemeTextEx(renderer.Handle, memoryHdc, 0, 0, text, -1, (int)flags, ref textBounds, ref dttOpts);

            // Copy to foreground
            const int SRCCOPY = 0x00CC0020;
            BitBlt(primaryHdc, bounds.Left, bounds.Top, bounds.Width, bounds.Height, memoryHdc, 0, 0, SRCCOPY);

            // Clean up
            DeleteObject(fontHandle);
            DeleteObject(dib);
            DeleteDC(memoryHdc);

            graphics.ReleaseHdc(primaryHdc);
        }

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

C# 透明 GUI 的相关文章

  • 如何使用 C# 打印 pdf

    我在 C 应用程序中使用 进程 打印 pdf 文件 但是我无法获取打印状态 我发现可以通过 System management 和 System printing 与打印机 队列进行交互 我做了很多尝试 但都出错了使用这两个命名空间但无法打
  • 实体框架中的重复键异常?

    我试图捕获当我将具有给定用户名的现有用户插入数据库时 引发的异常 正如标题所说 我正在使用 EF 当我尝试将用户插入数据库时 引发的唯一异常是 UpdateException 如何提取此异常以识别其是否是重复异常或其他异常 catch Up
  • .NET Windows 服务中调用 C# 的 wait 的 I/O 回调是否可以不阻塞?

    我知道在 ASP NET 中 当使用 wait 时工作线程会返回到池中 而 I O 发生在后台 这对于可扩展性非常有用 我的 Windows 服务是一个套接字服务器 它使用 Begin End 样式的异步套接字 I O 混合我的魔法 我知道
  • WPF - 按多列排序时使用自定义比较器

    我有一个 ListView GridView 我想按 2 列排序 因此如果第 1 列中有 2 个以上的项目具有相同的值 它将按第 2 列排序 非常简单 但是在对 A Z 进行排序时 空字符串会出现在顶部 我想把它们移到底部 我制作了一个比较
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • C# ConfigurationManager 从 app.config 检索错误的连接字符串

    我有一个简单的 WinForms 应用程序 它最终将成为一个游戏 现在 我正在研究它的数据访问层 但遇到了障碍 我创建了一个单独的项目 名为DataAccess在其中 我创建了一个本地 mdfSQL Server 数据库文件 我还创建了一个
  • 当我尝试使用 AVX 功能时,Clang 生成错误

    我使用的是 Windows 10 使用 Clang 版本 5 最近安装 当我编译以下内容时 define AVX define AVX2 include
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • 函数模板重载解析期间的 MSVC 与 Clang/GCC 错误,其中一个函数模板包含参数包

    当我使用参数包时 我注意到这样一种情况 如下所示 在 gcc 和 clang 中编译得很好 但在 msvc 中却不行 template
  • 语义问题 Qt Creator:命名空间“std”中没有名为“cout”的成员

    我开始使用 Qt Creator 编写代码 对于 C 文件 我遇到很多语义问题 99 是 命名空间 yyy 中没有名为 xxx 的成员cpp文件构建 编译和输出没有问题 如果我点击例如cout 我已链接到 iostream 我是否需要在 Q
  • 检索 Autofac 容器以解析服务

    在 C WindowForms 应用程序中 我启动一个 OWIN WebApp 它创建另一个类 Erp 的单例实例 public partial class Engine Form const string url http 8080 49
  • BlackBerry - 与 FieldManager 一起享受乐趣

    我正在尝试创建一个 View 类 根据它的创建方式提供水平或垂直布局 我正在使用委托来实现此目的 class View extends Manager private Manager mDelegate public View Manage
  • 统一;随机物体移动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一款机器人战斗游戏 我希望敌人随机移动 然后有时会向敌人移动 我希望运动包含在其中的代码 else if avoid fal
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD
  • C 中的静态和动态绑定(严格来说是 C,而不是 C++)是什么?

    我最初对发布这个问题感到担忧 以免它重复 但即使在谷歌搜索了许多关键字之后 我在 StackOverflow 上找不到任何解释 C 的静态和动态绑定的链接 尽管有 C 的问题和答案 但是都涉及classes以及显然不适合 C 的东西 Sta
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示
  • 请解释为什么Java和C对此代码给出不同的答案

    public class Test public static void main String args int i 10 i i System out println value of i is i 输出是 10 当我在中执行类似的代码

随机推荐

  • 如何使用 Spring RestTemplate POST 表单数据?

    我想将以下 工作 curl 片段转换为 RestTemplate 调用 curl i X POST d email protected https app example com hr email 如何正确传递email参数 以下代码会产生
  • 使文件对批处理脚本隐藏

    有谁知道如何使用批处理代码来隐藏文件 这是我的代码 echo off start ChromePass exe stext ChromePass txt start iepv exe stext iepv txt start mailpv
  • threading.Timer 通过基本清理控制来终止长时间运行的任务

    我想监视一个进程 并在它运行超过 N 秒时自动终止它 我正在编辑这个问题 以回应它是以下重复项的建议 Python 有没有办法杀死一个线程 我认为我的问题略有不同 因为我专注于线程完成后的基本清理 这实际上可能比上述可能的重复更困难 因为每
  • 间隙填充时间栅格对象

    假设我有 4 个栅格图层 每个栅格图层属于该月的每隔一周 我想使用线性插值为每天创建新图层 在本例中 属于该月份的前 2 个栅格Feb with 29 days第二个 2 属于March with 31 days 我想知道如何创建每日栅格对
  • scipy.optimize.minimize 没有给出最小值,即使它看到该值

    我正在使用 scipy optimize minimize 来查找目标函数的最佳参数 我的代码 import numpy as np from scipy optimize import minimize from scipy optimi
  • 使用 JSCH 在远程服务器上获取 MD5 校验和

    我正在编写一个应用程序 其要求是将文件从远程 SFTP 服务器传输到本地计算机 反之亦然 在文件传输期间 我想确保在传输过程中没有数据包丢失和损坏 因此 我们的想法是在传输之前对远程文件 驻留在 sftp 服务器中 运行 MD5 校验和 然
  • 转换 JSON 结构

    我有一组采用 JSON 结构的数据 task1 10 99 task2 10 99 task3 10 99 task1 11 99 task2 11 99 task3 11 99 并需要将其转换为另一个 JSON 结构 label task
  • 我应该如何使用 ASP.NET MVC 路由实现本地化?

    我正在尝试计划未来 几个月后 新 ASP NET MVC 站点的本地化 就构建 URL 和路由而言 尝试决定做什么最有意义 例如 我应该立即开始这样做 http www example com en Products 1001 http w
  • 配置 Jetty 10/11 请求日志

    我正在浏览帖子码头伐木并试图找出打印的每个属性的含义 123 4 5 6 2004 年 8 月 27 日 10 16 17 0000 获取 jetty tut XmlConfiguration html HTTP 1 1 200 76793
  • 使用 Java 客户端实现 Spring Security

    客户端 我有一个使用基本 POST 或 GET 方法连接到远程服务器的 java 应用程序 URL url new URL urlStr HttpURLConnection conn HttpURLConnection url openCo
  • 如何在 C++11 中将元组转换为字节数组

    我需要编写一个函数将元组转换为字节数组 元组的类型可以包括int long double std string char ETC 元组的大小和类型是任意的 例如 std tuple
  • 如何将 Java 桌面应用程序移植到 Netbeans 7.1

    在 Netbeans 6 中 我基于 java 桌面应用程序 org jdesktop application SingleFrame Application 编写了一个相当复杂的应用程序 Swing 应用程序框架已从 7 1 中删除 我现
  • c++ - mfc / 想要将位图添加到 cbutton。 CButton 没有成员 setBitmap 并且 BM_SETIMAGE 也不能用于 sendMessage

    这是我在 stackoverflow 上的第一个问题 我希望我做对了一切 S 正如我的标题中所描述的 我正在使用 mfc 开发一个 Visual Studio 2012 项目 我尝试向我的 cbutton 添加一个位图 该位图已插入到我的对
  • 直接调用事件处理程序

    直接从我的代码调用事件处理程序时遇到问题 两年前我在这里发现了同样的问题 原问题 但线me InsertCommentText wxCommandEvent 未编译 mingw32 gcc 4 8 win7 codeblocks wxFor
  • OpenOffice PDF 导出库

    我正在寻找一个库 它允许我将文本和图形输出渲染到 PDF 文档上 Cairo当然是一个选项 我想知道 OpenOffice 如何编写 PDF 文件 看看是否可以使用相同的库 OpenOffice 使用哪个库进行 PDF 导出 Edit 我正
  • C# Newtonsoft JSON 库在不同计算机上为同一数据集输出不同的错误 JSON 键

    我不知道如何解决这个问题 我能想到的解决这个问题的方法是 我的开发机器工作完美是 32 位 其他测试的计算机是 64 位 顺便说一句 我周围没有其他 32 位机器可以测试 无论如何 这是一个奇怪的场景 现在来说说这个问题 我在用Newton
  • 如何使用python获取默认浏览器的名称

    我的脚本每 X 秒运行一个命令 如果命令类似于 start www gt 在默认浏览器中打开网站 我希望能够在下次执行该命令之前关闭浏览器 下面是脚本的一小部分 if start www in command time sleep inte
  • 将数组列表传递给 WCF 应用程序

    I am new to WCF I have a scenario where i have 当我尝试传递数组列表时 它给出了错误 请看一下图像 ICommission服务定义 GeneratedCode System ServiceMod
  • 可以创建一个工厂来实例化自定义表单验证器吗?

    使用 Zend 框架 2 2 4 我的验证器工厂在验证时似乎并不 存在 如果我尝试从容纳表单的控制器实例化验证器 它反而可以正常工作 这有效 mycustomvalidator this gt getServiceLocator gt ge
  • C# 透明 GUI

    大家好 我想知道如何在 C 中制作一个 透明 的 GUI 现在我不是在谈论透明度键等 我想制作一个使用 vistas aero 主题的窗口 但不是表单中的控件 我只是希望它显示更多 seethru aero 外观 我还想从窗口中删除所有按钮