619 lines
18 KiB
C
619 lines
18 KiB
C
/******************************Module*Header*******************************\
|
|
* Module Name: ftbmtext.c
|
|
*
|
|
* Tests text to 1,4,8,24,32 BPP bitmaps
|
|
*
|
|
* Created: 12-Jun-1991 10:12:58
|
|
* Author: Patrick Haluptzok patrickh
|
|
*
|
|
* Copyright (c) 1990 Microsoft Corporation
|
|
\**************************************************************************/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
VOID vBuginText(HDC hdcScreen);
|
|
VOID vTestBitmapText(HDC hdcScreen);
|
|
VOID vTestDIBPALCOLORS(HDC hdc);
|
|
|
|
/******************************Public*Routine******************************\
|
|
* Test AddFontModule
|
|
*
|
|
*
|
|
* History:
|
|
* 29-Mar-1993 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
VOID vTestAddFontResource(HWND hwnd, HDC hdc)
|
|
{
|
|
ULONG ul;
|
|
HFONT hfontP,hfontG,hfontOld;
|
|
|
|
ul = AddFontResource((LPSTR) "ft.exe");
|
|
|
|
if (ul != 2)
|
|
DbgPrint("GetModuleHandle failed\n");
|
|
|
|
hfontP = CreateFont(-24, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET,
|
|
OUT_RASTER_PRECIS, CLIP_DEFAULT_PRECIS,
|
|
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
|
|
"patrickh");
|
|
|
|
if (hfontP == 0)
|
|
DbgPrint("AddFontResource failed CreateFont\n");
|
|
|
|
hfontG = CreateFont(-24, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET,
|
|
OUT_RASTER_PRECIS, CLIP_DEFAULT_PRECIS,
|
|
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
|
|
"gilmanw");
|
|
|
|
if (hfontG == 0)
|
|
DbgPrint("AddFontResource failed CreateFontG\n");
|
|
|
|
hfontOld = SelectObject(hdc, hfontP);
|
|
|
|
TextOut(hdc, 500, 0, "AAAAAAPH", 8);
|
|
|
|
SelectObject(hdc, hfontOld);
|
|
|
|
hfontOld = SelectObject(hdc, hfontG);
|
|
|
|
TextOut(hdc, 500, 100, "AAAAAAGW", 8);
|
|
|
|
SelectObject(hdc, hfontOld);
|
|
|
|
DeleteObject(hfontP);
|
|
DeleteObject(hfontG);
|
|
|
|
RemoveFontResource((LPSTR) "ft.exe");
|
|
|
|
hfontP = CreateFont(-24, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET,
|
|
OUT_RASTER_PRECIS, CLIP_DEFAULT_PRECIS,
|
|
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
|
|
"patrickh");
|
|
|
|
if (hfontP == 0)
|
|
DbgPrint("AddFontResource failed CreateFont\n");
|
|
|
|
hfontOld = SelectObject(hdc, hfontP);
|
|
|
|
TextOut(hdc, 500, 200, "AAAAAAPH", 8);
|
|
|
|
SelectObject(hdc, hfontOld);
|
|
|
|
DeleteObject(hfontP);
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* vTestAddFontModule
|
|
*
|
|
* History:
|
|
* 01-Apr-1993 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
#if 0
|
|
VOID vTestAddFontModule(HWND hwnd, HDC hdc)
|
|
{
|
|
DWORD ul;
|
|
HFONT hfontP,hfontOld;
|
|
HINSTANCE hMyInst;
|
|
|
|
if ((hMyInst = LoadLibrary("patrickh.fon")) == 0)
|
|
{
|
|
DbgPrint("Load Library failed\n");
|
|
return;
|
|
}
|
|
|
|
ul = AddFontModule(hMyInst);
|
|
|
|
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
|
|
|
|
if (ul != 1)
|
|
DbgPrint("ul not 1\n");
|
|
|
|
hfontP = CreateFont(-24, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET,
|
|
OUT_RASTER_PRECIS, CLIP_DEFAULT_PRECIS,
|
|
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
|
|
"patrickh");
|
|
|
|
hfontOld = SelectObject(hdc, hfontP);
|
|
TextOut(hdc, 600, 300, "AAAAAAPPP", 8);
|
|
SelectObject(hdc, hfontOld);
|
|
DeleteObject(hfontP);
|
|
RemoveFontModule((LPSTR) hMyInst);
|
|
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
|
|
FreeLibrary(hMyInst);
|
|
}
|
|
#endif
|
|
|
|
/******************************Public*Routine******************************\
|
|
* vTestBMText
|
|
*
|
|
* Test text.
|
|
*
|
|
* History:
|
|
* Wed 11-Sep-1991 -by- Patrick Haluptzok [patrickh]
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
VOID vTestBMText(HWND hwnd, HDC hdcScreen, RECT* prcl)
|
|
{
|
|
ULONG ulTemp;
|
|
|
|
hwnd;
|
|
prcl;
|
|
vBuginText(hdcScreen);
|
|
vTestBitmapText(hdcScreen);
|
|
|
|
for (ulTemp = 0; ulTemp < 3; ulTemp++)
|
|
vTestAddFontResource(hwnd, hdcScreen);
|
|
|
|
#if 0
|
|
for (ulTemp = 0; ulTemp < 3; ulTemp++)
|
|
vTestAddFontModule(hwnd, hdcScreen);
|
|
#endif
|
|
|
|
vTestDIBPALCOLORS(hdcScreen);
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* vBuginText
|
|
*
|
|
* Test that text to 1X1 bitmap doesn't gp-fault
|
|
*
|
|
* History:
|
|
* 26-Jul-1991 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
VOID vBuginText(HDC hdcScreen)
|
|
{
|
|
HDC hdcMono;
|
|
|
|
hdcMono = CreateCompatibleDC(hdcScreen);
|
|
PatBlt(hdcMono, 0, 0, 1000, 1000, BLACKNESS);
|
|
BitBlt(hdcMono, 0, 0, 0, 0, hdcScreen, 0, 0, SRCCOPY);
|
|
BitBlt(hdcMono, 0, 0, 1, 1, hdcScreen, 1, 1, SRCCOPY);
|
|
BitBlt(hdcMono, 0, 0, 100, 100, hdcScreen, 10, 10, SRCCOPY);
|
|
BitBlt(hdcMono, 0, 0, 10000, 10000, hdcScreen, 10, 10, SRCCOPY);
|
|
ExtTextOut(hdcMono, 0, 0, 0, NULL, "Hello World", 11, NULL);
|
|
ExtTextOut(hdcMono, 0, 0, 0, NULL, "Hello WorldabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 37, NULL);
|
|
DeleteDC(hdcMono);
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* vTestBitmapText
|
|
*
|
|
* Test text out to a bitmap.
|
|
*
|
|
* History:
|
|
* 11-Jul-1991 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
VOID vTestBitmapText(HDC hdcScreen)
|
|
{
|
|
HBITMAP hbm1,hbm4,hbm8,hbm16,hbm24,hbm32,hbmDefault;
|
|
HDC hdc1,hdc4,hdc8,hdc16,hdc24,hdc32;
|
|
ULONG ScreenWidth, ScreenHeight;
|
|
HFONT hfItalic, hf1,hf4,hf8,hf16,hf24,hf32;
|
|
LOGFONT lfItalic;
|
|
|
|
|
|
lfItalic.lfHeight = 16;
|
|
lfItalic.lfWidth = 8;
|
|
lfItalic.lfEscapement = 0;
|
|
lfItalic.lfOrientation = 0;
|
|
lfItalic.lfWeight = 700;
|
|
lfItalic.lfItalic = 1;
|
|
lfItalic.lfUnderline = 0;
|
|
lfItalic.lfStrikeOut = 0;
|
|
lfItalic.lfCharSet = ANSI_CHARSET;
|
|
lfItalic.lfOutPrecision = OUT_DEFAULT_PRECIS;
|
|
lfItalic.lfClipPrecision = CLIP_DEFAULT_PRECIS;
|
|
lfItalic.lfQuality = DEFAULT_QUALITY;
|
|
lfItalic.lfPitchAndFamily = (FIXED_PITCH | FF_DONTCARE);
|
|
|
|
strcpy(lfItalic.lfFaceName, "System");
|
|
|
|
hfItalic = CreateFontIndirect(&lfItalic);
|
|
|
|
if (hfItalic == (HFONT)0)
|
|
{
|
|
DbgPrint("CreateFontIndirect failed\n");
|
|
}
|
|
|
|
ScreenWidth = GetDeviceCaps(hdcScreen, HORZRES);
|
|
ScreenHeight = GetDeviceCaps(hdcScreen, VERTRES);
|
|
|
|
hdc1 = CreateCompatibleDC(hdcScreen);
|
|
hdc4 = CreateCompatibleDC(hdcScreen);
|
|
hdc8 = CreateCompatibleDC(hdcScreen);
|
|
hdc16 = CreateCompatibleDC(hdcScreen);
|
|
hdc24 = CreateCompatibleDC(hdcScreen);
|
|
hdc32 = CreateCompatibleDC(hdcScreen);
|
|
|
|
if ((hdc1 == (HDC) 0) || (hdc4 == (HDC) 0) || (hdc32 == (HDC) 0))
|
|
DbgPrint("ERROR hdc creation %lu %lu %lu \n", hdc8, hdc4, hdc1);
|
|
|
|
// Clear the screen
|
|
|
|
BitBlt(hdcScreen, 0, 0, ScreenWidth, ScreenHeight,
|
|
(HDC) 0, 0, 0, WHITENESS);
|
|
|
|
// Ok let's throw in some CreateCompatible calls.
|
|
|
|
hbm1 = hbmCreateDIBitmap(hdcScreen, 500, 100, 1);
|
|
hbm4 = hbmCreateDIBitmap(hdcScreen, 500, 100, 4);
|
|
hbm8 = hbmCreateDIBitmap(hdcScreen, 500, 100, 8);
|
|
hbm16 = hbmCreateDIBitmap(hdcScreen, 500, 100, 16);
|
|
hbm24 = hbmCreateDIBitmap(hdcScreen, 500, 100, 24);
|
|
hbm32 = hbmCreateDIBitmap(hdcScreen, 500, 100, 32);
|
|
|
|
hf1 = SelectObject(hdc1, hfItalic);
|
|
hf4 = SelectObject(hdc4, hfItalic);
|
|
hf8 = SelectObject(hdc8, hfItalic);
|
|
hf16 = SelectObject(hdc16, hfItalic);
|
|
hf24 = SelectObject(hdc24, hfItalic);
|
|
hf32 = SelectObject(hdc32, hfItalic);
|
|
|
|
hbmDefault = SelectObject(hdc1,hbm1);
|
|
|
|
if (hbmDefault == (HBITMAP) 0)
|
|
DbgPrint("hbmDefault hd1 select bad\n");
|
|
|
|
if (hbmDefault != SelectObject(hdc4,hbm4))
|
|
DbgPrint("hbmDefault hd4 select bad\n");
|
|
|
|
if (hbmDefault != SelectObject(hdc8,hbm8))
|
|
DbgPrint("hbmDefault hd8 select bad\n");
|
|
|
|
SelectObject(hdc16,hbm16);
|
|
SelectObject(hdc24,hbm24);
|
|
SelectObject(hdc32,hbm32);
|
|
|
|
PatBlt(hdc1, 0, 0, 500, 100, WHITENESS);
|
|
PatBlt(hdc4, 0, 0, 500, 100, WHITENESS);
|
|
PatBlt(hdc8, 0, 0, 500, 100, WHITENESS);
|
|
PatBlt(hdc16, 0, 0, 500, 100, WHITENESS);
|
|
PatBlt(hdc24, 0, 0, 500, 100, WHITENESS);
|
|
PatBlt(hdc32, 0, 0, 500, 100, WHITENESS);
|
|
|
|
TextOut(hdc1, 5, 5, "abcdefghijklmnopqrstuvwxyz1234567890", 36);
|
|
TextOut(hdc1, 5, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()", 36);
|
|
|
|
if(!BitBlt(hdcScreen, 0, 0, 500, 100, hdc1, 0, 0, SRCCOPY))
|
|
DbgPrint("ERROR: BitBlt returned FALSE\n");
|
|
|
|
TextOut(hdc4, 5, 5, "abcdefghijklmnopqrstuvwxyz1234567890", 36);
|
|
TextOut(hdc4, 5, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()", 36);
|
|
|
|
if(!BitBlt(hdcScreen, 0, 80, 500, 100, hdc4, 0, 0, SRCCOPY))
|
|
DbgPrint("ERROR: BitBlt returned FALSE\n");
|
|
|
|
TextOut(hdc8, 5, 5, "abcdefghijklmnopqrstuvwxyz1234567890", 36);
|
|
TextOut(hdc8, 5, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()", 36);
|
|
|
|
if(!BitBlt(hdcScreen, 0, 160, 500, 100, hdc8, 0, 0, SRCCOPY))
|
|
DbgPrint("ERROR: BitBlt returned FALSE\n");
|
|
|
|
TextOut(hdc16, 5, 5, "abcdefghijklmnopqrstuvwxyz1234567890", 36);
|
|
TextOut(hdc16, 5, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()", 36);
|
|
|
|
if(!BitBlt(hdcScreen, 0, 240, 500, 100, hdc16, 0, 0, SRCCOPY))
|
|
DbgPrint("ERROR: BitBlt returned FALSE\n");
|
|
|
|
TextOut(hdc24, 5, 5, "abcdefghijklmnopqrstuvwxyz1234567890", 36);
|
|
TextOut(hdc24, 5, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()", 36);
|
|
|
|
if(!BitBlt(hdcScreen, 0, 320, 500, 100, hdc24, 0, 0, SRCCOPY))
|
|
DbgPrint("ERROR: BitBlt returned FALSE\n");
|
|
|
|
TextOut(hdc32, 5, 5, "abcdefghijklmnopqrstuvwxyz1234567890", 36);
|
|
TextOut(hdc32, 5, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()", 36);
|
|
|
|
if(!BitBlt(hdcScreen, 0, 400, 500, 100, hdc32, 0, 0, SRCCOPY))
|
|
DbgPrint("ERROR: BitBlt returned FALSE\n");
|
|
|
|
SelectObject(hdc1,hf1);
|
|
SelectObject(hdc4,hf4);
|
|
SelectObject(hdc8,hf8);
|
|
SelectObject(hdc16,hf16);
|
|
SelectObject(hdc24,hf24);
|
|
SelectObject(hdc32,hf32);
|
|
|
|
if (!DeleteObject(hfItalic))
|
|
DbgPrint("Failed to delete hfItalic \n");
|
|
|
|
// Delete DC's
|
|
|
|
if (!DeleteDC(hdc1))
|
|
DbgPrint("Failed to delete hdc 11\n");
|
|
if (!DeleteDC(hdc4))
|
|
DbgPrint("Failed to delete hdc 15\n");
|
|
if (!DeleteDC(hdc8))
|
|
DbgPrint("Failed to delete hdc 16\n");
|
|
if (!DeleteDC(hdc16))
|
|
DbgPrint("Failed to delete hdc 166\n");
|
|
if (!DeleteDC(hdc24))
|
|
DbgPrint("Failed to delete hdc 18\n");
|
|
if (!DeleteDC(hdc32))
|
|
DbgPrint("Failed to delete hdc 19\n");
|
|
|
|
// Delete Bitmaps
|
|
|
|
if (!DeleteObject(hbm1))
|
|
DbgPrint("ERROR failed to delete 11\n");
|
|
if (!DeleteObject(hbm4))
|
|
DbgPrint("ERROR failed to delete 13\n");
|
|
if (!DeleteObject(hbm8))
|
|
DbgPrint("ERROR failed to delete 14\n");
|
|
if (!DeleteObject(hbm16))
|
|
DbgPrint("ERROR failed to delete 14\n");
|
|
if (!DeleteObject(hbm24))
|
|
DbgPrint("ERROR failed to delete 14\n");
|
|
if (!DeleteObject(hbm32))
|
|
DbgPrint("ERROR failed to delete 14\n");
|
|
|
|
if (!DeleteObject(hbmDefault))
|
|
DbgPrint("ERROR deleted default bitmap\n");
|
|
}
|
|
|
|
typedef struct _BITMAPINFO1
|
|
{
|
|
BITMAPINFOHEADER bmiHeader;
|
|
RGBQUAD bmiColors[2];
|
|
} BITMAPINFO1;
|
|
|
|
typedef struct _BITMAPINFO4
|
|
{
|
|
BITMAPINFOHEADER bmiHeader;
|
|
RGBQUAD bmiColors[16];
|
|
} BITMAPINFO4;
|
|
|
|
typedef struct _BITMAPINFO8
|
|
{
|
|
BITMAPINFOHEADER bmiHeader;
|
|
RGBQUAD bmiColors[256];
|
|
} BITMAPINFO8;
|
|
|
|
typedef struct _BITMAPINFO16
|
|
{
|
|
BITMAPINFOHEADER bmiHeader;
|
|
ULONG bmiColors[3];
|
|
} BITMAPINFO16;
|
|
|
|
typedef struct _BITMAPINFO32
|
|
{
|
|
BITMAPINFOHEADER bmiHeader;
|
|
ULONG bmiColors[3];
|
|
} BITMAPINFO32;
|
|
|
|
/******************************Public*Routine******************************\
|
|
* hbmCreateDIBitmap
|
|
*
|
|
* Returns x X y bitmap of iBitsPixel depth.
|
|
*
|
|
* History:
|
|
* 29-Mar-1993 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
HBITMAP hbmCreateDIBitmap(HDC hdc, ULONG x, ULONG y, ULONG nBitsPixel)
|
|
{
|
|
HBITMAP hbmReturn;
|
|
ULONG ulTemp;
|
|
BITMAPINFO *pbmi;
|
|
|
|
// These are the n-bpp sources.
|
|
|
|
BITMAPINFO1 bmi1 = {{40,32,32,1,1,BI_RGB,0,0,0,0,0}, {{0,0,0,0}, {0xff,0xff,0xff,0}}};
|
|
|
|
BITMAPINFO4 bmi4 =
|
|
{
|
|
{
|
|
sizeof(BITMAPINFOHEADER),
|
|
64,
|
|
64,
|
|
1,
|
|
4,
|
|
BI_RGB,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
},
|
|
|
|
{ // B G R
|
|
{ 0, 0, 0, 0 }, // 0
|
|
{ 0, 0, 0x80,0 }, // 1
|
|
{ 0, 0x80,0, 0 }, // 2
|
|
{ 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
|
|
}
|
|
};
|
|
|
|
BITMAPINFO8 bmi8;
|
|
BITMAPINFO16 bmi16 = {{40,32,32,1,16,BI_BITFIELDS,0,0,0,0,0},
|
|
{0x00007C00, 0x000003E0, 0x0000001F}};
|
|
|
|
BITMAPINFOHEADER bmi24 = {40,32,32,1,24,BI_RGB,0,0,0,0,0};
|
|
|
|
BITMAPINFO32 bmi32 = {{40,32,32,1,32,BI_BITFIELDS,0,0,0,0,0},
|
|
{0x00FF0000, 0x0000FF00, 0x000000FF}};
|
|
|
|
// Initialize the 8BPP DIB.
|
|
|
|
bmi8.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
|
bmi8.bmiHeader.biWidth = 32;
|
|
bmi8.bmiHeader.biHeight = 32;
|
|
bmi8.bmiHeader.biPlanes = 1;
|
|
bmi8.bmiHeader.biBitCount = 8;
|
|
bmi8.bmiHeader.biCompression = BI_RGB;
|
|
bmi8.bmiHeader.biSizeImage = 0;
|
|
bmi8.bmiHeader.biXPelsPerMeter = 0;
|
|
bmi8.bmiHeader.biYPelsPerMeter = 0;
|
|
bmi8.bmiHeader.biClrUsed = 0;
|
|
bmi8.bmiHeader.biClrImportant = 0;
|
|
|
|
// Generate 256 (= 8*8*4) RGB combinations to fill
|
|
// in the palette.
|
|
|
|
{
|
|
BYTE red, green, blue, unUsed;
|
|
unUsed = red = green = blue = 0;
|
|
|
|
for (ulTemp = 0; ulTemp < 256; ulTemp++)
|
|
{
|
|
bmi8.bmiColors[ulTemp].rgbRed = red;
|
|
bmi8.bmiColors[ulTemp].rgbGreen = green;
|
|
bmi8.bmiColors[ulTemp].rgbBlue = blue;
|
|
bmi8.bmiColors[ulTemp].rgbReserved = 0;
|
|
|
|
if (!(red += 32))
|
|
if (!(green += 32))
|
|
blue += 64;
|
|
}
|
|
|
|
for (ulTemp = 248; ulTemp < 256; ulTemp++)
|
|
{
|
|
bmi8.bmiColors[ulTemp].rgbRed = bmi4.bmiColors[ulTemp - 240].rgbRed;
|
|
bmi8.bmiColors[ulTemp].rgbGreen = bmi4.bmiColors[ulTemp - 240].rgbGreen;
|
|
bmi8.bmiColors[ulTemp].rgbBlue = bmi4.bmiColors[ulTemp - 240].rgbBlue;
|
|
bmi8.bmiColors[ulTemp].rgbReserved = 0;
|
|
|
|
if (!(red += 32))
|
|
if (!(green += 32))
|
|
blue += 64;
|
|
}
|
|
}
|
|
|
|
// Start Drawing
|
|
|
|
switch (nBitsPixel)
|
|
{
|
|
case 1:
|
|
pbmi = (BITMAPINFO *) &bmi1;
|
|
break;
|
|
case 4:
|
|
pbmi = (BITMAPINFO *) &bmi4;
|
|
break;
|
|
case 8:
|
|
pbmi = (BITMAPINFO *) &bmi8;
|
|
break;
|
|
case 16:
|
|
pbmi = (BITMAPINFO *) &bmi16;
|
|
break;
|
|
case 24:
|
|
pbmi = (BITMAPINFO *) &bmi24;
|
|
break;
|
|
case 32:
|
|
pbmi = (BITMAPINFO *) &bmi32;
|
|
break;
|
|
default:
|
|
DbgPrint("Not a valid format passed to hbmCreateDIB\n");
|
|
return(0);
|
|
}
|
|
|
|
pbmi->bmiHeader.biWidth = x;
|
|
pbmi->bmiHeader.biHeight = y;
|
|
|
|
return(CreateDIBitmap(hdc, NULL, CBM_CREATEDIB, NULL, pbmi, DIB_RGB_COLORS));
|
|
}
|
|
|
|
typedef struct _LOGPALETTE256
|
|
{
|
|
USHORT palVersion;
|
|
USHORT palNumEntries;
|
|
PALETTEENTRY palPalEntry[256];
|
|
} LOGPALETTE256;
|
|
|
|
/******************************Public*Routine******************************\
|
|
* vTestDIBPALCOLORS
|
|
*
|
|
* Test a couple blts with DIB_PAL_COLORS.
|
|
*
|
|
* History:
|
|
* 15-Apr-1993 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
VOID vTestDIBPALCOLORS(HDC hdc)
|
|
{
|
|
BITMAPINFO8 bmi8;
|
|
LOGPALETTE256 logpal;
|
|
BYTE ajBytes[256];
|
|
PUSHORT pusIndices;
|
|
HPALETTE hpal,hpalOld;
|
|
HBITMAP hbm;
|
|
ULONG ulTemp;
|
|
|
|
// Initialize the 8BPP DIB.
|
|
|
|
bmi8.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
|
bmi8.bmiHeader.biWidth = 16;
|
|
bmi8.bmiHeader.biHeight = 16;
|
|
bmi8.bmiHeader.biPlanes = 1;
|
|
bmi8.bmiHeader.biBitCount = 8;
|
|
bmi8.bmiHeader.biCompression = BI_RGB;
|
|
bmi8.bmiHeader.biSizeImage = 0;
|
|
bmi8.bmiHeader.biXPelsPerMeter = 0;
|
|
bmi8.bmiHeader.biYPelsPerMeter = 0;
|
|
bmi8.bmiHeader.biClrUsed = 0;
|
|
bmi8.bmiHeader.biClrImportant = 0;
|
|
|
|
pusIndices = (PUSHORT) (&(bmi8.bmiColors));
|
|
logpal.palVersion = 0x300;
|
|
logpal.palNumEntries = 256;
|
|
|
|
for (ulTemp = 0; ulTemp < 256; ulTemp++)
|
|
{
|
|
logpal.palPalEntry[ulTemp].peRed = (BYTE) ulTemp;
|
|
logpal.palPalEntry[ulTemp].peGreen = (BYTE) 0;
|
|
logpal.palPalEntry[ulTemp].peBlue = (BYTE) 0;
|
|
logpal.palPalEntry[ulTemp].peFlags = (BYTE) 0;
|
|
pusIndices[ulTemp] = (USHORT) ulTemp;
|
|
ajBytes[ulTemp] = (BYTE) ulTemp;
|
|
}
|
|
|
|
hpal = CreatePalette((LOGPALETTE *) &logpal);
|
|
hbm = CreateCompatibleBitmap(hdc, 16, 16);
|
|
|
|
if ((hpal == 0) || (hbm == 0))
|
|
{
|
|
DbgPrint("hpal or hbm is 0 vTestDIB\n");
|
|
return;
|
|
}
|
|
|
|
hpalOld = SelectPalette(hdc, hpal, 0);
|
|
RealizePalette(hdc);
|
|
|
|
if (16 != StretchDIBits(hdc, 0, 0, 32, 32, 0, 0, 16, 16, ajBytes, (BITMAPINFO *) &bmi8, DIB_PAL_COLORS, 0x00660000))
|
|
{
|
|
DbgPrint("StretchDIBits failed in DIBPALCOLOR\n");
|
|
}
|
|
|
|
if (16 != SetDIBits(hdc, hbm, 0, 16, ajBytes, (BITMAPINFO *) &bmi8, DIB_PAL_COLORS))
|
|
{
|
|
DbgPrint("SetDIBits failed in DIBPALCOLOR\n");
|
|
}
|
|
|
|
SelectPalette(hdc, hpalOld, 0);
|
|
DeleteObject(hpal);
|
|
DeleteObject(hbm);
|
|
}
|