void Device::Display()
{
hdc = GetDC(hwnd);
BitBlt(hdc, 0, 0, VIEWWIDTH, VIEWHEIGHT, hdcMem, 0, 0, SRCCOPY);
ReleaseDC(hwnd, hdc);
for (int j = 0; j < VIEWHEIGHT; j++)
{
memset(frameBuffer[j], 0, VIEWWIDTH*sizeof(unsigned int));
}
}
void Device::Init()
{
hdc = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
ReleaseDC(hwnd, hdc);//暂时断开
bmpInfo = { { sizeof(BITMAPINFOHEADER), VIEWWIDTH, -VIEWHEIGHT, 1, 32, BI_RGB, VIEWWIDTH * VIEWHEIGHT * 4, 0, 0, 0, 0 } };
LPVOID ptr;
nBmp = CreateDIBSection(hdcMem, &bmpInfo, DIB_RGB_COLORS, &ptr, 0, 0);
oBmp = (HBITMAP)SelectObject(hdcMem, nBmp);
frameBuffer = new unsigned int*[VIEWHEIGHT];
char*framebuf = (char*)ptr;
for (int j = 0; j < VIEWHEIGHT; j++)
{
frameBuffer[j] = (unsigned int*)(framebuf + VIEWWIDTH * 4 * j);
}
}
hwnd是CreateWindowA返回的窗口句柄。
程序运行结果是这样