举报

用窗口HDC执行GDI函数时绘图错误

0

EasyX的在线文档说GetImageHDC的参数为NULL时,表示获取默认绘图窗口的HDC句柄。下面的代码用GDI的SetPixel函数来测试,但有些地方会变成黑色的:

// 编译环境:Visual Studio 2013, EasyX_26.1.1

#include "easyx.h"
#include <conio.h>

void RGBCube(HDC hDC)
{
	int r, g, b;

	// draw and label axes

	// Red = 0xFF
	for (g=0; g<256; g++/*, Sleep(1)*/)
	for (b=0; b<256; b++)
		SetPixel(hDC, g, 383-b, RGB(0xFF, g, b));
	// Blue = 0xFF, top, sheared
	for (g=0; g<256; g++/*, Sleep(1)*/)
	for (r=0; r<256; r+=2)
		SetPixel(hDC, g+128-r/2, r/2, RGB(r, g, 0xFF));

	// Green = 0xFF, right, sheared
	for (b=0; b<256; b++/*, Sleep(1)*/)
	for (r=0; r<256; r+=2)
		SetPixel(hDC, 383-r/2, 255+r/2-b, RGB(r, 0xFF, b));
}

int main()
{
	initgraph(384, 384);
	MessageBox(GetHWnd(), GetEasyXVer(), TEXT("Version"), MB_OK);
	RGBCube(GetImageHDC());
	FlushBatchDraw();
	_getch();
	return 0;
}

加上Sleep(1)的延时就更明显了:截图

用EasyX_2018春分版编译的话,在绘图的时候不停地将窗口拖到屏幕外然后再拖回来,有可能变成这样:截图

ava
张书睿

昨天 15:05

技术讨论社区