WindowsXP-SP1/windows/advcore/gdiplus/test/driverhack/main.cpp
2020-09-30 16:53:49 +02:00

204 lines
5.5 KiB
C++

/******************************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 "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
int gnPaths = 2;
// Include all the outputs (classes derived from COutput)
#include "CHWND.h"
#include "CHDC.h"
#include "CPrinter.h"
// Include all the primitives (classes derived from CPrimitive)
#include "CPaths.h"
#include "CBanding.h"
#include "CExtra.h"
// 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);
CPrinter g_Printer(false);
LPFNGDIPLUS glpfnDisplayPaletteWindowNotify;
// 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
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_SAMPLES:
g_FuncTest.RunSamples();
break;
case IDM_QUIT:
exit(0);
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 = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIconA(NULL,MAKEINTRESOURCEA(32512));// IDI_APPLICATION);
wc.hCursor = LoadCursorA(NULL, IDC_ARROW);
wc.hbrBackground = g_hbrBackground;
wc.lpszMenuName = MAKEINTRESOURCEA(IDR_MENU1);
wc.lpszClassName = "DriverHack";
if (!RegisterClassA(&wc))
return false;
g_hWndMain=CreateWindowExA(
0,
"DriverHack",
"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,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInst,
NULL
);
HRESULT h=GetLastError();
if (g_hWndMain==NULL)
return false;
ShowWindow(g_hWndMain,SW_SHOW);
UpdateWindow(g_hWndMain);
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;
HMODULE hmodGdiPlus;
CoInitialize(NULL);
if (!WindowInit())
return 0;
if (!g_FuncTest.Init(g_hWndMain))
return 0;
hmodGdiPlus = LoadLibrary(TEXT("gdiplus.dll"));
if(hmodGdiPlus) {
glpfnDisplayPaletteWindowNotify = (LPFNGDIPLUS)
GetProcAddress(hmodGdiPlus,
TEXT("GdipDisplayPaletteWindowNotify"));
}
if((glpfnDisplayPaletteWindowNotify == NULL) || (hmodGdiPlus == NULL)) {
MessageBox(NULL,
"Unable to load gdiplus.dll",
"CfuncTest",
MB_OK);
return FALSE;
}
// Init all primitives, graphics types, and graphics settings
g_HWND.Init();
g_HDC.Init();
g_Printer.Init();
// Put initializations into cextra.cpp, so that individual
// developers can implement their own file for private usage.
ExtraInitializations();
while (GetMessageA(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessageA(&msg);
}
WindowUninit();
FreeLibrary(hmodGdiPlus);
CoUninitialize();
return g_nResult;
}
#define UNICODE
#define _UNICODE