强行修改 IMAGE 对象的 HDC 绘制目标,实现 EasyX 绘制到任意窗口
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】EasyX
[
24 瀏覽
0 評論
6 贊
8 踩
]
概要
正文
之前也写过相同的功能,不过原理是绘制到 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; }