之前也写过相同的功能,不过原理是绘制到 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;
}