吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1405|回复: 1
收起左侧

[C&C++ 原创] 创建跟随蒙版窗口的代码

  [复制链接]
Panel 发表于 2023-3-7 16:42
本帖最后由 Panel 于 2023-3-7 16:53 编辑

用途很多,自己探索
效果图如下:
Snipaste_2023-03-07_16-52-38.png
#include <windows.h>
HWND hWnd;
HWND hOverlayWnd; //蒙版窗口句柄
RECT winRect; //窗口属性 尺寸
HDC hdc; //设备上下文
HBRUSH hbrush; //画刷
HPEN hPen; //画笔

void SetLayerTransparent(HWND hWnd)
{
        BOOL isTransParent = FALSE;
        if (isTransParent == FALSE)
        {
                DWORD exStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
                exStyle |= WS_EX_LAYERED;
                SetWindowLong(hWnd, GWL_EXSTYLE, exStyle);
                SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 200, LWA_ALPHA);
                isTransParent = TRUE;
        }
        else
        {
                SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 200, LWA_ALPHA);
                isTransParent = FALSE;
        }
}
LRESULT OverWndMsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
        switch (msg)
        {
                //窗口重绘 窗口绘制消息
        case WM_DESTROY:
                PostQuitMessage(0);
        case WM_CLOSE:
                DestroyWindow(hWnd);
                break;
        default:
                break;
        }
        return DefWindowProc(hWnd, msg, wParam, lParam);
}

int CALLBACK WinMain(HINSTANCE hIns, HINSTANCE hPreIns, LPSTR lpCmdLine, int nShowcmd)
{
        hWnd = FindWindowA(NULL, "[ LordPE Deluxe ] by yoda");//需要覆盖的窗口标题
        MSG msg; //windows消息
        ZeroMemory(&msg, sizeof(msg)); //初始化窗口信息
        GetWindowRect(hWnd, &winRect); //获取CSGO窗口相关属性信息 大小 尺寸 位置
        //开始创建通明窗口
        WNDCLASSEX wc;
        ZeroMemory(&wc, sizeof(wc)); //初始化窗口类
        wc.cbSize = sizeof(wc); //窗口的大小,一般都用sizeof获取标准大小
        wc.style = CS_HREDRAW | CS_VREDRAW;   //水平和垂直重绘
        wc.lpfnWndProc = (WNDPROC)OverWndMsgProc;        //窗口消息回调函数 用来记录你在窗户上进行的一些操作 
        //并返回操作的结果
        wc.hInstance = GetModuleHandle(NULL);   //窗口实例句柄,不依赖任何项
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);   //窗口光标句柄 样式
        wc.hbrBackground = (HBRUSH)RGB(0, 0, 0);  //窗口背景颜色 白色
        wc.lpszClassName = L"OverlayWindow";      //窗口类的名称
        RegisterClassEx(&wc);   //注册窗口类
        //创建蒙版窗口
        hOverlayWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT, wc.lpszClassName, L"over", WS_POPUP, winRect.left, winRect.top, winRect.right - winRect.left, winRect.bottom - winRect.top, NULL, NULL, wc.hInstance, NULL);
        //判断窗口是否创建成功
        if (hOverlayWnd == NULL) {
                return 0;
        }
        //SetLayeredWindowAttributes(hOverlayWnd, RGB(0, 0, 0), 100, ULW_COLORKEY); //设置窗口透明度
        SetLayerTransparent(hOverlayWnd);
        ShowWindow(hOverlayWnd, SW_SHOW); //显示窗口
        UpdateWindow(hOverlayWnd);
        while (msg.message != WM_QUIT)
        {
                //确保窗口始终在最前面
                SetWindowPos(hOverlayWnd, HWND_TOPMOST, winRect.left, winRect.top, winRect.right - winRect.left, winRect.bottom - winRect.top, SWP_SHOWWINDOW);
                GetWindowRect(hWnd, &winRect);
                //处理蒙版窗口消息
                if (PeekMessage(&msg, hOverlayWnd, 0, 0, PM_REMOVE)) {
                        TranslateMessage(&msg);   //把虚拟键盘消息转化为字符消息
                        DispatchMessage(&msg); //把消息教给消息窗体
                }
        }
}

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

deffedyy 发表于 2023-3-7 17:16
学到了~~~~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表