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.
 
 
 
 
 
 

353 lines
9.6 KiB

/******************************Module*Header*******************************\
* Module Name: Main.cpp
*
* This file contains the code to support the functionality test harness
* for GDI+. This includes menu options and calling the appropriate
* functions for execution.
*
* Created: 28-Apr-2000 - Jeff Vezina [t-jfvez]
*
* Copyright (c) 2000 Microsoft Corporation
*
\**************************************************************************/
#undef UNICODE
#undef _UNICODE
#include <windows.h>
#include <commctrl.h>
#include <objbase.h>
#include <gdiplus.h>
#include "CFuncTest.h"
#include "resource.h"
CFuncTest g_FuncTest; // FuncTest (handles test runs)
HBRUSH g_hbrBackground=NULL; // Main window background color
HWND g_hWndMain=NULL; // Main window
int g_nResult=0; // Result of test run
// Include all the outputs (classes derived from COutput)
#include "CHWND.h"
#include "CHDC.h"
#include "CFile.h"
#include "CBitmap.h"
#include "CDIB.h"
#include "CDirect3D.h"
#include "CPrinter.h"
#include "CMetafile.h"
// Include all the primitives (classes derived from CPrimitive)
#include "CPolygons.h"
#include "CBitmaps.h"
#include "CCachedBitmap.h"
#include "CCompoundLines.h"
#include "CContainer.h"
#include "CContainerClip.h"
#include "CDashes.h"
#include "CPathGradient.hpp"
#include "CDash.hpp"
#include "CLines.hpp"
#include "CGradients.h"
#include "CHatch.h"
#include "CImaging.h"
#include "CRecolor.h"
#include "CInsetLines.h"
#include "CMixedObjects.h"
#include "CPaths.h"
#include "CPrimitives.h"
#include "CRegions.h"
#include "CText.h"
#include "CRegression.h"
#include "CSourceCopy.h"
#include "CExtra.h"
// Include all the settings (classes derived from CSetting)
#include "CAntialias.h"
#include "CHalfPixel.h"
#include "CQuality.h"
#include "CHalftone.h"
#include "CChecker.h"
#include "CRotate.h"
#include "CBKGradient.h"
#include "CHatch.h"
#include "../gpinit.inc"
// Create global objects for each individual output
// First constructor param is the regression flag
// If true, the test will take part of the regression suite
CHWND g_HWND(true);
CHDC g_HDC(true);
CDirect3D g_Direct3D(false);
CPrinter g_Printer(false);
CDIB g_DIB1(true,1);
CDIB g_DIB2(false,2);
CDIB g_DIB4(true,4);
CDIB g_DIB8(true,8);
CDIB g_DIB16(true,16);
CDIB g_DIB24(true,24);
CDIB g_DIB32(true,32);
CFile g_File1(false,1);
CFile g_File2(false,2);
CFile g_File4(false,4);
CFile g_File8(false,8);
CFile g_File16(false,16);
CFile g_File24(false,24);
CFile g_File32(false,32);
CBitmap g_Bitmap1(false, PixelFormat1bppIndexed);
CBitmap g_Bitmap4(false, PixelFormat4bppIndexed);
CBitmap g_Bitmap8(false, PixelFormat8bppIndexed);
CBitmap g_Bitmap16Gray(false, PixelFormat16bppGrayScale);
CBitmap g_Bitmap16555(false, PixelFormat16bppRGB555);
CBitmap g_Bitmap16565(false, PixelFormat16bppRGB565);
CBitmap g_Bitmap161555(false, PixelFormat16bppARGB1555);
CBitmap g_Bitmap24(false, PixelFormat24bppRGB);
CBitmap g_Bitmap32RGB(false, PixelFormat32bppRGB);
CBitmap g_Bitmap32ARGB(false, PixelFormat32bppARGB);
CBitmap g_Bitmap32PARGB(false, PixelFormat32bppPARGB);
CBitmap g_Bitmap48RGB(false, PixelFormat48bppRGB);
CBitmap g_Bitmap64ARGB(false, PixelFormat64bppARGB);
CBitmap g_Bitmap64PARGB(false, PixelFormat64bppPARGB);
CMetafile g_MetafileEMF(false, MetafileTypeEmf);
CMetafile g_MetafileEMFPlus(false, MetafileTypeEmfPlusOnly);
CMetafile g_MetafileEMFPlusDual(true, MetafileTypeEmfPlusDual);
CMetafile g_MetafileEMFF(false, MetafileTypeEmf, true);
CMetafile g_MetafileEMFPlusF(false, MetafileTypeEmfPlusOnly, true);
CMetafile g_MetafileEMFPlusDualF(true, MetafileTypeEmfPlusDual, true);
CRegression g_Regression(true);
// Create global objects for each individual setting
// First constructor param is the regression flag
// If true, the test will take part of the regression suite
CAntialias g_Antialias(true);
CHalfPixel g_HalfPixel(true);
CQuality g_Quality(true);
CCompositingMode g_CompositingMode(true);
CHalftone g_Halftone(true);
CChecker g_Checker(true);
CRotate g_Rotate13(true,13);
CRotate g_Rotate45(true,45);
CBKGradient g_BKGradient(true);
CHatch g_Hatch(true);
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
// Main window proc
{
switch (Msg)
{
case WM_COMMAND: // Process menu buttons
switch(LOWORD(wParam))
{
case IDM_RUN:
g_FuncTest.Run();
break;
case IDM_REGRESSION:
g_FuncTest.RunRegression();
break;
case IDM_OPTIONS:
g_FuncTest.RunOptions();
break;
case IDM_QUIT:
{
HWND hwnd = g_hWndMain;
g_hWndMain = NULL;
DestroyWindow(hwnd);
}
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProcA(hWnd,Msg,wParam,lParam);
}
void WindowUninit()
// Uninitializes window
{
if (g_hbrBackground!=NULL) // Destroy background brush
{
DeleteObject((HGDIOBJ)g_hbrBackground);
g_hbrBackground=NULL;
}
if (g_hWndMain!=NULL) // Destroy main window
{
DestroyWindow(g_hWndMain);
g_hWndMain=NULL;
}
}
BOOL WindowInit()
// Creates window and starts up app
{
WNDCLASSA wc;
HINSTANCE hInst=GetModuleHandleA(NULL);
// Create white background brush
g_hbrBackground=CreateSolidBrush(RGB(0xFF,0xFF,0xFF));
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIconA(GetModuleHandle(NULL),MAKEINTRESOURCEA(ID_APP));
wc.hCursor = LoadCursorA(NULL,MAKEINTRESOURCEA(32512));
wc.hbrBackground = g_hbrBackground;
wc.lpszMenuName = MAKEINTRESOURCEA(IDR_MENU1);
wc.lpszClassName = "Functest";
if (!RegisterClassA(&wc))
return false;
g_hWndMain=CreateWindowExA(
0,
"Functest",
"GDI+ Functionality Test",
WS_OVERLAPPED|WS_CAPTION|WS_BORDER|WS_THICKFRAME|WS_MAXIMIZEBOX|
WS_MINIMIZEBOX|WS_CLIPCHILDREN|WS_VISIBLE|WS_MAXIMIZE|WS_SYSMENU,
CW_USEDEFAULT,
CW_USEDEFAULT,
800,
600,
NULL,
NULL,
hInst,
NULL
);
HRESULT h=GetLastError();
if (g_hWndMain==NULL)
return false;
UpdateWindow(g_hWndMain);
ShowWindow(g_hWndMain,SW_SHOW);
return true;
}
/***************************************************************************\
* main(argc, argv[])
*
* Sets up the message loop.
*
* History:
* 04-07-91 - Created - KentD
* 04-28-00 - Modified - Jeff Vezina (t-jfvez)
*
\***************************************************************************/
__cdecl main(int argc,PCHAR argv[])
{
MSG msg;
if (!gGdiplusInitHelper.IsValid())
{
return 0;
}
CoInitialize(NULL);
if (!WindowInit())
return 0;
if (!g_FuncTest.Init(g_hWndMain))
return 0;
// Init all primitives, graphics types, and graphics settings
g_HWND.Init();
g_HDC.Init();
g_Direct3D.Init();
g_Printer.Init();
g_DIB1.Init();
g_DIB2.Init();
g_DIB4.Init();
g_DIB8.Init();
g_DIB16.Init();
g_DIB24.Init();
g_DIB32.Init();
g_File1.Init();
g_File2.Init();
g_File4.Init();
g_File8.Init();
g_File16.Init();
g_File24.Init();
g_File32.Init();
g_Bitmap1.Init();
g_Bitmap4.Init();
g_Bitmap8.Init();
g_Bitmap16Gray.Init();
g_Bitmap16555.Init();
g_Bitmap16565.Init();
g_Bitmap161555.Init();
g_Bitmap24.Init();
g_Bitmap32RGB.Init();
g_Bitmap32ARGB.Init();
g_Bitmap32PARGB.Init();
g_Bitmap48RGB.Init();
g_Bitmap64ARGB.Init();
g_Bitmap64PARGB.Init();
g_MetafileEMF.Init();
g_MetafileEMFPlus.Init();
g_MetafileEMFPlusDual.Init();
g_MetafileEMFF.Init();
g_MetafileEMFPlusF.Init();
g_MetafileEMFPlusDualF.Init();
g_Regression.Init();
g_Antialias.Init();
g_Quality.Init();
g_CompositingMode.Init();
g_HalfPixel.Init();
g_Halftone.Init();
g_Checker.Init();
g_Rotate13.Init();
g_Rotate45.Init();
g_BKGradient.Init();
g_Hatch.Init();
// Put initializations into cextra.cpp, so that individual
// developers can implement their own file for private usage.
ExtraInitializations();
for (int i=1;i<argc;i++)
{
if ((_stricmp(argv[i],"/?")==0) || (_stricmp(argv[i],"?")==0) || (_stricmp(argv[i],"-?")==0))
{
printf("Functest command line parameters:\n");
printf("/? - Show the command line parameters\n");
printf("/regression - Run the regression test immediately\n");
return 1;
}
else if (_stricmp(argv[i],"/regression")==0)
{
g_FuncTest.RunRegression();
SendMessageA(g_FuncTest.m_hWndMain,WM_CLOSE,0,0);
return g_nResult;
}
}
while (GetMessageA(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessageA(&msg);
}
WindowUninit();
CoUninitialize();
return g_nResult;
}
#define UNICODE
#define _UNICODE