Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

407 lines
9.8 KiB

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1996.
//
// File: util.cxx
//
// Contents: Utility functions
//
// History: 4-30-1997 DavidMun Created
//
//---------------------------------------------------------------------------
#include "..\pch\headers.hxx"
#pragma hdrstop
#include "myheaders.hxx"
//+--------------------------------------------------------------------------
//
// Function: IsDialogClass
//
// Synopsis: Return TRUE if [hwnd]'s window class is the dialog class.
//
// History: 5-19-1997 DavidMun Created
//
//---------------------------------------------------------------------------
BOOL
IsDialogClass(
HWND hwnd)
{
TCHAR tszClassName[20]; // looking for "#32770"
if (!GetClassName(hwnd, tszClassName, ARRAYLEN(tszClassName)))
{
DEBUG_OUT_LASTERROR;
tszClassName[0] = TEXT('\0');
}
return 0 == _tcscmp(tszClassName, TEXT("#32770"));
}
//+--------------------------------------------------------------------------
//
// Function: LoadStr
//
// Synopsis: Load string with resource id [ids] into buffer [tszBuf],
// which is of size [cchBuf] characters.
//
// Arguments: [ids] - string to load
// [tszBuf] - buffer for string
// [cchBuf] - size of buffer
// [tszDefault] - NULL or string to use if load fails
//
// Returns: S_OK or error from LoadString
//
// Modifies: *[tszBuf]
//
// History: 12-11-1996 DavidMun Created
//
// Notes: If the load fails and no default is supplied, [tszBuf] is
// set to an empty string.
//
//---------------------------------------------------------------------------
HRESULT
LoadStr(
ULONG ids,
LPTSTR tszBuf,
ULONG cchBuf,
LPCTSTR tszDefault)
{
HRESULT hr = S_OK;
ULONG cchLoaded;
cchLoaded = LoadString(g_hInstance, ids, tszBuf, cchBuf);
if (!cchLoaded)
{
DEBUG_OUT_LASTERROR;
hr = HRESULT_FROM_LASTERROR;
if (tszDefault)
{
lstrcpyn(tszBuf, tszDefault, cchBuf);
}
else
{
*tszBuf = TEXT('\0');
}
}
return hr;
}
#ifdef WIZARD97
//+--------------------------------------------------------------------------
//
// Function: Is256ColorSupported
//
// Synopsis: Return TRUE if this machine supports 256 color bitmaps
//
// History: 5-20-1997 DavidMun Stolen from wizard97 sample code
//
//---------------------------------------------------------------------------
BOOL
Is256ColorSupported()
{
BOOL bRetval = FALSE;
HDC hdc = GetDC(NULL);
if (hdc)
{
if (GetDeviceCaps(hdc, BITSPIXEL) >= 8)
{
bRetval = TRUE;
}
ReleaseDC(NULL, hdc);
}
return bRetval;
}
#endif // WIZARD97
//+--------------------------------------------------------------------------
//
// Function: FillInStartDateTime
//
// Synopsis: Fill [pTrigger]'s starting date and time values from the
// values in the date/time picker controls.
//
// Arguments: [hwndDatePick] - handle to control with start date
// [hwndTimePick] - handle to control with start time
// [pTrigger] - trigger to init
//
// Modifies: *[pTrigger]
//
// History: 5-20-1997 DavidMun Created
//
//---------------------------------------------------------------------------
VOID
FillInStartDateTime(
HWND hwndDatePick,
HWND hwndTimePick,
TASK_TRIGGER *pTrigger)
{
SYSTEMTIME st;
DateTime_GetSystemtime(hwndDatePick, &st);
pTrigger->wBeginYear = st.wYear;
pTrigger->wBeginMonth = st.wMonth;
pTrigger->wBeginDay = st.wDay;
DateTime_GetSystemtime(hwndTimePick, &st);
pTrigger->wStartHour = st.wHour;
pTrigger->wStartMinute = st.wMinute;
}
#ifdef WIZARD95
//+--------------------------------------------------------------------------
//
// Function: CreateDIBPalette
//
// Synopsis: Create palette based on bitmap info
//
// Arguments: [lpbmi] - bitmap info
// [lpiNumColors] - number of colors in palette
//
// Returns: handle to created palette, or NULL on error
//
// History: 5-22-1997 DavidMun Taken directly from sdk sample
//
// Notes: Caller must DeleteObject returned palette.
//
//---------------------------------------------------------------------------
HPALETTE
CreateDIBPalette(
LPBITMAPINFO lpbmi,
LPINT lpiNumColors)
{
LPBITMAPINFOHEADER lpbi;
LPLOGPALETTE lpPal;
HANDLE hLogPal;
HPALETTE hPal = NULL;
int i;
lpbi = (LPBITMAPINFOHEADER)lpbmi;
if (lpbi->biBitCount <= 8)
{
*lpiNumColors = (1 << lpbi->biBitCount);
}
else
{
DEBUG_OUT((DEB_ITRACE, "no palette needed\n"));
*lpiNumColors = 0; // No palette needed for 24 BPP DIB
}
if (*lpiNumColors)
{
hLogPal = GlobalAlloc(GHND,
sizeof (LOGPALETTE) + sizeof (PALETTEENTRY)
* (*lpiNumColors));
if (!hLogPal)
{
DEBUG_OUT_HRESULT(E_OUTOFMEMORY);
return NULL;
}
lpPal = (LPLOGPALETTE) GlobalLock (hLogPal);
lpPal->palVersion = 0x300;
lpPal->palNumEntries = (WORD)*lpiNumColors;
for (i = 0; i < *lpiNumColors; i++)
{
lpPal->palPalEntry[i].peRed = lpbmi->bmiColors[i].rgbRed;
lpPal->palPalEntry[i].peGreen = lpbmi->bmiColors[i].rgbGreen;
lpPal->palPalEntry[i].peBlue = lpbmi->bmiColors[i].rgbBlue;
lpPal->palPalEntry[i].peFlags = 0;
}
hPal = CreatePalette (lpPal);
if (!hPal)
{
DEBUG_OUT_LASTERROR;
}
GlobalUnlock (hLogPal);
GlobalFree (hLogPal);
}
return hPal;
}
//+--------------------------------------------------------------------------
//
// Function: LoadResourceBitmap
//
// Synopsis: Load the bitmap with resource id [idBitmap] and put its
// palette in *[phPalette].
//
// Arguments: [idBitmap] - resource id of bitmap to load
// [phPalette] - filled with bitmap's palette
//
// Returns: Device dependent bitmap with palette mapped to system's,
// or NULL on error.
//
// Modifies: *[phPalette]
//
// History: 5-22-1997 DavidMun Created from sdk sample
//
// Notes: Caller must DeleteObject returned bitmap and palette. On
// error, *[phPalette] is NULL.
//
//---------------------------------------------------------------------------
HBITMAP
LoadResourceBitmap(
ULONG idBitmap,
HPALETTE *phPalette)
{
TRACE_FUNCTION(LoadResourceBitmap);
HRESULT hr = E_FAIL;
HBITMAP hBitmapFinal = NULL;
HDC hdc = NULL;
//
// Init out pointer for failure case
//
*phPalette = NULL;
do
{
HRSRC hRsrc = FindResource(g_hInstance,
MAKEINTRESOURCE(idBitmap),
RT_BITMAP);
if (!hRsrc)
{
DEBUG_OUT_LASTERROR;
break;
}
//
// Load the resource; note win32 will automatically unload it
//
HGLOBAL hGlobal = LoadResource(g_hInstance, hRsrc);
if (!hGlobal)
{
DEBUG_OUT_LASTERROR;
break;
}
//
// Convert the loaded handle into a bitmap handle. Again, win32
// will automatically unlock this resource.
//
LPBITMAPINFOHEADER pbih = (LPBITMAPINFOHEADER) LockResource(hGlobal);
if (!pbih)
{
DEBUG_OUT_LASTERROR;
break;
}
//
// Get the screen dc to do the palette mapping with
//
hdc = GetDC(NULL);
if (!hdc)
{
DEBUG_OUT_LASTERROR;
break;
}
//
// Create a palette that can be used on this computer's display and
// which will represent the DIB's colors as accurately as possible.
//
int iNumColors;
*phPalette = CreateDIBPalette((LPBITMAPINFO)pbih, &iNumColors);
if (!*phPalette)
{
DEBUG_OUT_LASTERROR;
break;
}
VERIFY(SelectPalette(hdc, *phPalette, FALSE));
UINT uiMapped = RealizePalette(hdc);
DEBUG_OUT((DEB_ITRACE,
"Mapped %u logical palette entries to system palette entries\n",
uiMapped));
if (uiMapped == GDI_ERROR)
{
DEBUG_OUT_LASTERROR;
break;
}
hBitmapFinal = CreateDIBitmap(hdc,
pbih,
CBM_INIT,
(PBYTE) pbih + pbih->biSize + iNumColors *
sizeof(RGBQUAD),
(LPBITMAPINFO) pbih,
DIB_RGB_COLORS);
if (!hBitmapFinal)
{
DEBUG_OUT_LASTERROR;
break;
}
//
// If we got here, everything succeeded
//
hr = S_OK;
} while (0);
if (hdc)
{
ReleaseDC(NULL, hdc);
}
if (FAILED(hr) && *phPalette)
{
DeleteObject(*phPalette);
*phPalette = NULL;
}
return hBitmapFinal;
}
#endif // WIZARD95