匯東網


强行修改 IMAGE 对象的 HDC 绘制目标,实现 EasyX 绘制到任意窗口

[編輯] [转简体]
|
作者:huidong | 分類:【編程】EasyX
[ 18 瀏覽 0 評論 3 贊 4 踩 ]

概要

正文

之前也写过相同的功能,不过原理是绘制到 IMAGE 上,再贴图到任意窗口,见 http://huidong.xyz/?mode=2&id=116


声明:这次这是做个实验玩玩,真正在代码中这样做没有任何好处。


首先介绍一下类在内存中的存储方式。

如果这个类有虚函数,那么类的前四个字节就是虚函数的表。后面紧接着就是各种变量了,所以直接取值就行。但是有的时候涉及内存对齐,我就没研究了。


这回是通过指针改了 IMAGE 对象的 private 成员 m_hMemDC,见代码:

#include <easyx.h>
#include <stdio.h>

int main()
{
    IMAGE img(500, 500);

    int* p = (int*)((IMAGE*)(&img));
    p += 4;
    *p = (int)GetDC(GetConsoleWindow());

    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < i + 1; j++)
            printf("EasyX~ooooo");
        printf("\n");
    }

    SetWorkingImage(&img);
    while (true)
    {
        cleardevice();
        setfillcolor(WHITE);
        fillcircle(20, 20, 10);
        settextcolor(RED);
        settextstyle(72, 0, L"");
        setbkmode(TRANSPARENT);
        outtextxy(100, 100, L"EasyX");
        Sleep (10);
    }

    _gettch();

    return 0;
}


[ 3] [ 4]


 評論區  0 條評論

+ 添加評論