Win32 (GDI) - 设置静态控件的不透明度

2024-01-05

我正在使用 C -(无 MFC 或 GDI+) :-)

我想要的是将子窗口的不透明度设置为 100(我的子窗口是STATIC控制)。我想知道这是否可能,如果可以,有人可以指出我如何做到这一点的正确方向。

这是我的设置:

我创建我的父窗口如下:

HWND     hWnd;
WNDCLASS wndCls_s;


wndCls_s.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wndCls_s.lpfnWndProc   = MainWndProc;
wndCls_s.cbClsExtra    = 0;
wndCls_s.cbWndExtra    = 0;
wndCls_s.hInstance     = hInstance;
wndCls_s.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_BSN_64));
wndCls_s.hCursor       = LoadCursor(NULL, IDC_ARROW);
wndCls_s.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
wndCls_s.lpszMenuName  = NULL;
wndCls_s.lpszClassName = pszCName;

if (RegisterClass(&wndCls_s) == 0)
    return EXIT_FAILURE;


/* Creating Window */
hWnd = CreateWindow(
    pszCName, pszCName,
    WS_VISIBLE | WS_POPUP | WS_SYSMENU | WS_CLIPCHILDREN,
    0, 0, WND_WIDTH, WND_HEIGHT,
    NULL, NULL, hInstance, NULL);

In my MainWndProc:

case WM_CREATE: 
    {   
    HWND hWndChild = CreateWindow(
        L"STATIC", (LPCTSTR) NULL,
        WS_CHILD | WS_VISIBLE,
        10, 10, 110, 110,
        hWnd, (HMENU) (int) 10000, 
        g_hInst, NULL);
    }
    break;
case WM_CTLCOLORSTATIC:
    {
    COLORREF dwColor; 

    dwColor = RGB(255, 0, 0);
    hDC = (HDC) wParam;

    //SetBkColor(hDC, dwColor);
    SetBkMode(hDC, TRANSPARENT);

    /*
    This is not going to work for child window
    SetWindowLong(
        hWnd, GWL_EXSTYLE,
        GetWindowLong((HWND)lParam, GWL_EXSTYLE) & ~WS_EX_LAYERED);

        SetLayeredWindowAttributes(
            (HWND)lParam, 0, 100, LWA_ALPHA);
        RedrawWindow((HWND)lParam, NULL, NULL, RDW_ERASE | RDW_INVALIDATE);
    */

    if (g_hBrushRed == NULL)
        g_hBrushRed = CreateSolidBrush(dwColor);
    }
    return (INT_PTR)g_hBrushRed;

为什么要启用透明度TRANSPARENT如果你要返回一个有效的背景画笔?你不需要SetBkMode然后你的红色画笔将被控件使用。

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

Win32 (GDI) - 设置静态控件的不透明度 的相关文章

  • 如何在运行 ASP.NET 页面时以编程方式设置表格背景?

    我有一个 aspx 页面 其默认背景颜色是一种 当选择单选按钮的某个选项时 我需要能够以编程方式更改它 我尝试设置表的 ID 字段 但似乎无法在 C 代码隐藏文件中访问它 我原来的表是 table style width 100 backg
  • 如何在自定义保存操作 WFFM 中获取 Sitecore.Current.Site 对象?

    我在用着面向营销人员的 Sitecore 网络表单 在里面save action我得到的表格Sitecore Context Site对象 但该对象没有返回正确的上下文 该值为 modules shell 有谁知道我如何才能获得正确的上下文
  • 你好世界,裸机 Beagleboard

    我正在尝试在我的 Beagleboard xm rev 上运行 hello world 类型的程序 C 通过调用 Cputs功能来自装配 到目前为止 我一直使用这个作为参考 http wiki osdev org ARM Beagleboa
  • 代码块调试问题

    我正在尝试在代码块中运行一个简单的链表程序 但我无法运行该程序并且收到以下错误 Active debugger config GDB CDB debugger Default Building to ensure sources are u
  • C# 从整数反序列化枚举

    是否可以从 C 中的 int 反序列化枚举 例如如果我有以下课程 class Employee public string Name get set public int EmployeeTypeID get set 我可以轻松地从 XML
  • 终止以 System.Diagnostic.Process.Start("FileName") 启动的进程

    我正在尝试创建一个将在特定时间执行操作的应用程序 很像 Windows 任务计划程序 我当前正在使用 Process Start 来启动任务所需的文件 或 exe 我通过调用文件 mp3 启动一个进程 该进程启动 WMP 因为它是默认应用程
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • 类型定义存在于两个库中

    我正在使用 NET 4 5 构建 ASP NET Web 窗体网站 错误 The type System ComponentModel DataAnnotations Schema ForeignKeyAttribute exists in
  • 如何使用“std::array”作为“template class”形式的模板参数?

    请考虑以下事项tree class template
  • 在浏览器中测试wcf服务

    我无法在浏览器中调用基本的 wcf web 方法 即使使用
  • 向量和常量

    考虑一下这个 void f vector
  • OpenCV:处理每一帧

    我想使用 OpenCV 编写一个跨平台应用程序进行视频捕获 在所有示例中 我发现来自相机的帧是使用抓取功能进行处理并等待一段时间 我想处理序列中的每一帧 我想定义自己的回调函数 每次当一个新帧准备好处理时都会执行该函数 例如直播对于 Win
  • Parallel ForEach 的本地初始化如何工作?

    我不确定 Parallel ForEach 中本地 init 函数的使用 如 msdn 文章中所述 http msdn microsoft com en us library dd997393 aspx http msdn microsof
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 使用 c++20 范围删除最后一个元素的最佳方法是什么

    有没有比反转两次更好的方法来使用 c 20 范围删除容器中的最后一个元素 include
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • 如何设置扬声器声音增强设置

    如何以编程方式设置 Windows 扬声器设置 增强 选项卡 中可用的声音效果 恐怕这是不可能的 参见 Maurits 对他的评论blog http blogs msdn com b matthew van eerde archive 20
  • 将整个单词与特殊字符匹配的正则表达式不起作用? [复制]

    这个问题在这里已经有答案了 我正在经历这个问题C Regex Match 整个单词 https stackoverflow com q 1209049 443568 它说要匹配整个单词使用 b模式 b 这对于匹配没有任何特殊字符的整个单词效
  • wpf中的图像问题(图像不显示)

    我不明白为什么我无法在 WPF 中显示图像 也许我不小心修改了我的资源文件夹 这就是我没有显示的原因 所以我创建了一个新的 wpf 应用程序 我有这个 当我运行该程序时 我的图片显示为 为什么当我尝试在程序中执行相同的操作时 图像没有显示
  • In 和 Out 属性在 .NET 中如何工作?

    我一直在尝试跨序列化数组AppDomain边界 使用以下代码 public int Read byte buffer int offset int count return base Read buffer offset count 作为猜

随机推荐