用Easyx创建了一个透明窗口绘制了一个单机游戏方框辅助 但有个bug就是鼠标光标在游戏内点到了绘制的线条 就会卡住弹出光标,透明窗口就变成了活动窗口了而游戏就卡住了,有什么办法可以解决这个

0

用Easyx创建了一个透明窗口绘制了一个单机游戏方框辅助 但有个bug就是鼠标光标在游戏内点到了绘制的线条 就会卡住弹出光标,透明窗口就变成了活动窗口了而游戏就卡住了,有什么办法可以解决这个问题,一下是部分代码,不知道怎样解决这个问题,研究了很久了

窗口宽度 = (rect.right - rect.left);
窗口高度 = (rect.bottom - rect.top);
HWND hwnd = initgraph(窗口宽度, 窗口高度, EX_NOCLOSE | EX_NOMINIMIZE | EX_SHOWCONSOLE);
SetWindowPos(hwnd, HWND_TOPMOST, rect.left, rect.top, 窗口宽度, 窗口高度, SWP_SHOWWINDOW);
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & (~(WS_CAPTION | WS_SYSMENU | WS_SIZEBOX)));
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) & (~(WS_EX_WINDOWEDGE | WS_EX_DLGMODALFRAME)) | WS_EX_LAYERED | WS_EX_TOOLWINDOW);
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);

SetLayeredWindowAttributes(hwnd, 0x000000, 0, LWA_COLORKEY);

if (敌人_1.hp <= 100&&敌人_1.hp>50&&敌人_1.hp>0) {
    setlinestyle(PS_SOLID, 2, NULL, NULL);
    //setlinecolor(RED);
    //line(视角宽, 0, 相机X, 相机Y);
    setlinecolor(GREEN);
    setlinestyle(PS_SOLID, 3, NULL, NULL);
    //outtextxy(相机X, 相机Y, L".");
    line(相机X - 方框宽度 / 2, 相机Y, 相机X + 方框宽度 / 2, 相机Y);
    line(相机X + 方框宽度 / 2, 相机Y, 相机X + 方框宽度 / 2, 相机Y + 方框高度);
    line(相机X + 方框宽度 / 2, 相机Y + 方框高度, 相机X - 方框宽度 / 2, 相机Y + 方框高度);
    line(相机X - 方框宽度 / 2, 相机Y + 方框高度, 相机X - 方框宽度 / 2, 相机Y);
}
else if (敌人_1.hp <= 50&&敌人_1.hp>20&&敌人_1.hp > 0) {
    setlinestyle(PS_SOLID, 2, NULL, NULL);
    //setlinecolor(RED);
    //line(视角宽, 0, 相机X, 相机Y);
    setlinecolor(YELLOW);
    setlinestyle(PS_SOLID, 3, NULL, NULL);
    //outtextxy(相机X, 相机Y, L".");
    line(相机X - 方框宽度 / 2, 相机Y, 相机X + 方框宽度 / 2, 相机Y);
    line(相机X + 方框宽度 / 2, 相机Y, 相机X + 方框宽度 / 2, 相机Y + 方框高度);
    line(相机X + 方框宽度 / 2, 相机Y + 方框高度, 相机X - 方框宽度 / 2, 相机Y + 方框高度);
    line(相机X - 方框宽度 / 2, 相机Y + 方框高度, 相机X - 方框宽度 / 2, 相机Y);
}
else if(敌人_1.hp > 0){
    setlinestyle(PS_SOLID, 2, NULL, NULL);
    //setlinecolor(RED);
    //line(视角宽, 0, 相机X, 相机Y);
    setlinecolor(RED);
    setlinestyle(PS_SOLID, 3, NULL, NULL);
    //outtextxy(相机X, 相机Y, L".");
    line(相机X - 方框宽度 / 2, 相机Y, 相机X + 方框宽度 / 2, 相机Y);
    line(相机X + 方框宽度 / 2, 相机Y, 相机X + 方框宽度 / 2, 相机Y + 方框高度);
    line(相机X + 方框宽度 / 2, 相机Y + 方框高度, 相机X - 方框宽度 / 2, 相机Y + 方框高度);
    line(相机X - 方框宽度 / 2, 相机Y + 方框高度, 相机X - 方框宽度 / 2, 相机Y);
}

ava
微遇

2023-12-12

悬赏金额:¥20 元

1. 回答问题后,可以看到提问者联系方式。

2. 如果对问题有不明确的地方,可以在回复中写下你的疑问,就可以看到提问者的联系方式,然后详细沟通。

3. 如果私下沟通解决了问题,建议回答者将解决方案补充到本站,提问者勾选正确答案。每个人回答的问题数量,是能力的象征。

4. 回答问题后,可以通过提问者的联系方式私下协商领取悬赏的方式,本站不做任何干涉,不做担保,不抽取佣金,请双方谨慎操作。

1

你要的是鼠标透传效果吧,GWL_EXSTYLE额外加个WS_EX_TRANSPARENT就可以了

#include <easyx.h>

int main() {
    auto hwnd = initgraph(640, 480);
    auto width = getwidth();
    auto height = getheight();
    SetWindowPos(hwnd, HWND_TOPMOST, 200, 200, width, height, SWP_SHOWWINDOW);
    SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & (~(WS_CAPTION | WS_SYSMENU | WS_SIZEBOX)));
    SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) & (~(WS_EX_WINDOWEDGE | WS_EX_DLGMODALFRAME)) | WS_EX_LAYERED | WS_EX_TOOLWINDOW | WS_EX_TRANSPARENT);
    SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);

    SetLayeredWindowAttributes(hwnd, 0x000000, 0, LWA_COLORKEY);


    while (true) {
        cleardevice();
        setfillcolor(0xffffff);
        fillrectangle(0, 0, width, height);
        settextcolor(0xffffff);
        settextstyle(20, 0, "微软雅黑");
        outtextxy(10, 10, "Hello, world!");
        Sleep(1000);
    }

    return 0;
}
ava
OhtoAi

2023-12-12

1 感谢大佬问题解决了 已经打赏了 -  微遇  2023-12-12
技术讨论社区