/******************************Module*Header*******************************\ * Module Name: ftdib.c * * This is a hacked up test for the DIB functions that should be rewritten. * * Created: 01-Jun-1991 20:55:57 * Author: Patrick Haluptzok patrickh * * Copyright (c) 1990 Microsoft Corporation \**************************************************************************/ #include "precomp.h" #pragma hdrstop typedef struct _BMI_CLRTABLE{ BITMAPINFOHEADER bminfo; RGBQUAD bmrgb[4]; }BMI_CLRTABLE; BMI_CLRTABLE bmiCT = {{sizeof(BITMAPINFOHEADER), 100, 100, 1, 8, BI_RGB, 10000, 0, 0, 4, 4}, {{0, 0, 0xff, 0}, {0, 0xff, 0, 0},{0xff, 0, 0, 0},{0, 0, 0, 0} }}; // red,green,blue,black typedef struct _BITMAPINFOPAT2 { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[20]; } BITMAPINFOPAT2; typedef struct _BITMAPINFOPAT { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[16]; } BITMAPINFOPAT; BITMAPINFOPAT _bmiPat = { { sizeof(BITMAPINFOHEADER), 32, 32, 1, 1, BI_RGB, 0, 0, 0, 2, 2 }, { // B G R { 0, 0, 0x80,0 }, // 1 { 0, 0x80,0, 0 }, // 2 { 0, 0, 0, 0 }, // 0 { 0, 0x80,0x80,0 }, // 3 { 0x80,0, 0, 0 }, // 4 { 0x80,0, 0x80,0 }, // 5 { 0x80,0x80,0, 0 }, // 6 { 0x80,0x80,0x80,0 }, // 7 { 0xC0,0xC0,0xC0,0 }, // 8 { 0, 0, 0xFF,0 }, // 9 { 0, 0xFF,0, 0 }, // 10 { 0, 0xFF,0xFF,0 }, // 11 { 0xFF,0, 0, 0 }, // 12 { 0xFF,0, 0xFF,0 }, // 13 { 0xFF,0xFF,0, 0 }, // 14 { 0xFF,0xFF,0xFF,0 } // 15 } }; BYTE _abColorLines[64 * 64 / 2] = { // 0 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, // 8 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, // 16 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, // 24 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, // 32 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, // 40 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, // 48 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, // 56 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x00,0x00,0x11,0x11,0x22,0x22,0x33,0x33,0x44,0x44,0x55,0x55,0x66,0x66,0x77,0x77,0x88,0x88,0x99,0x99,0xAA,0xAA,0xBB,0xBB,0xCC,0xCC,0xDD,0xDD,0xEE,0xEE,0xFF,0xFF, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11 // 64 }; BITMAPINFOPAT _bmiPat1 = { { sizeof(BITMAPINFOHEADER), 64, 64, 1, 4, BI_RGB, 0, 0, 0, 0, 0 }, { // B G R { 0xFF,0xFF,0xFF,0 }, // 15 { 0xFF,0xFF,0, 0 }, // 14 { 0xFF,0, 0xFF,0 }, // 13 { 0xFF,0, 0, 0 }, // 12 { 0, 0xFF,0xFF,0 }, // 11 { 0, 0xFF,0, 0 }, // 10 { 0, 0, 0xFF,0 }, // 9 { 0xC0,0xC0,0xC0,0 }, // 8 { 0x80,0x80,0x80,0 }, // 7 { 0x80,0x80,0, 0 }, // 6 { 0x80,0, 0x80,0 }, // 5 { 0x80,0, 0, 0 }, // 4 { 0, 0x80,0x80,0 }, // 3 { 0, 0x80,0, 0 }, // 2 { 0, 0, 0x80,0 }, // 1 { 0, 0, 0, 0 } // 0 } }; BITMAPINFOPAT2 _bmiPat2 = { { sizeof(BITMAPINFOHEADER), 32, 32, 1, 8, BI_RGB, 32*32, 0, 0, 20, 20 }, { // B G R { 0xFF,0xFF,0xFF,0 }, // 15 { 0xFF,0xFF,0, 0 }, // 14 { 0xFF,0, 0xFF,0 }, // 13 { 0xFF,0, 0, 0 }, // 12 { 0, 0xFF,0xFF,0 }, // 11 { 0, 0xFF,0, 0 }, // 10 { 0, 0, 0xFF,0 }, // 9 { 0xC0,0xC0,0xC0,0 }, // 8 { 0x80,0x80,0x80,0 }, // 7 { 0x80,0x80,0, 0 }, // 6 { 0x80,0, 0x80,0 }, // 5 { 0x80,0, 0, 0 }, // 4 { 0, 0x80,0x80,0 }, // 3 { 0, 0x80,0, 0 }, // 2 { 0, 0, 0x80,0 }, // 1 { 0, 0, 0, 0 }, // 0 { 0, 0, 0x80,0 }, // 1 { 0x80,0, 0x80,0 }, // 5 { 0, 0, 0xFF,0 }, // 9 { 0xFF,0, 0xFF,0 } // 13 } }; BYTE _abColorLines2[32 * 32] = { 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 18,18,18,18,18,18,18,18, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19, 19,19,19,19,19,19,19,19 }; static BYTE abBitCat[] = {0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xA2, 0x45, 0x01, 0x80, 0xA2, 0x45, 0x01, 0x80, 0xA2, 0x45, 0xE1, 0x80, 0xA2, 0x45, 0x11, 0x80, 0xA2, 0x45, 0x09, 0x80, 0x9C, 0x39, 0x09, 0x80, 0xC0, 0x03, 0x05, 0x80, 0x40, 0x02, 0x05, 0x80, 0x40, 0x02, 0x05, 0x80, 0x40, 0x02, 0x05, 0x80, 0x20, 0x04, 0x05, 0x80, 0x20, 0x04, 0x05, 0x80, 0x20, 0x04, 0x05, 0x80, 0x10, 0x08, 0x05, 0x80, 0x10, 0x08, 0x09, 0x80, 0x10, 0x08, 0x11, 0x80, 0x08, 0x10, 0x21, 0x80, 0x08, 0x10, 0xC1, 0x80, 0x08, 0x10, 0x09, 0x80, 0x07, 0xE0, 0x09, 0x80, 0x08, 0x10, 0x09, 0x80, 0xFC, 0x3F, 0x09, 0x80, 0x09, 0x90, 0x09, 0x80, 0xFC, 0x3F, 0x01, 0x80, 0x08, 0x10, 0x01, 0x80, 0x1A, 0x58, 0x01, 0x80, 0x28, 0x14, 0x01, 0x80, 0x48, 0x12, 0x01, 0x80, 0x8F, 0xF1, 0x01, 0x81, 0x04, 0x20, 0x81, 0xFF, 0xFF, 0xFF, 0xFF } ; static BYTE abBigCat[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; typedef struct _VGALOGPALETTE { USHORT ident; USHORT NumEntries; PALETTEENTRY palPalEntry[16]; } VGALOGPALETTE; extern VGALOGPALETTE logPalVGA; VGALOGPALETTE palExplicit = { 0x300, // driver version 16, // num entries { { 0, 0, 0, PC_EXPLICIT }, // 0 { 1, 0, 0, PC_EXPLICIT }, // 1 { 2, 0, 0, PC_EXPLICIT }, // 2 { 3, 0, 0, PC_EXPLICIT }, // 3 { 4, 0, 0, PC_EXPLICIT }, // 4 { 5, 0, 0, PC_EXPLICIT }, // 5 { 6, 0, 0, PC_EXPLICIT }, // 6 { 7, 0, 0, PC_EXPLICIT }, // 7 { 8, 0, 0, PC_EXPLICIT }, // 8 { 9, 0, 0, PC_EXPLICIT }, // 9 { 10, 0, 0, PC_EXPLICIT }, // 10 { 11, 0, 0, PC_EXPLICIT }, // 11 { 12, 0, 0, PC_EXPLICIT }, // 12 { 13, 0, 0, PC_EXPLICIT }, // 13 { 14, 0, 0, PC_EXPLICIT }, // 14 { 15, 0, 0, PC_EXPLICIT } // 15 } }; BYTE gajTemp[64 * 64]; VOID vTestDIB(HWND hwnd, HDC hdcScreen, RECT* prcl) { HBITMAP hbm1Cat, hbm1Cat0, hbm4Lines, hbm4Lines0, hbm8Lines, hbm8Lines0; HBITMAP hbm1, hbm2, hbm1BigCat, hbm1BigCat0; HDC hdc1Cat, hdc1Cat0, hdc4Lines, hdc4Lines0, hdc8Lines, hdc8Lines0; HDC hdc1BigCat, hdc1BigCat0, hbmDefault; BYTE *pjTmpBuffer1, *pjTmpBuffer2; ULONG ScreenWidth, ScreenHeight; SIZE size; HPALETTE hpalDefault, hpalVGA, hpalExplicit; ULONG ulTemp; hwnd = hwnd; prcl = prcl; if (sizeof(int) != sizeof(LONG)) DbgPrint("Error sizes of int vTEstDIB\n"); hpalVGA = CreatePalette((LOGPALETTE *) &logPalVGA); hpalDefault = SelectPalette(hdcScreen, hpalVGA, 0); RealizePalette(hdcScreen); ScreenWidth = GetDeviceCaps(hdcScreen, HORZRES); ScreenHeight = GetDeviceCaps(hdcScreen, VERTRES); // We create 6 formats of bitmaps for testing. 2 of each. 1 backup // so we can refresh after every draw. The ****0 is the backup. hbm1 = CreateCompatibleBitmap(hdcScreen, 100, 100); hbm2 = CreateCompatibleBitmap(hdcScreen, 200,200); GetBitmapDimensionEx(hbm1,&size); if ((size.cx != 0) || (size.cy != 0)) DbgPrint("Error GEtBimdim"); SetBitmapDimensionEx(hbm1, 100, 100, &size); if ((size.cx != 0) || (size.cy != 0)) DbgPrint("Error GEtBimdim1"); GetBitmapDimensionEx(hbm1, &size); if ((size.cx != 100) || (size.cy != 100)) DbgPrint("Error GEtBimdim2"); DeleteObject(hbm1); DeleteObject(hbm2); hdc1BigCat = CreateCompatibleDC(hdcScreen); hdc1BigCat0 = CreateCompatibleDC(hdcScreen); hdc1Cat = CreateCompatibleDC(hdcScreen); hdc1Cat0 = CreateCompatibleDC(hdcScreen); hdc4Lines = CreateCompatibleDC(hdcScreen); hdc4Lines0 = CreateCompatibleDC(hdcScreen); hdc8Lines = CreateCompatibleDC(hdcScreen); hdc8Lines0 = CreateCompatibleDC(hdcScreen); if ((hdc1Cat == 0) || (hdc8Lines0 == 0) || (hdcScreen == 0)) DbgPrint("ERROR hdc creation %lu %lu %lu \n", hdcScreen, hdc8Lines0, hdc1Cat); // Clear the screen BitBlt(hdcScreen, 0, 0, 640, 480, (HDC) 0, 0, 0, 0); _bmiPat.bmiHeader.biWidth = 32; hbm1Cat = CreateDIBitmap(0, (BITMAPINFOHEADER *) &_bmiPat, CBM_INIT, abBitCat, (BITMAPINFO *) &_bmiPat, DIB_RGB_COLORS); if (hbm1Cat == 0) DbgPrint("hbm1Cat failed\n"); _bmiPat.bmiHeader.biWidth = 128; hbm1BigCat = CreateDIBitmap(0, (BITMAPINFOHEADER *) &_bmiPat, CBM_INIT, abBigCat, (BITMAPINFO *) &_bmiPat, DIB_RGB_COLORS); if (hbm1BigCat == 0) DbgPrint("hbm1BigCat failed\n"); hbm4Lines = CreateDIBitmap(hdcScreen, (BITMAPINFOHEADER *) &_bmiPat1, CBM_INIT | CBM_CREATEDIB, _abColorLines, (BITMAPINFO *) &_bmiPat1, DIB_RGB_COLORS); if (hbm4Lines == 0) DbgPrint("hbm4Lines failed\n"); hbm8Lines = CreateDIBitmap(hdcScreen, (BITMAPINFOHEADER *) &_bmiPat2, CBM_INIT | CBM_CREATEDIB, _abColorLines2, (BITMAPINFO *) &_bmiPat2, DIB_RGB_COLORS); if (hbm8Lines == 0) DbgPrint("hbm8Lines failed\n"); hbmDefault = SelectObject(hdc1Cat, hbm1Cat); SelectObject(hdc1BigCat, hbm1BigCat); SelectObject(hdc4Lines, hbm4Lines); SelectObject(hdc8Lines, hbm8Lines); if(!BitBlt(hdcScreen, 0, 200, 32, 32, hdc1Cat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 64, 200, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 196, 200, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 0, 300, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // Let's do some CreateCompatibleBitmap calls hbm1 = CreateCompatibleBitmap(hdcScreen, 100, 100); hbm2 = CreateCompatibleBitmap(hdcScreen, 128,128); SelectObject(hdc8Lines0,hbm1); BitBlt(hdc8Lines0, 0,0,64,64, hdc4Lines, 0, 0, SRCCOPY); BitBlt(hdc8Lines0, 0,64,32,32, hdc1Cat, 0,0, SRCCOPY); BitBlt(hdc8Lines0, 0,0, 30,30, (HDC) 0, 0, 0, PATCOPY); SelectObject(hdc4Lines0, hbm2); BitBlt(hdc4Lines0, 0, 0, 100, 100, hdc8Lines0, 0, 0, SRCCOPY); BitBlt(hdcScreen, 400,200, 100, 100, hdc4Lines0, 0, 0, SRCCOPY); // Ok let's throw in some CreateCompatible calls. hbm1Cat0 = CreateCompatibleBitmap(hdc1Cat, 32, 32); hbm1BigCat0 = CreateCompatibleBitmap(hdc1BigCat, 128, 32); hbm4Lines0 = CreateCompatibleBitmap(hdc4Lines, 64, 64); hbm8Lines0 = CreateCompatibleBitmap(hdc8Lines, 32, 32); // Ok do a SetDibBits on them to see if that works. SetDIBits(hdcScreen, hbm8Lines0, 0, 32, _abColorLines2, (BITMAPINFO *) &_bmiPat2, DIB_RGB_COLORS); SetDIBits(hdcScreen, hbm8Lines0, 0, 32, _abColorLines2, (BITMAPINFO *) &_bmiPat2, DIB_RGB_COLORS); SelectObject(hdc8Lines0, hbm8Lines0); if(!BitBlt(hdcScreen, 228, 200, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); SetDIBits(hdcScreen, hbm4Lines0, 0, 64, _abColorLines, (BITMAPINFO *) &_bmiPat1, DIB_RGB_COLORS); SetDIBits(hdcScreen, hbm4Lines0, 0, 64, _abColorLines, (BITMAPINFO *) &_bmiPat1, DIB_RGB_COLORS); SelectObject(hdc4Lines0, hbm4Lines0); if(!BitBlt(hdcScreen, 128, 200, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // Lets test RLE8 compression to see if we get round trip conversion with // SetDIBits:NON_RLE -> GetDIBits:RLE -> SetDIB:RLE -> GetDIBits:NON_RLE _bmiPat2.bmiHeader.biCompression = BI_RGB; _bmiPat2.bmiHeader.biSizeImage = 0; _bmiPat2.bmiHeader.biBitCount = 8; if( !GetDIBits( hdcScreen, hbm8Lines, 0, 0, NULL, (BITMAPINFO *) &_bmiPat2, DIB_PAL_INDICES )) { DbgPrint( "RLE: GetDIBits hbmLines failed\n" ); } if( ( pjTmpBuffer1 = LocalAlloc( LMEM_FIXED, _bmiPat2.bmiHeader.biSizeImage )) == NULL ) { DbgPrint( "Local Alloc Failed\n"); } if( !GetDIBits( hdcScreen, hbm8Lines, 0, _bmiPat2.bmiHeader.biHeight, pjTmpBuffer1, (BITMAPINFO *) &_bmiPat2, DIB_PAL_INDICES )) { DbgPrint( "GetDIBits hbm8Lines failed\n" ); } _bmiPat2.bmiHeader.biCompression = BI_RLE8; _bmiPat2.bmiHeader.biSizeImage = 0; _bmiPat2.bmiHeader.biBitCount = 8; if( !GetDIBits( hdcScreen, hbm8Lines, 0, 0, NULL, (BITMAPINFO *) &_bmiPat2, DIB_PAL_INDICES )) { DbgPrint( "RLE: GetDIBits hbmLines failed\n" ); } if( _bmiPat2.bmiHeader.biCompression != BI_RLE8 ) { DbgPrint( "GetDIBits failed to return BI_RLE8\n" ); } if( ( pjTmpBuffer2 = LocalAlloc( LMEM_FIXED, _bmiPat2.bmiHeader.biSizeImage )) == NULL ) { DbgPrint( "Local Alloc Failed\n"); } if( !GetDIBits( hdcScreen, hbm8Lines, 0, _bmiPat2.bmiHeader.biHeight, pjTmpBuffer2, (BITMAPINFO *) &_bmiPat2, DIB_PAL_INDICES )) { DbgPrint( "RLE8: GetDIBits hbmLines failed\n" ); } SetDIBits(hdcScreen, hbm8Lines, 0, 64, pjTmpBuffer2, (BITMAPINFO *) &_bmiPat2, DIB_PAL_INDICES); LocalFree( pjTmpBuffer2 ); _bmiPat2.bmiHeader.biCompression = BI_RGB; _bmiPat2.bmiHeader.biSizeImage = 0; if( !GetDIBits( hdcScreen, hbm8Lines, 0, 0, NULL, (BITMAPINFO *) &_bmiPat2, DIB_PAL_INDICES )) { DbgPrint( "RLE: GetDIBits hbm8Lines failed\n" ); } if( ( pjTmpBuffer2 = LocalAlloc( LMEM_FIXED, _bmiPat2.bmiHeader.biSizeImage )) == NULL ) { DbgPrint( "RLE: Local Alloc Failed\n"); } if( !GetDIBits( hdcScreen, hbm8Lines, 0, _bmiPat2.bmiHeader.biHeight, pjTmpBuffer2, (BITMAPINFO *) &_bmiPat2, DIB_PAL_INDICES )) { DbgPrint( "RLE8: GetDIBits hbmLines failed\n" ); } if( _bmiPat2.bmiHeader.biSizeImage != 32 * 32 ) { DbgPrint( "RLE8: Get/Set DIBits fails. bmiHeader.biSize != 32 * 32\n"); } else { int ii; for( ii = 0; ii < 32 * 32; ii ++ ) if( pjTmpBuffer1[ii] != pjTmpBuffer2[ii] ) DbgPrint( "RLE8: Get/Set DIBits byte %d doesn't match.\n", ii ); } LocalFree( pjTmpBuffer1 ); LocalFree( pjTmpBuffer2 ); // Lets test RLE4 compression to see if we get round trip conversion with // SetDIBits:NON_RLE -> GetDIBits:RLE -> SetDIB:RLE -> GetDIBits:NON_RLE _bmiPat.bmiHeader.biCompression = BI_RGB; _bmiPat.bmiHeader.biSizeImage = 0; _bmiPat.bmiHeader.biBitCount = 4; if( !GetDIBits( hdcScreen, hbm4Lines, 0, 0, NULL, (BITMAPINFO *) &_bmiPat, DIB_PAL_INDICES )) { DbgPrint( "GetDIBits hbm4Lines failed\n" ); } if( ( pjTmpBuffer1 = LocalAlloc( LMEM_FIXED, _bmiPat.bmiHeader.biSizeImage )) == NULL ) { DbgPrint( "Local Alloc Failed\n"); } if( !GetDIBits( hdcScreen, hbm4Lines, 0, _bmiPat.bmiHeader.biHeight, pjTmpBuffer1, (BITMAPINFO *) &_bmiPat, DIB_PAL_INDICES )) { DbgPrint( "GetDIBits hbm4Lines failed\n" ); } _bmiPat.bmiHeader.biCompression = BI_RLE4; _bmiPat.bmiHeader.biSizeImage = 0; _bmiPat.bmiHeader.biBitCount = 4; if( !GetDIBits( hdcScreen, hbm4Lines, 0, 0, NULL, (BITMAPINFO *) &_bmiPat, DIB_PAL_INDICES )) { DbgPrint( "GetDIBits hbm4Lines failed\n" ); } if( _bmiPat.bmiHeader.biCompression != BI_RLE4 ) { DbgPrint( "RLE4: GetDIBits failed to return BI_RLE4 in biCompression\n" ); } if( ( pjTmpBuffer2 = LocalAlloc( LMEM_FIXED, _bmiPat.bmiHeader.biSizeImage )) == NULL ) { DbgPrint( "Local Alloc Failed\n"); } if( !GetDIBits( hdcScreen, hbm4Lines, 0, _bmiPat.bmiHeader.biHeight, pjTmpBuffer2, (BITMAPINFO *) &_bmiPat, DIB_PAL_INDICES )) { DbgPrint( "GetDIBits hbm4Lines failed\n" ); } SetDIBits(hdcScreen, hbm4Lines, 0, 64, pjTmpBuffer2, (BITMAPINFO *) &_bmiPat, DIB_PAL_INDICES); LocalFree( pjTmpBuffer2 ); _bmiPat.bmiHeader.biCompression = BI_RGB; _bmiPat.bmiHeader.biSizeImage = 0; if( !GetDIBits( hdcScreen, hbm4Lines, 0, 0, NULL, (BITMAPINFO *) &_bmiPat, DIB_PAL_INDICES )) { DbgPrint( "GetDIBits hbm4Lines failed\n" ); } if( ( pjTmpBuffer2 = LocalAlloc( LMEM_FIXED, _bmiPat.bmiHeader.biSizeImage )) == NULL ) { DbgPrint( "Local Alloc Failed\n"); } if( !GetDIBits( hdcScreen, hbm4Lines, 0, _bmiPat.bmiHeader.biHeight, pjTmpBuffer2, (BITMAPINFO *) &_bmiPat, DIB_PAL_INDICES )) { DbgPrint( "GetDIBits hbmLines failed\n" ); } if( _bmiPat.bmiHeader.biSizeImage != 64 * 32) { DbgPrint( "RLE4: Get/Set DIBits fails. bmiHeader.biSize != 64 * 32\n"); } else { int ii; for( ii = 0; ii < 64 * 32; ii ++ ) if( pjTmpBuffer1[ii] != pjTmpBuffer2[ii] ) DbgPrint( "RLE4 Get/Set DIBits byte %d doesn't match.\n", ii ); } LocalFree( pjTmpBuffer1 ); LocalFree( pjTmpBuffer2 ); _bmiPat.bmiHeader.biWidth = 32; SetDIBits(hdcScreen, hbm1Cat0, 0, 32, abBitCat, (BITMAPINFO *) &_bmiPat, DIB_RGB_COLORS); SelectObject(hdc1Cat0, hbm1Cat0); if(!BitBlt(hdcScreen, 32, 200, 32, 32, hdc1Cat0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); _bmiPat.bmiHeader.biWidth = 128; SetDIBits(hdcScreen, hbm1BigCat0, 0, 32, abBigCat, (BITMAPINFO *) &_bmiPat, DIB_RGB_COLORS); SelectObject(hdc1BigCat0, hbm1BigCat0); if(!BitBlt(hdcScreen, 128, 300, 128, 32, hdc1BigCat0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); DeleteObject(hbm1); DeleteObject(hbm2); StretchBlt(hdcScreen, 0, 0, 100, 100, hdc1Cat, 0, 0, 32, 32, SRCCOPY); StretchBlt(hdcScreen, 0, 0, 0, 0, hdc1Cat, 0, 0, 32, 32, SRCCOPY); StretchBlt(hdcScreen, 0, 0, 100, 100, hdc1Cat, 0, 0, 0, 0, SRCCOPY); StretchBlt(hdcScreen, 100, 0, 100, 100, hdc4Lines, 0, 0, 64, 64, SRCCOPY); StretchBlt(hdcScreen, 200, 0, 100, 100, hdc8Lines, 0, 0, 32, 32, SRCCOPY); StretchBlt(hdcScreen, 0, 100, 10, 10, hdc1Cat, 0, 0, 32, 32, SRCCOPY); StretchBlt(hdcScreen, 100, 100, 10, 10, hdc4Lines, 0, 0, 64, 64, SRCCOPY); StretchBlt(hdcScreen, 200, 100, 10, 10, hdc8Lines, 0, 0, 32, 32, SRCCOPY); StretchBlt(hdc1BigCat0, 0, 0, 128, 32, hdc1Cat, 0, 0, 32, 32, SRCCOPY); if(!BitBlt(hdcScreen, 256, 300, 128, 32, hdc1BigCat0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // Now try and initialize them with srccopy. if(!BitBlt(hdc1Cat0, 0, 0, 32, 32, hdc1Cat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc1BigCat0, 0, 0, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines0, 0, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines0, 0, 0, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // Ok real quick here let's test if CreateCompatible Bitmap does an // identity blt to the screen. if(!BitBlt(hdcScreen, 32, 200, 32, 32, hdc1Cat0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 200, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 228, 200, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 300, 128, 32, hdc1BigCat0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /********************************************************************* 4 on 4 tests ***********************************************************************/ // Now let's test the 4 to 4 case even odd. if(!BitBlt(hdc4Lines, 0, 0, 8, 8, hdc4Lines, 23, 23, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 0, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 56, 56, 8, 8, hdc4Lines, 15, 15, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 64, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 56, 0, 8, 8, hdc4Lines, 15, 15, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 56, 8, 8, hdc4Lines, 23, 23, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 192, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 15, 15, 10, 10, hdc4Lines, 15, 15, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 256, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 320, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // Now let's test the 4 to 4 case even. if(!BitBlt(hdc4Lines, 0, 0, 8, 8, hdc4Lines, 24, 24, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 384, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 56, 56, 8, 8, hdc4Lines, 16, 16, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 448, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 56, 0, 8, 8, hdc4Lines, 16, 16, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 512, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 56, 8, 8, hdc4Lines, 24, 24, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 576, 0, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 16, 16, 8, 14, hdc4Lines, 16, 16, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 0, 64, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 64, 64, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************** Now do the 8 on 4 tests **************************************************************************/ if(!BitBlt(hdc4Lines, 16, 16, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 0, 128, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 15, 15, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 64, 128, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 15, 15, 31, 31, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 128, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 16, 16, 31, 31, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 192, 128, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 256, 128, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************ Now let's try the 1 on 4 tests *************************************************************************/ if(!BitBlt(hdc4Lines, 16, 16, 32, 32, hdc1Cat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 0, 192, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 15, 15, 32, 32, hdc1Cat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 64, 192, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 15, 15, 31, 31, hdc1Cat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 192, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 16, 16, 31, 31, hdc1Cat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 192, 192, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 256, 192, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /********************************************************************* 8 on 8 tests ***********************************************************************/ if(!BitBlt(hdc8Lines, 16, 16, 8, 8, hdc8Lines0, 16, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 0, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 1, 1, 29, 29, hdc8Lines0, 1, 1, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 24, 24, 8, 8, hdc8Lines, 16, 16, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 32, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 0, 24, 8, 8, hdc8Lines, 16, 16, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 64, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 24, 0, 8, 8, hdc8Lines, 16, 16, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 96, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 0, 0, 8, 8, hdc8Lines, 16, 16, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 16, 16, 8, 8, hdc8Lines, 16, 16, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 0, 0, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 160, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************ Test 1 to 8 blting *************************************************************************/ if(!BitBlt(hdc8Lines, 4,4, 16, 16, hdc1Cat, 4, 4, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 192, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 4, 4, 17, 17, hdc1Cat, 4, 4, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 224, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 3, 3, 25, 25, hdc1Cat, 3, 3, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 256, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 3, 3, 26, 26, hdc1Cat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 288, 256, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 0, 0, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 320, 256, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************* Test 4 to 8 blting **************************************************************************/ if(!BitBlt(hdc8Lines, 4,4, 16, 16, hdc4Lines, 4, 4, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 0, 288, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 4, 4, 17, 17, hdc4Lines, 4, 4, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 32, 288, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 3, 3, 25, 25, hdc4Lines, 3, 3, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 64, 288, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 3, 3, 26, 26, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 96, 288, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 0, 0, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 288, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************* Test Solid Brush Output to 8 **************************************************************************/ PatBlt(hdcScreen, 0, 0, 100, 99, PATCOPY); PatBlt(hdc8Lines, 1, 0, 17, 8, PATCOPY); if(!BitBlt(hdcScreen, 0, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); PatBlt(hdc8Lines, 0, 8, 8, 8, PATCOPY); if(!BitBlt(hdcScreen, 32, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); PatBlt(hdc8Lines, 1, 16, 2, 8, PATCOPY); if(!BitBlt(hdcScreen, 64, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); PatBlt(hdc8Lines, 4, 24, 8, 8, PATCOPY); if(!BitBlt(hdcScreen, 96, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 0, 0, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************* Test Xor Output to 8 **************************************************************************/ PatBlt(hdc8Lines, 1, 0, 17, 8, DSTINVERT); if(!BitBlt(hdcScreen, 200, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); PatBlt(hdc8Lines, 0, 8, 8, 8, DSTINVERT); if(!BitBlt(hdcScreen, 232, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); PatBlt(hdc8Lines, 1, 16, 2, 8, DSTINVERT); if(!BitBlt(hdcScreen, 264, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); PatBlt(hdc8Lines, 4, 24, 8, 8, DSTINVERT); if(!BitBlt(hdcScreen, 296, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc8Lines, 0, 0, 32, 32, hdc8Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 328, 320, 32, 32, hdc8Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************* Test Solid Brush Output to 4 **************************************************************************/ BitBlt(hdcScreen, 0, 0, 32, 32, (HDC) 0, 0, 0, PATCOPY); BitBlt(hdc4Lines, 0, 0, 32, 32, hdc8Lines, 0, 0, SRCCOPY); BitBlt(hdc4Lines, 1, 0, 17, 8, (HDC) 0, 0, 0, PATCOPY); if(!BitBlt(hdcScreen, 0, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); BitBlt(hdc4Lines, 0, 8, 8, 8, (HDC) 0, 0, 0, PATCOPY); if(!BitBlt(hdcScreen, 32, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); BitBlt(hdc4Lines, 1, 16, 2, 8, (HDC) 0, 0, 0, PATCOPY); if(!BitBlt(hdcScreen, 64, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); BitBlt(hdc4Lines, 4, 24, 8, 8, (HDC) 0, 0, 0, PATCOPY); if(!BitBlt(hdcScreen, 96, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 32, 32, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 128, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************* Test Xor Output to 4 **************************************************************************/ BitBlt(hdc4Lines, 0, 0, 32, 32, hdc8Lines, 0, 0, SRCCOPY); BitBlt(hdc4Lines, 1, 0, 17, 8, (HDC) 0, 0, 0, DSTINVERT); if(!BitBlt(hdcScreen, 200, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); BitBlt(hdc4Lines, 0, 8, 8, 8, (HDC) 0, 0, 0, DSTINVERT); if(!BitBlt(hdcScreen, 232, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); BitBlt(hdc4Lines, 1, 16, 2, 8, (HDC) 0, 0, 0, DSTINVERT); if(!BitBlt(hdcScreen, 264, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); BitBlt(hdc4Lines, 4, 24, 8, 8, (HDC) 0, 0, 0, DSTINVERT); if(!BitBlt(hdcScreen, 296, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 32, 32, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 328, 352, 32, 32, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************* Test Solid Brush Output to 1 **************************************************************************/ BitBlt(hdcScreen, 0, 384, 640, 95, (HDC) 0, 0, 0, WHITENESS); // 2 masks no middle BitBlt(hdc1BigCat, 1, 0, 62, 8, (HDC) 0, 0, 0, PATCOPY); if(!BitBlt(hdcScreen, 0, 385, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // no masks 4 middle BitBlt(hdc1BigCat, 0, 8, 128, 8, (HDC) 0, 0, 0, PATCOPY); if(!BitBlt(hdcScreen, 129, 385, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // 1 mask, no middle BitBlt(hdc1BigCat, 5, 16, 22, 8, (HDC) 0, 0, 0, PATCOPY); if(!BitBlt(hdcScreen, 258, 385, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // 2 mask, 2 middle BitBlt(hdc1BigCat, 4, 24, 120, 8, (HDC) 0, 0, 0, PATCOPY); if(!BitBlt(hdcScreen, 387, 385, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************* Test Xor Output to 1 **************************************************************************/ // 2 masks no middle BitBlt(hdc1BigCat, 1, 0, 62, 8, (HDC) 0, 0, 0, DSTINVERT); if(!BitBlt(hdcScreen, 0, 418, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // no masks 4 middle BitBlt(hdc1BigCat, 0, 8, 128, 8, (HDC) 0, 0, 0, DSTINVERT); if(!BitBlt(hdcScreen, 129, 418, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // 1 mask, no middle BitBlt(hdc1BigCat, 5, 16, 22, 8, (HDC) 0, 0, 0, DSTINVERT); if(!BitBlt(hdcScreen, 258, 418, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // 2 mask, 2 middle BitBlt(hdc1BigCat, 4, 24, 120, 8, (HDC) 0, 0, 0, DSTINVERT); if(!BitBlt(hdcScreen, 387, 418, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); // clean up if(!BitBlt(hdc1BigCat, 0, 0, 128, 32, hdc1BigCat0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 400, 352, 128, 32, hdc1BigCat, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); /************************************************************************* SetDIBitsToDevice calls **************************************************************************/ // DbgBreakPoint(); PatBlt(hdcScreen, 0, 0, ScreenWidth, ScreenHeight, WHITENESS); _bmiPat.bmiHeader.biWidth = 32; SetDIBitsToDevice(hdcScreen, 0, 0, 32, 32, 0, 0, 0, 32, abBitCat, (LPBITMAPINFO) &_bmiPat, DIB_RGB_COLORS); _bmiPat.bmiHeader.biWidth = 128; SetDIBitsToDevice(hdcScreen, 32, 0, 128, 32, 0, 0, 0, 32, abBigCat, (LPBITMAPINFO) &_bmiPat, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 160, 0, 64, 64, 0, 0, 0, 64, _abColorLines, (LPBITMAPINFO) &_bmiPat1, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 224, 0, 32, 32, 0, 0, 0, 32, _abColorLines2, (LPBITMAPINFO) &_bmiPat2, DIB_RGB_COLORS); _bmiPat.bmiHeader.biWidth = 32; SetDIBitsToDevice(hdcScreen, 0, 100, 32, 32, 0, 0, 0, 16, abBitCat, (LPBITMAPINFO) &_bmiPat, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 0, 100, 32, 32, 0, 0, 16, 16, &abBitCat[16 * 4], (LPBITMAPINFO) &_bmiPat, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 0, 200, 32, 32, 0, 0, 16, 16, &abBitCat[16 * 4], (LPBITMAPINFO) &_bmiPat, DIB_RGB_COLORS); // DbgBreakPoint(); SetDIBitsToDevice(hdcScreen, 0, 200, 32, 32, 0, 0, 0, 16, abBitCat, (LPBITMAPINFO) &_bmiPat, DIB_RGB_COLORS); _bmiPat.bmiHeader.biWidth = 128; SetDIBitsToDevice(hdcScreen, 32, 100, 128, 32, 0, 0, 0, 16, abBigCat, (LPBITMAPINFO) &_bmiPat, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 32, 100, 128, 32, 0, 0, 16, 16, &abBigCat[16 * 16], (LPBITMAPINFO) &_bmiPat, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 160, 100, 64, 64, 0, 0, 0, 32, _abColorLines, (LPBITMAPINFO) &_bmiPat1, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 160, 100, 64, 64, 0, 0, 32, 32, &_abColorLines[64 * 16], (LPBITMAPINFO) &_bmiPat1, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 224, 100, 32, 32, 0, 0, 0, 16, _abColorLines2, (LPBITMAPINFO) &_bmiPat2, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 224, 100, 32, 32, 0, 0, 16, 16, &_abColorLines2[32 * 16], (LPBITMAPINFO) &_bmiPat2, DIB_RGB_COLORS); /******************************Public*Routine******************************\ * * SetPixel testing. * * History: * 21-Apr-1991 -by- Patrick Haluptzok patrickh * Wrote it. \**************************************************************************/ { ULONG xDst; // DbgBreakPoint(); // First Black out the screen. BitBlt(hdcScreen, 0, 0, 640, 480, (HDC) 0, 0, 0, WHITENESS); for (xDst = 0; xDst < 10; xDst++) { SetPixel(hdcScreen, xDst, 10, RGB(0xFF, 0, 0)); SetPixel(hdcScreen, xDst, 11, RGB(0xFF, 0, 0)); SetPixel(hdcScreen, xDst, 12, RGB(0xFF, 0, 0)); SetPixel(hdcScreen, xDst, 13, RGB(0xFF, 0, 0)); SetPixel(hdcScreen, xDst, 14, RGB(0xFF, 0, 0)); SetPixel(hdcScreen, xDst, 20, RGB(0, 0xFF, 0)); SetPixel(hdcScreen, xDst, 21, RGB(0, 0xFF, 0)); SetPixel(hdcScreen, xDst, 22, RGB(0, 0xFF, 0)); SetPixel(hdcScreen, xDst, 23, RGB(0, 0xFF, 0)); SetPixel(hdcScreen, xDst, 24, RGB(0, 0xFF, 0)); SetPixel(hdcScreen, xDst, 30, RGB(0, 0, 0xFF)); SetPixel(hdcScreen, xDst, 31, RGB(0, 0, 0xFF)); SetPixel(hdcScreen, xDst, 32, RGB(0, 0, 0xFF)); SetPixel(hdcScreen, xDst, 33, RGB(0, 0, 0xFF)); SetPixel(hdcScreen, xDst, 34, RGB(0, 0, 0xFF)); SetPixel(hdcScreen, xDst, 40, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdcScreen, xDst, 41, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdcScreen, xDst, 42, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdcScreen, xDst, 43, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdcScreen, xDst, 44, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdcScreen, xDst, 50, PALETTEINDEX(0)); SetPixel(hdcScreen, xDst, 51, PALETTEINDEX(0)); SetPixel(hdcScreen, xDst, 52, PALETTEINDEX(0)); SetPixel(hdcScreen, xDst, 53, PALETTEINDEX(0)); SetPixel(hdcScreen, xDst, 54, PALETTEINDEX(0)); SetPixel(hdcScreen, xDst, 61, PALETTEINDEX(1)); SetPixel(hdcScreen, xDst, 62, PALETTEINDEX(1)); SetPixel(hdcScreen, xDst, 63, PALETTEINDEX(1)); SetPixel(hdcScreen, xDst, 64, PALETTEINDEX(1)); SetPixel(hdcScreen, xDst, 65, PALETTEINDEX(1)); SetPixel(hdcScreen, xDst, 70, PALETTEINDEX(2)); SetPixel(hdcScreen, xDst, 71, PALETTEINDEX(2)); SetPixel(hdcScreen, xDst, 72, PALETTEINDEX(2)); SetPixel(hdcScreen, xDst, 73, PALETTEINDEX(2)); SetPixel(hdcScreen, xDst, 74, PALETTEINDEX(2)); SetPixel(hdcScreen, xDst, 80, PALETTEINDEX(3)); SetPixel(hdcScreen, xDst, 81, PALETTEINDEX(3)); SetPixel(hdcScreen, xDst, 82, PALETTEINDEX(3)); SetPixel(hdcScreen, xDst, 83, PALETTEINDEX(3)); SetPixel(hdcScreen, xDst, 84, PALETTEINDEX(3)); SetPixel(hdcScreen, xDst, 90, PALETTEINDEX(4)); SetPixel(hdcScreen, xDst, 91, PALETTEINDEX(4)); SetPixel(hdcScreen, xDst, 92, PALETTEINDEX(4)); SetPixel(hdcScreen, xDst, 93, PALETTEINDEX(4)); SetPixel(hdcScreen, xDst, 94, PALETTEINDEX(4)); } BitBlt(hdc4Lines, 0, 0, 64, 64, (HDC) 0, 0, 0, BLACKNESS); for (xDst = 0; xDst < 16; xDst++) { if (0x000000FF != SetPixel(hdc4Lines, xDst, 0, RGB(0xFF, 0, 0))) DbgPrint("Wrong return value1\n"); ulTemp = GetPixel(hdc4Lines, xDst, 0); if (0x000000FF != ulTemp) DbgPrint("Wrong return value1.5 %lx\n", ulTemp); SetPixel(hdc4Lines, xDst, 1, RGB(0xFF, 0, 0)); SetPixel(hdc4Lines, xDst, 2, RGB(0xFF, 0, 0)); SetPixel(hdc4Lines, xDst, 3, RGB(0xFF, 0, 0)); SetPixel(hdc4Lines, xDst, 4, RGB(0xFF, 0, 0)); if (0x0000FF00 != SetPixel(hdc4Lines, xDst, 10, RGB(0, 0xFF, 0))) DbgPrint("Wrong return value2\n"); ulTemp = GetPixel(hdc4Lines, xDst, 10); if (0x0000FF00 != ulTemp) DbgPrint("Wrong return value2.5 %lx \n", ulTemp); SetPixel(hdc4Lines, xDst, 11, RGB(0, 0xFF, 0)); SetPixel(hdc4Lines, xDst, 12, RGB(0, 0xFF, 0)); SetPixel(hdc4Lines, xDst, 13, RGB(0, 0xFF, 0)); SetPixel(hdc4Lines, xDst, 14, RGB(0, 0xFF, 0)); if (0x00FF0000 != SetPixel(hdc4Lines, xDst, 20, RGB(0, 0, 0xFF))) DbgPrint("Wrong value returned3\n"); if (0x00FF0000 != GetPixel(hdc4Lines, xDst, 20)) DbgPrint("Wrong return value3.5\n"); SetPixel(hdc4Lines, xDst, 21, RGB(0, 0, 0xFF)); SetPixel(hdc4Lines, xDst, 22, RGB(0, 0, 0xFF)); SetPixel(hdc4Lines, xDst, 23, RGB(0, 0, 0xFF)); SetPixel(hdc4Lines, xDst, 24, RGB(0, 0, 0xFF)); SetPixel(hdc4Lines, xDst, 30, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdc4Lines, xDst, 31, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdc4Lines, xDst, 32, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdc4Lines, xDst, 33, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdc4Lines, xDst, 34, RGB(0xFF, 0xFF, 0xFF)); SetPixel(hdc4Lines, xDst, 40, PALETTEINDEX(0)); SetPixel(hdc4Lines, xDst, 41, PALETTEINDEX(0)); SetPixel(hdc4Lines, xDst, 42, PALETTEINDEX(0)); SetPixel(hdc4Lines, xDst, 43, PALETTEINDEX(0)); SetPixel(hdc4Lines, xDst, 44, PALETTEINDEX(0)); SetPixel(hdc4Lines, xDst, 45, PALETTEINDEX(1)); SetPixel(hdc4Lines, xDst, 46, PALETTEINDEX(1)); SetPixel(hdc4Lines, xDst, 47, PALETTEINDEX(1)); SetPixel(hdc4Lines, xDst, 48, PALETTEINDEX(1)); SetPixel(hdc4Lines, xDst, 49, PALETTEINDEX(1)); SetPixel(hdc4Lines, xDst, 50, PALETTEINDEX(2)); SetPixel(hdc4Lines, xDst, 51, PALETTEINDEX(2)); SetPixel(hdc4Lines, xDst, 52, PALETTEINDEX(2)); SetPixel(hdc4Lines, xDst, 53, PALETTEINDEX(2)); SetPixel(hdc4Lines, xDst, 54, PALETTEINDEX(2)); SetPixel(hdc4Lines, xDst, 55, PALETTEINDEX(3)); SetPixel(hdc4Lines, xDst, 56, PALETTEINDEX(3)); SetPixel(hdc4Lines, xDst, 57, PALETTEINDEX(3)); SetPixel(hdc4Lines, xDst, 58, PALETTEINDEX(3)); SetPixel(hdc4Lines, xDst, 59, PALETTEINDEX(3)); SetPixel(hdc4Lines, xDst, 60, PALETTEINDEX(4)); SetPixel(hdc4Lines, xDst, 61, PALETTEINDEX(4)); SetPixel(hdc4Lines, xDst, 62, PALETTEINDEX(4)); SetPixel(hdc4Lines, xDst, 63, PALETTEINDEX(4)); } if(!BitBlt(hdcScreen, 0, 100, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdc4Lines, 0, 0, 64, 64, hdc4Lines0, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); if(!BitBlt(hdcScreen, 0, 200, 64, 64, hdc4Lines, 0, 0, SRCCOPY)) DbgPrint("ERROR: BitBlt returned FALSE\n"); } // Time for GetDIBits tests { BITMAPINFOPAT bmiPatTemp; ULONG ulTemp; PUSHORT pusTemp; PBYTE pjTemp; pjTemp = (PBYTE) &bmiPatTemp; bmiPatTemp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmiPatTemp.bmiHeader.biBitCount = 0; // First let's see if it fills in the header correctly. if (!GetDIBits(hdcScreen, hbm4Lines, 0, 64, NULL, (BITMAPINFO *) &bmiPatTemp, DIB_RGB_COLORS)) { DbgPrint("GetDIBits returned False0\n"); } // First let's see if it fills in a header and rgbquads correctly if (!GetDIBits(hdcScreen, hbm4Lines, 0, 64, NULL, (BITMAPINFO *) &bmiPatTemp, DIB_RGB_COLORS)) { DbgPrint("GetDIBits returned False0\n"); } // Ok let's see if it returned what we expected if (bmiPatTemp.bmiHeader.biSize != sizeof(BITMAPINFOHEADER)) DbgPrint("Error GetDIBits returned wrong info1\n"); if (bmiPatTemp.bmiHeader.biWidth != _bmiPat1.bmiHeader.biWidth) DbgPrint("Error GetDIBits returned wrong info2\n"); if (bmiPatTemp.bmiHeader.biHeight != _bmiPat1.bmiHeader.biHeight) { if (bmiPatTemp.bmiHeader.biHeight == -_bmiPat1.bmiHeader.biHeight) { bmiPatTemp.bmiHeader.biHeight = -bmiPatTemp.bmiHeader.biHeight; } else { DbgPrint("Error GetDIBits returned wrong info3\n"); } } if (bmiPatTemp.bmiHeader.biPlanes != 1) DbgPrint("Error GetDIBits returned wrong info4\n"); if (bmiPatTemp.bmiHeader.biCompression != BI_RGB) DbgPrint("Error GetDIBits returned wrong info5\n"); if (bmiPatTemp.bmiHeader.biBitCount != _bmiPat1.bmiHeader.biBitCount) DbgPrint("Error GetDIBits returned wrong info6\n"); if (bmiPatTemp.bmiHeader.biXPelsPerMeter != 0) DbgPrint("Error GetDIBits returned wrong info8\n"); if (bmiPatTemp.bmiHeader.biYPelsPerMeter != 0) DbgPrint("Error GetDIBits returned wrong info9\n"); if (bmiPatTemp.bmiHeader.biClrUsed != _bmiPat1.bmiHeader.biClrUsed) DbgPrint("Error GetDIBits returned wrong info10\n"); if (bmiPatTemp.bmiHeader.biClrImportant != _bmiPat1.bmiHeader.biClrImportant) DbgPrint("Error GetDIBits returned wrong info11\n"); // Ok let's get studly. Let's get the whole mofo bitmap if (!GetDIBits(hdcScreen, hbm4Lines, 0, 64, gajTemp, (BITMAPINFO *) &bmiPatTemp, DIB_RGB_COLORS)) { DbgPrint("GetDIBits returned False1\n"); } // How about the color table. for (ulTemp = 0; ulTemp < 16; ulTemp++) { if (_bmiPat1.bmiColors[ulTemp].rgbRed != bmiPatTemp.bmiColors[ulTemp].rgbRed) { DbgPrint("Error Red is wrong555\n"); } if (_bmiPat1.bmiColors[ulTemp].rgbBlue != bmiPatTemp.bmiColors[ulTemp].rgbBlue) { DbgPrint("Error Blue is wrong5555\n"); } if (_bmiPat1.bmiColors[ulTemp].rgbGreen != bmiPatTemp.bmiColors[ulTemp].rgbGreen) { DbgPrint("Error Green is wrong5555\n"); } if (_bmiPat1.bmiColors[ulTemp].rgbReserved != bmiPatTemp.bmiColors[ulTemp].rgbReserved) { DbgPrint("Error Reserved is wrong5555\n"); } } // Compare the bits for (ulTemp = 0; ulTemp < 64 * 32; ulTemp++) { if (gajTemp[ulTemp] != _abColorLines[ulTemp]) DbgPrint("1Error unmatching bytes %lu (%x vs %x)\n", ulTemp, gajTemp[ulTemp], _abColorLines[ulTemp]); } // Ok let's see if it returned header and colors we expected if (bmiPatTemp.bmiHeader.biSize != sizeof(BITMAPINFOHEADER)) DbgPrint("Error GetDIBits returned wrong info1\n"); if (bmiPatTemp.bmiHeader.biWidth != _bmiPat1.bmiHeader.biWidth) DbgPrint("Error GetDIBits returned wrong info2\n"); if (bmiPatTemp.bmiHeader.biHeight != _bmiPat1.bmiHeader.biHeight) { if (bmiPatTemp.bmiHeader.biHeight == -_bmiPat1.bmiHeader.biHeight) { } else { DbgPrint("Error GetDIBits returned wrong info3\n"); } } if (bmiPatTemp.bmiHeader.biPlanes != 1) DbgPrint("Error GetDIBits returned wrong info4\n"); if (bmiPatTemp.bmiHeader.biCompression != BI_RGB) DbgPrint("Error GetDIBits returned wrong info5\n"); if (bmiPatTemp.bmiHeader.biBitCount != _bmiPat1.bmiHeader.biBitCount) DbgPrint("Error GetDIBits returned wrong info6\n"); if (bmiPatTemp.bmiHeader.biXPelsPerMeter != 0) DbgPrint("Error GetDIBits returned wrong info8\n"); if (bmiPatTemp.bmiHeader.biYPelsPerMeter != 0) DbgPrint("Error GetDIBits returned wrong info9\n"); if (bmiPatTemp.bmiHeader.biClrUsed != _bmiPat1.bmiHeader.biClrUsed) DbgPrint("Error GetDIBits returned wrong info10\n"); if (bmiPatTemp.bmiHeader.biClrImportant != _bmiPat1.bmiHeader.biClrImportant) DbgPrint("Error GetDIBits returned wrong info11\n"); // How about the color table. for (ulTemp = 0; ulTemp < 16; ulTemp++) { if (_bmiPat1.bmiColors[ulTemp].rgbRed != bmiPatTemp.bmiColors[ulTemp].rgbRed) { DbgPrint("Error Red is wrong\n"); } if (_bmiPat1.bmiColors[ulTemp].rgbBlue != bmiPatTemp.bmiColors[ulTemp].rgbBlue) { DbgPrint("Error Blue is wrong\n"); } if (_bmiPat1.bmiColors[ulTemp].rgbGreen != bmiPatTemp.bmiColors[ulTemp].rgbGreen) { DbgPrint("Error Green is wrong\n"); } if (_bmiPat1.bmiColors[ulTemp].rgbReserved != bmiPatTemp.bmiColors[ulTemp].rgbReserved) { DbgPrint("Error Reserved is wrong\n"); } } // DbgPrint("Passed GetDIBits PAL_RGB_COLORS\n"); for (ulTemp = 16; ulTemp < (sizeof(BITMAPINFOPAT) - 16); ulTemp++) { pjTemp[ulTemp] = 0; } // Ok let's get studly. Let's get the whole mofo bitmap if (!GetDIBits(hdcScreen, hbm4Lines, 0, 64, gajTemp, (BITMAPINFO *) &bmiPatTemp, DIB_PAL_COLORS)) { DbgPrint("GetDIBits returned False2\n"); } // Ok let's see if it returned header and colors we expected if (bmiPatTemp.bmiHeader.biSize != sizeof(BITMAPINFOHEADER)) DbgPrint("Error GetDIBits returned wrong info1\n"); if (bmiPatTemp.bmiHeader.biWidth != _bmiPat1.bmiHeader.biWidth) DbgPrint("Error GetDIBits returned wrong info2\n"); if (bmiPatTemp.bmiHeader.biHeight != _bmiPat1.bmiHeader.biHeight) DbgPrint("Error GetDIBits returned wrong info3\n"); if (bmiPatTemp.bmiHeader.biPlanes != 1) DbgPrint("Error GetDIBits returned wrong info4\n"); if (bmiPatTemp.bmiHeader.biCompression != BI_RGB) DbgPrint("Error GetDIBits returned wrong info5\n"); if (bmiPatTemp.bmiHeader.biBitCount != _bmiPat1.bmiHeader.biBitCount) DbgPrint("Error GetDIBits returned wrong info6\n"); if (bmiPatTemp.bmiHeader.biXPelsPerMeter != 0) DbgPrint("Error GetDIBits returned wrong info8\n"); if (bmiPatTemp.bmiHeader.biYPelsPerMeter != 0) DbgPrint("Error GetDIBits returned wrong info9\n"); if (bmiPatTemp.bmiHeader.biClrUsed != _bmiPat1.bmiHeader.biClrUsed) DbgPrint("Error GetDIBits returned wrong info10\n"); if (bmiPatTemp.bmiHeader.biClrImportant != _bmiPat1.bmiHeader.biClrImportant) DbgPrint("Error GetDIBits returned wrong info11\n"); // DbgPrint("The header was correct for DIB_PAL_COLORS\n"); // How about the color table. pusTemp = (PUSHORT) bmiPatTemp.bmiColors; // Now see that SetDIBitsToDevice works PatBlt(hdcScreen, 0, 0, ScreenWidth, ScreenHeight, WHITENESS); SetDIBitsToDevice(hdcScreen, 0, 0, 64, 64, 0, 0, 0, 64, _abColorLines, (LPBITMAPINFO) &_bmiPat1, DIB_RGB_COLORS); SetDIBitsToDevice(hdcScreen, 64, 0, 64, 64, 0, 0, 0, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS); SetDIBitsToDevice(hdcScreen, 128, 0, 64, 64, 0, 0, 0, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS); // DbgPrint("Now trying StretchDIBits calls\n"); StretchDIBits(hdcScreen, 0, 100, 128, 128, 0, 0, 64, 64, _abColorLines, (LPBITMAPINFO) &_bmiPat1, DIB_RGB_COLORS, SRCCOPY); StretchDIBits(hdcScreen, 128, 100, 128, 128, 0, 0, 64, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS, SRCCOPY); StretchDIBits(hdcScreen, 256, 100, 128, 128, 0, 0, 64, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS, SRCCOPY); // Try doing a stretch that flips StretchDIBits(hdcScreen, 0, 232, 128, 128, 0, 0, 64, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS, SRCCOPY); StretchDIBits(hdcScreen, 256, 232, -128, 128, 0, 0, 64, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS, SRCCOPY); StretchDIBits(hdcScreen, 256, 360, 128, -128, 0, 0, 64, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS, SRCCOPY); StretchDIBits(hdcScreen, 512, 360, -128, -128, 0, 0, 64, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS, SRCCOPY); // DbgPrint("Now trying PC_EXPLICIT stuff\n"); hpalExplicit = CreatePalette((LOGPALETTE *) &palExplicit); if (hpalExplicit == (HPALETTE) 0) DbgPrint("hpalExplicit creation failed\n"); SelectPalette(hdcScreen, hpalExplicit, 0); RealizePalette(hdcScreen); SetDIBitsToDevice(hdcScreen, 192, 0, 64, 64, 0, 0, 0, 64, gajTemp, (LPBITMAPINFO) &bmiPatTemp, DIB_PAL_COLORS); } { BITMAP bm; ulTemp = GetObject(hbm8Lines, 0, (LPSTR) NULL); if (ulTemp != sizeof(BITMAP)) DbgPrint("Error in GetObject\n"); ulTemp = GetObject(hbm8Lines, sizeof(BITMAP), (LPSTR) &bm); if (ulTemp != sizeof(BITMAP)) DbgPrint("Error in GetObject\n"); if (bm.bmType != 0) DbgPrint("ERROR1\n"); if (bm.bmWidth != 32) DbgPrint("ERROR2\n"); if (bm.bmHeight != 32) DbgPrint("ERROR3\n"); if (bm.bmWidthBytes != 32) DbgPrint("ERROR4\n"); if (bm.bmBitsPixel != 8) DbgPrint("ERROR5\n"); if (bm.bmPlanes != 1) DbgPrint("ERROR6\n"); if (bm.bmBits != (LPSTR) NULL) DbgPrint("ERROR7\n"); // DbgPrint("Passed GetObject\n"); } #if 0 // CreateDIBSection tests { HDC hdcdib; HBITMAP hbm, hdib, hbmOld, hdibSection, hbmComp; HBRUSH hbr, hbrOld; int c; ULONG aRGB[4]; DIBSECTION dib; HANDLE hApp; PBYTE pjBits, pjBitsComp; PBITMAPINFOHEADER pbmih = (PBITMAPINFOHEADER)&bmiCT; PBITMAPINFO pbmi = (PBITMAPINFO)&bmiCT; // Clear Screen PatBlt(hdcScreen, 0, 0, ScreenWidth, ScreenHeight, WHITENESS); SelectPalette(hdcScreen,GetStockObject(DEFAULT_PALETTE),FALSE); RealizePalette(hdcScreen); // CreateDIBitmap with CBM_CREATEDIB, Green circle on red background hdcdib = CreateCompatibleDC(hdcScreen); hdib = CreateDIBitmap(hdcScreen,pbmih,CBM_CREATEDIB,NULL,pbmi,DIB_RGB_COLORS); hbmOld = SelectObject(hdcdib, hdib); hbr = CreateSolidBrush(RGB(0,255,0)); hbrOld = SelectObject(hdcdib, hbr); Ellipse(hdcdib, 10, 10, 30, 30); BitBlt(hdcScreen, 0, 0, 100, 100, hdcdib, 0, 0, SRCCOPY); TextOut(hdcScreen,0, 110, "green on red",12); SelectObject(hdcdib,hbmOld); DeleteObject(hdib); // DIB section created by GDI. Green circle on red background hdibSection = CreateDIBSection(hdcScreen,pbmi,DIB_RGB_COLORS,&pjBits,0,0); hbmOld = SelectObject(hdcdib, hdibSection); Ellipse(hdcdib, 10, 10, 30, 30); for (c = 100*2; c < 100*6; c++) *(pjBits + c) = 2; BitBlt(hdcScreen, 200, 0, 100, 100, hdcdib, 0, 0, SRCCOPY); TextOut(hdcScreen,200, 110, "green on red w blue lines",25); // Should get 2 entries back -- blue (0xff), green(0xff00) c = GetDIBColorTable(hdcdib,2,3,(RGBQUAD *)&aRGB); if (c != 3) DbgPrint("GetDIBColorTable returns %x, should return 2\n",c); if (aRGB[0] != 0xff) DbgPrint("GetDIBColorTable: aRGB[0] = %x, should be 0xff\n",aRGB[0]); if (aRGB[1] != 0) DbgPrint("GetDIBColorTable: aRGB[1] = %x, should be 0xff00\n",aRGB[1]); // Change the color table of the DIB section to cyan and yellow. // SetColorTable should return 2. aRGB[0] = 0x0ffff; aRGB[1] = 0x0ffff00; c = SetDIBColorTable(hdcdib,0,2,(RGBQUAD *)&aRGB); if (c != 2) DbgPrint("SetDIBColorTable returns %lx, should be 2\n",c); BitBlt(hdcScreen, 400, 0, 100, 100, hdcdib, 0, 0, SRCCOPY); TextOut(hdcScreen,400, 110, "yellow on cyan w blue lines",27); // CreateCompatibleBitmap for a dc that has a dibsection selected into. hbmComp = CreateCompatibleBitmap(hdcdib, 80, 80); if (hbmComp == NULL) { DbgPrint("couldn't create compatible bitmap\n"); } else { c = GetObject(hbmComp, sizeof(DIBSECTION), &dib); if (c != sizeof(DIBSECTION)) DbgPrint("GetObject2 returns %ld, should be sizeof(DIBSECTION)\n", c); if (dib.dsBm.bmBits == 0) DbgPrint("GetObject2 returns wrong pjBits = %lx\n", dib.dsBm.bmBits); if (dib.dsBmih.biWidth != 80) DbgPrint("GetObject2 returns wrong biWidth = %lx\n", dib.dsBmih.biWidth); if (dib.dshSection != 0) DbgPrint("GetObject2 returns wrong hSection = %lx\n", dib.dshSection); if (dib.dsOffset != 0) DbgPrint("GetObject2 returns wrong dwOffset = %lx\n", dib.dsOffset); // Draw into the compatible bitmap and blt to the screen. SelectObject(hdcdib,hbmComp); BitBlt(hdcScreen, 600, 0, 80, 80, hdcdib, 0, 0, SRCCOPY); TextOut(hdcScreen,600, 110, "solid cyan box",14); pjBitsComp = dib.dsBm.bmBits; SelectObject(hdcdib, GetStockObject(BLACK_BRUSH)); Ellipse(hdcdib, 10, 10, 30, 30); for (c = 80*2; c < 80*6; c++) *(pjBitsComp + c) = 2; BitBlt(hdcScreen, 600, 150, 80, 80, hdcdib, 0, 0, SRCCOPY); TextOut(hdcScreen,600, 260, "black on cyan w blue lines",26); SelectObject(hdcdib, hdibSection); DeleteObject(hbmComp); } // GetObject for a DIB section. c = GetObject(hdibSection, sizeof(BITMAP), &dib); if (c != sizeof(BITMAP)) DbgPrint("GetObject1 returns %ld, should be sizeof(BITMAP)\n", c); if (dib.dsBm.bmBits != pjBits) DbgPrint("GetObject1 returns wrong pjBits = %lx\n", dib.dsBm.bmBits); c = GetObject(hdibSection, sizeof(DIBSECTION), &dib); if (c != sizeof(DIBSECTION)) DbgPrint("GetObject3 returns %ld, should be sizeof(DIBSECTION)\n", c); if (dib.dsBm.bmBits != pjBits) DbgPrint("GetObject3 returns wrong pjBits = %lx\n", dib.dsBm.bmBits); if (dib.dsBmih.biWidth != 100) DbgPrint("GetObject3 returns wrong biWidth = %lx\n", dib.dsBmih.biWidth); if (dib.dshSection != 0) DbgPrint("GetObject3 returns wrong hSection = %lx\n", dib.dshSection); if (dib.dsOffset != 0) DbgPrint("GetObject3 returns wrong dwOffset = %lx\n", dib.dsOffset); SelectObject(hdcdib, hbmOld); DeleteObject(hdibSection); // App creates the section handle for CreateDIBSection, dwOffset == 0. hApp = CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE|SEC_COMMIT,0,10000,NULL); hdibSection = CreateDIBSection(hdcScreen,pbmi,DIB_RGB_COLORS,&pjBits,hApp,0); hbmOld = SelectObject(hdcdib, hdibSection); SelectObject(hdcdib,hbr); Ellipse(hdcdib, 10, 10, 30, 30); for (c = 100*2; c < 100*6; c++) *(pjBits + c) = 2; BitBlt(hdcScreen, 0, 150, 100, 100, hdcdib, 0, 0, SRCCOPY); TextOut(hdcScreen,0, 260, "green on red w blue lines",25); // GetObject for the DIB section. c = GetObject(hdibSection, sizeof(DIBSECTION), &dib); if (c != sizeof(DIBSECTION)) DbgPrint("GetObject4 returns %ld, should be sizeof(DIBSECTION)\n", c); if (dib.dsBm.bmBits != pjBits) DbgPrint("GetObject4 returns wrong pjBits = %lx\n", dib.dsBm.bmBits); if (dib.dsBmih.biWidth != 100) DbgPrint("GetObject4 returns wrong biWidth = %lx\n", dib.dsBmih.biWidth); if (dib.dshSection != hApp) DbgPrint("GetObject4 returns wrong hSection = %lx\n", dib.dshSection); if (dib.dsOffset != 0) DbgPrint("GetObject4 returns wrong dwOffset = %lx\n", dib.dsOffset); SelectObject(hdcdib, hbmOld); DeleteObject(hdibSection); CloseHandle(hApp); // App creates the section handle for CreateDIBSection, dwOffset != 0. hApp = CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE|SEC_COMMIT,0,0x13000,NULL); hdibSection = CreateDIBSection(hdcScreen,pbmi,DIB_RGB_COLORS,&pjBits,hApp,0x10080); hbmOld = SelectObject(hdcdib, hdibSection); Ellipse(hdcdib, 10, 10, 30, 30); for (c = 100*2; c < 100*6; c++) *(pjBits + c) = 2; BitBlt(hdcScreen, 200, 150, 100, 100, hdcdib, 0, 0, SRCCOPY); TextOut(hdcScreen,200, 260, "green on red w blue lines",25); // GetObject for the DIB section. c = GetObject(hdibSection, sizeof(DIBSECTION), &dib); if (c != sizeof(DIBSECTION)) DbgPrint("GetObject5 returns %ld, should be sizeof(DIBSECTION)\n", c); if (dib.dsBm.bmBits != pjBits) DbgPrint("GetObject5 returns wrong pjBits = %lx\n", dib.dsBm.bmBits); if (dib.dsBmih.biWidth != 100) DbgPrint("GetObject5 returns wrong biWidth = %lx\n", dib.dsBmih.biWidth); if (dib.dshSection != hApp) DbgPrint("GetObject5 returns wrong hSection = %lx\n", dib.dshSection); if (dib.dsOffset != 0x10080) DbgPrint("GetObject5 returns wrong dwOffset = %lx\n", dib.dsOffset); SelectObject(hdcdib, hbmOld); DeleteObject(hdibSection); CloseHandle(hApp); // DIB bitmap without CREATEDIB flag. Green circle on black background hbm = CreateDIBitmap(hdcScreen,pbmih,0,NULL,pbmi,DIB_RGB_COLORS); hbmOld = SelectObject(hdcdib, hbm); Ellipse(hdcdib, 10, 10, 30, 30); BitBlt(hdcScreen, 400, 150, 100, 100, hdcdib, 0, 0, SRCCOPY); TextOut(hdcScreen,400, 260, "green on black",14); SelectObject(hdcdib, hbmOld); DeleteObject(hbm); SelectObject(hdcdib,hbrOld); DeleteObject(hbr); DeleteDC(hdcdib); } #endif // Clean up time, delete it all. if (SelectPalette(hdcScreen, hpalDefault, 0) != hpalExplicit) DbgPrint("hpalExplicit not given back\n"); if (!DeleteObject(hpalVGA)) DbgPrint("failed to delete hpalVGA\n"); if (!DeleteObject(hpalExplicit)) DbgPrint("failed to delete hpalExplicit\n"); if (hbm1Cat != SelectObject(hdc1Cat, hbmDefault)) DbgPrint("Cleanup hbm 2 wrong\n"); if (hbm1Cat0 != SelectObject(hdc1Cat0, hbmDefault)) DbgPrint("Cleanup hbm 3 wrong\n"); if (hbm4Lines != SelectObject(hdc4Lines, hbmDefault)) DbgPrint("Cleanup hbm 4 wrong\n"); if (hbm4Lines0 != SelectObject(hdc4Lines0, hbmDefault)) DbgPrint("Cleanup hbm 5 wrong\n"); if (hbm8Lines != SelectObject(hdc8Lines, hbmDefault)) DbgPrint("Cleanup hbm 6 wrong\n"); if (hbm8Lines0 != SelectObject(hdc8Lines0, hbmDefault)) DbgPrint("Cleanup hbm 7 wrong\n"); if (hbm1BigCat != SelectObject(hdc1BigCat, hbmDefault)) DbgPrint("Cleanup hbm 8 wrong\n"); if (hbm1BigCat0 != SelectObject(hdc1BigCat0, hbmDefault)) DbgPrint("Cleanup hbm 9 wrong\n"); // Delete DC's if (!DeleteDC(hdc1BigCat)) DbgPrint("Failed to delete hdc 1\n"); if (!DeleteDC(hdc1BigCat0)) DbgPrint("Failed to delete hdc 2\n"); if (!DeleteDC(hdc1Cat)) DbgPrint("Failed to delete hdc 3\n"); if (!DeleteDC(hdc1Cat0)) DbgPrint("Failed to delete hdc 4\n"); if (!DeleteDC(hdc4Lines)) DbgPrint("Failed to delete hdc 5\n"); if (!DeleteDC(hdc4Lines0)) DbgPrint("Failed to delete hdc 6\n"); if (!DeleteDC(hdc8Lines)) DbgPrint("Failed to delete hdc 7\n"); if (!DeleteDC(hdc8Lines0)) DbgPrint("Failed to delete hdc 8\n"); // Delete Bitmaps if (!DeleteObject(hbm1Cat)) DbgPrint("ERROR failed to delete 1\n"); if (!DeleteObject(hbm1Cat0)) DbgPrint("ERROR failed to delete 2\n"); if (!DeleteObject(hbm4Lines)) DbgPrint("ERROR failed to delete 3\n"); if (!DeleteObject(hbm4Lines0)) DbgPrint("ERROR failed to delete 4\n"); if (!DeleteObject(hbm8Lines)) DbgPrint("ERROR failed to delete 5\n"); if (!DeleteObject(hbm8Lines0)) DbgPrint("ERROR failed to delete 6\n"); if (!DeleteObject(hbm1BigCat)) DbgPrint("ERROR failed to delete 7\n"); if (!DeleteObject(hbm1BigCat0)) DbgPrint("ERROR failed to delete 8\n"); if (!DeleteObject(hbmDefault)) DbgPrint("ERROR deleted default bitmap\n"); }