2025-04-27 07:49:33 -04:00

403 lines
10 KiB
C++

// WizardSheet.cpp : implementation file
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
#include "precomp.h"
#include "SchemaValWiz.h"
#include "schemavalwizctl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
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
*lpiNumColors = 0; // No palette needed for 24 BPP DIB
if (*lpiNumColors)
{
hLogPal = GlobalAlloc (GHND, sizeof (LOGPALETTE) +
sizeof (PALETTEENTRY) * (*lpiNumColors));
lpPal = (LPLOGPALETTE) GlobalLock (hLogPal);
lpPal->palVersion = 0x300;
lpPal->palNumEntries = *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);
GlobalUnlock (hLogPal);
GlobalFree (hLogPal);
}
return hPal;
}
HBITMAP LoadResourceBitmap(HINSTANCE hInstance, LPCTSTR lpString,
HPALETTE FAR* lphPalette)
{
HRSRC hRsrc;
HGLOBAL hGlobal;
HBITMAP hBitmapFinal = NULL;
LPBITMAPINFOHEADER lpbi;
HDC hdc;
int iNumColors;
if (hRsrc = FindResource(hInstance, lpString, RT_BITMAP))
{
hGlobal = LoadResource(hInstance, hRsrc);
lpbi = (LPBITMAPINFOHEADER)LockResource(hGlobal);
hdc = GetDC(NULL);
*lphPalette = CreateDIBPalette ((LPBITMAPINFO)lpbi, &iNumColors);
if (*lphPalette)
{
SelectPalette(hdc,*lphPalette,FALSE);
RealizePalette(hdc);
}
hBitmapFinal = CreateDIBitmap(hdc,
(LPBITMAPINFOHEADER)lpbi,
(LONG)CBM_INIT,
(LPSTR)lpbi + lpbi->biSize + iNumColors * sizeof(RGBQUAD),
(LPBITMAPINFO)lpbi,
DIB_RGB_COLORS );
ReleaseDC(NULL,hdc);
UnlockResource(hGlobal);
FreeResource(hGlobal);
}
return (hBitmapFinal);
}
void InitializeLogFont
(LOGFONT &rlfFont, CString csName, int nHeight, int nWeight)
{
_tcscpy(rlfFont.lfFaceName, (LPCTSTR) csName);
rlfFont.lfWeight = nWeight;
rlfFont.lfHeight = nHeight;
rlfFont.lfEscapement = 0;
rlfFont.lfOrientation = 0;
rlfFont.lfWidth = 0;
rlfFont.lfItalic = FALSE;
rlfFont.lfUnderline = FALSE;
rlfFont.lfStrikeOut = FALSE;
rlfFont.lfCharSet = ANSI_CHARSET;
rlfFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
rlfFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
rlfFont.lfQuality = DEFAULT_QUALITY;
rlfFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
}
CRect OutputTextString
(CPaintDC *pdc, CWnd *pcwnd, CString *pcsTextString, int x, int y,
CString *pcsFontName, int nFontHeight, int nFontWeigth)
{
CRect crReturn;
pdc -> SetMapMode (MM_TEXT);
pdc -> SetWindowOrg(0,0);
CFont cfFont;
CFont* pOldFont = NULL;
TEXTMETRIC tmFont;
if (pcsFontName)
{
LOGFONT lfFont;
InitializeLogFont
(lfFont, *pcsFontName, nFontHeight * 10, nFontWeigth);
cfFont.CreatePointFontIndirect(&lfFont, pdc);
pOldFont = pdc -> SelectObject( &cfFont );
}
pdc->GetTextMetrics(&tmFont);
pdc->SetBkMode( TRANSPARENT );
pdc->TextOut( x, y, *pcsTextString, pcsTextString->GetLength());
CSize csText = pdc->GetTextExtent( *pcsTextString);
crReturn.TopLeft().x = x;
crReturn.TopLeft().y = y;
crReturn.BottomRight().x = x + csText.cx;
crReturn.BottomRight().y = y + csText.cy;
pdc->SetBkMode( OPAQUE );
if (pcsFontName)
{
pdc -> SelectObject(pOldFont);
}
return crReturn;
}
void OutputTextString
(CPaintDC *pdc, CWnd *pcwnd, CString *pcsTextString, int x, int y,
CRect &crExt, CString *pcsFontName, int nFontHeight,
int nFontWeigth)
{
pdc -> SetMapMode (MM_TEXT);
pdc -> SetWindowOrg(0,0);
CFont cfFont;
CFont* pOldFont = NULL;
if (pcsFontName)
{
LOGFONT lfFont;
InitializeLogFont
(lfFont, *pcsFontName, nFontHeight * 10, nFontWeigth);
cfFont.CreatePointFontIndirect(&lfFont, pdc);
pOldFont = pdc -> SelectObject( &cfFont );
}
pdc->SetBkMode( TRANSPARENT );
CRect crBounds(x,y,x + crExt.Width(), y + crExt.Height());
pdc->DrawText(*pcsTextString, crBounds,DT_WORDBREAK);
pdc->SetBkMode( OPAQUE );
if (pcsFontName)
{
pdc -> SelectObject(pOldFont);
}
return;
}
void ReleaseErrorObject(IWbemClassObject *&rpErrorObject)
{
if (rpErrorObject){
rpErrorObject->Release();
rpErrorObject = NULL;
}
}
CString GetClassName(IWbemClassObject *pClass)
{
CString csProp = _T("__CLASS");
return GetBSTRProperty(pClass, &csProp);
}
CString GetClassPath(IWbemClassObject *pClass)
{
CString csProp = _T("__PATH");
return GetBSTRProperty(pClass, &csProp);
}
CString GetSuperClassName(IWbemClassObject *pClass)
{
CString csProp = _T("__SUPERCLASS");
return GetBSTRProperty(pClass, &csProp);
}
CString GetBSTRProperty(IWbemClassObject * pInst, CString *pcsProperty)
{
HRESULT hr;
CString csOut;
VARIANTARG v;
VariantInit(&v);
BSTR bstrTemp = pcsProperty->AllocSysString();
hr = pInst->Get(bstrTemp, 0 , &v, NULL, NULL);
SysFreeString(bstrTemp);
if(hr != S_OK) return csOut;
if(V_VT(&v) == VT_BSTR) csOut = V_BSTR(&v);
VariantClear(&v);
return csOut;
}
LPCTSTR ErrorString(HRESULT hr)
{
TCHAR szBuffer2[19];
static TCHAR szBuffer[24];
LPCTSTR psz;
switch(hr)
{
case WBEM_NO_ERROR:
psz = _T("WBEM_NO_ERROR");
break;
case WBEM_S_NO_MORE_DATA:
psz = _T("WBEM_S_NO_MORE_DATA");
break;
case WBEM_E_FAILED:
psz = _T("WBEM_E_FAILED");
break;
case WBEM_E_NOT_FOUND:
psz = _T("WBEM_E_NOT_FOUND");
break;
case WBEM_E_ACCESS_DENIED:
psz = _T("WBEM_E_ACCESS_DENIED");
break;
case WBEM_E_PROVIDER_FAILURE:
psz = _T("WBEM_E_PROVIDER_FAILURE");
break;
case WBEM_E_TYPE_MISMATCH:
psz = _T("WBEM_E_TYPE_MISMATCH");
break;
case WBEM_E_OUT_OF_MEMORY:
psz = _T("WBEM_E_OUT_OF_MEMORY");
break;
case WBEM_E_INVALID_CONTEXT:
psz = _T("WBEM_E_INVALID_CONTEXT");
break;
case WBEM_E_INVALID_PARAMETER:
psz = _T("WBEM_E_INVALID_PARAMETER");
break;
case WBEM_E_NOT_AVAILABLE:
psz = _T("WBEM_E_NOT_AVAILABLE");
break;
case WBEM_E_CRITICAL_ERROR:
psz = _T("WBEM_E_CRITICAL_ERROR");
break;
case WBEM_E_INVALID_STREAM:
psz = _T("WBEM_E_INVALID_STREAM");
break;
case WBEM_E_NOT_SUPPORTED:
psz = _T("WBEM_E_NOT_SUPPORTED");
break;
case WBEM_E_INVALID_SUPERCLASS:
psz = _T("WBEM_E_INVALID_SUPERCLASS");
break;
case WBEM_E_INVALID_NAMESPACE:
psz = _T("WBEM_E_INVALID_NAMESPACE");
break;
case WBEM_E_INVALID_OBJECT:
psz = _T("WBEM_E_INVALID_OBJECT");
break;
case WBEM_E_INVALID_CLASS:
psz = _T("WBEM_E_INVALID_CLASS");
break;
case WBEM_E_PROVIDER_NOT_FOUND:
psz = _T("WBEM_E_PROVIDER_NOT_FOUND");
break;
case WBEM_E_INVALID_PROVIDER_REGISTRATION:
psz = _T("WBEM_E_INVALID_PROVIDER_REGISTRATION");
break;
case WBEM_E_PROVIDER_LOAD_FAILURE:
psz = _T("WBEM_E_PROVIDER_LOAD_FAILURE");
break;
case WBEM_E_INITIALIZATION_FAILURE:
psz = _T("WBEM_E_INITIALIZATION_FAILURE");
break;
case WBEM_E_TRANSPORT_FAILURE:
psz = _T("WBEM_E_TRANSPORT_FAILURE");
break;
case WBEM_E_INVALID_OPERATION:
psz = _T("WBEM_E_INVALID_OPERATION");
break;
case WBEM_E_INVALID_QUERY:
psz = _T("WBEM_E_INVALID_QUERY");
break;
case WBEM_E_INVALID_QUERY_TYPE:
psz = _T("WBEM_E_INVALID_QUERY_TYPE");
break;
case WBEM_E_ALREADY_EXISTS:
psz = _T("WBEM_E_ALREADY_EXISTS");
break;
case WBEM_S_ALREADY_EXISTS:
psz = _T("WBEM_S_ALREADY_EXISTS");
break;
case WBEM_S_RESET_TO_DEFAULT:
psz = _T("WBEM_S_RESET_TO_DEFAULT");
break;
case WBEM_S_DIFFERENT:
psz = _T("WBEM_S_DIFFERENT");
break;
case WBEM_E_OVERRIDE_NOT_ALLOWED:
psz = _T("WBEM_E_OVERRIDE_NOT_ALLOWED");
break;
case WBEM_E_PROPAGATED_QUALIFIER:
psz = _T("WBEM_E_PROPAGATED_QUALIFIER");
break;
case WBEM_E_PROPAGATED_PROPERTY:
psz = _T("WBEM_E_PROPAGATED_PROPERTY");
break;
case WBEM_E_UNEXPECTED:
psz = _T("WBEM_E_UNEXPECTED");
break;
case WBEM_E_ILLEGAL_OPERATION:
psz = _T("WBEM_E_ILLEGAL_OPERATION");
break;
case WBEM_E_CANNOT_BE_KEY:
psz = _T("WBEM_E_CANNOT_BE_KEY");
break;
case WBEM_E_INCOMPLETE_CLASS:
psz = _T("WBEM_E_INCOMPLETE_CLASS");
break;
case WBEM_E_INVALID_SYNTAX:
psz = _T("WBEM_E_INVALID_SYNTAX");
break;
case WBEM_E_NONDECORATED_OBJECT:
psz = _T("WBEM_E_NONDECORATED_OBJECT");
break;
case WBEM_E_READ_ONLY:
psz = _T("WBEM_E_READ_ONLY");
break;
case WBEM_E_PROVIDER_NOT_CAPABLE:
psz = _T("WBEM_E_PROVIDER_NOT_CAPABLE");
break;
case WBEM_E_CLASS_HAS_CHILDREN:
psz = _T("WBEM_E_CLASS_HAS_CHILDREN");
break;
case WBEM_E_CLASS_HAS_INSTANCES:
psz = _T("WBEM_E_CLASS_HAS_INSTANCES");
break;
case WBEM_E_QUERY_NOT_IMPLEMENTED:
psz = _T("WBEM_E_QUERY_NOT_IMPLEMENTED");
break;
case WBEM_E_ILLEGAL_NULL:
psz = _T("WBEM_E_ILLEGAL_NULL");
break;
case WBEM_E_INVALID_QUALIFIER_TYPE:
psz = _T("WBEM_E_INVALID_QUALIFIER_TYPE");
break;
case WBEM_E_INVALID_PROPERTY_TYPE:
psz = _T("WBEM_E_INVALID_PROPERTY_TYPE");
break;
case WBEM_E_VALUE_OUT_OF_RANGE:
psz = _T("WBEM_E_VALUE_OUT_OF_RANGE");
break;
case WBEM_E_CANNOT_BE_SINGLETON:
psz = _T("WBEM_E_CANNOT_BE_SINGLETON");
break;
case WBEM_S_FALSE:
psz = _T("WBEM_S_FALSE");
break;
default:
_itot(hr, szBuffer2, 16);
_tcscat(szBuffer, szBuffer2);
psz = szBuffer;
break;
}
return psz;
}