241 lines
5.3 KiB
C
241 lines
5.3 KiB
C
/******************************Module*Header*******************************\
|
|
* Module Name: viewer.c
|
|
*
|
|
* Main window.
|
|
*
|
|
* Created: 14-Mar-1995 23:42:08
|
|
* Author: Gilman Wong [gilmanw]
|
|
*
|
|
* Copyright (c) 1995 Microsoft Corporation
|
|
*
|
|
\**************************************************************************/
|
|
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <ctype.h>
|
|
|
|
#include "global.h"
|
|
#include "glwindow.h"
|
|
|
|
// Window functions.
|
|
|
|
void MyCreateWindows(HINSTANCE);
|
|
long FAR PASCAL MainWndProc(HWND, UINT, WPARAM, LPARAM);
|
|
|
|
// Global window handles. Always handy to have around.
|
|
|
|
HINSTANCE ghInstance;
|
|
HWND hwndMain = (HWND) NULL;
|
|
HWND hwndList = (HWND) NULL;
|
|
|
|
/******************************Public*Routine******************************\
|
|
* WinMain
|
|
*
|
|
* Main loop.
|
|
*
|
|
* History:
|
|
* 15-Dec-1994 -by- Gilman Wong [gilmanw]
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
int WINAPI
|
|
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
|
|
int nCmdShow)
|
|
{
|
|
MSG msg;
|
|
SCENE *scene;
|
|
|
|
MyCreateWindows(hInstance);
|
|
MyCreateGLWindow(hInstance, lpCmdLine);
|
|
|
|
while ( GetMessage(&msg, (HWND) NULL, (UINT) NULL, (UINT) NULL) )
|
|
{
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
return (msg.wParam);
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* MyCreateWindows
|
|
*
|
|
* Setup the windows.
|
|
*
|
|
* History:
|
|
* 15-Dec-1994 -by- Gilman Wong [gilmanw]
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
void MyCreateWindows(HINSTANCE hInstance)
|
|
{
|
|
WNDCLASS wc;
|
|
RECT rcl;
|
|
|
|
ghInstance = hInstance;
|
|
|
|
// Register and create the main window, which contains the info listbox.
|
|
|
|
wc.style = 0;
|
|
wc.lpfnWndProc = MainWndProc;
|
|
wc.cbClsExtra = 0;
|
|
wc.cbWndExtra = 0;
|
|
wc.hInstance = hInstance;
|
|
wc.hIcon = LoadIcon(hInstance, "ViewerIcon");
|
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
|
|
wc.lpszMenuName = NULL;
|
|
wc.lpszClassName = "MainWClass";
|
|
RegisterClass(&wc);
|
|
|
|
hwndMain = CreateWindow(
|
|
"MainWClass",
|
|
"3D Viewer",
|
|
WS_OVERLAPPEDWINDOW|WS_MAXIMIZE,
|
|
0,
|
|
0,
|
|
300,
|
|
768,
|
|
NULL,
|
|
NULL,
|
|
hInstance,
|
|
NULL
|
|
);
|
|
|
|
if (hwndMain)
|
|
{
|
|
ShowWindow(hwndMain, SW_NORMAL);
|
|
UpdateWindow(hwndMain);
|
|
|
|
// Create the list box to fill the main window.
|
|
|
|
GetClientRect(hwndMain, &rcl);
|
|
|
|
hwndList = CreateWindow(
|
|
"LISTBOX",
|
|
"3D Viewer Info",
|
|
WS_CHILD | WS_VISIBLE | WS_VSCROLL
|
|
| WS_HSCROLL | LBS_NOINTEGRALHEIGHT,
|
|
rcl.left, rcl.top,
|
|
(rcl.right - rcl.left), (rcl.bottom - rcl.top),
|
|
hwndMain,
|
|
NULL,
|
|
hInstance,
|
|
NULL
|
|
);
|
|
|
|
if (hwndList)
|
|
{
|
|
SendMessage(
|
|
hwndList,
|
|
WM_SETFONT,
|
|
(WPARAM) GetStockObject(ANSI_FIXED_FONT),
|
|
(LPARAM) FALSE
|
|
);
|
|
|
|
LBreset();
|
|
ShowWindow(hwndList, SW_NORMAL);
|
|
UpdateWindow(hwndList);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* MainWndProc
|
|
*
|
|
* WndProc for the main window. List box is maintained here.
|
|
*
|
|
* History:
|
|
* 15-Dec-1994 -by- Gilman Wong [gilmanw]
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
long FAR PASCAL MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
RECT rcl;
|
|
long lRet = 0;
|
|
|
|
// Process window message.
|
|
|
|
switch (message)
|
|
{
|
|
case WM_SIZE:
|
|
lRet = DefWindowProc(hwndList, message, wParam, lParam);
|
|
GetClientRect(hwndMain, &rcl);
|
|
MoveWindow(
|
|
hwndList,
|
|
rcl.left, rcl.top,
|
|
(rcl.right - rcl.left), (rcl.bottom - rcl.top),
|
|
TRUE
|
|
);
|
|
UpdateWindow(hwndList);
|
|
break;
|
|
|
|
case WM_KEYDOWN:
|
|
switch (wParam)
|
|
{
|
|
case VK_ESCAPE: // <ESC> is quick exit
|
|
|
|
PostMessage(hwnd, WM_DESTROY, 0, 0);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
PostQuitMessage(0);
|
|
break;
|
|
|
|
default:
|
|
lRet = DefWindowProc(hwnd, message, wParam, lParam);
|
|
break;
|
|
}
|
|
|
|
return lRet;
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* LBprintf
|
|
*
|
|
* ListBox printf implementation.
|
|
*
|
|
* History:
|
|
* 15-Dec-1994 -by- Gilman Wong [gilmanw]
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
void LBprintf(PCH msg, ...)
|
|
{
|
|
va_list ap;
|
|
char buffer[256];
|
|
|
|
va_start(ap, msg);
|
|
|
|
vsprintf(buffer, msg, ap);
|
|
|
|
SendMessage(hwndList, LB_ADDSTRING, (WPARAM) 0, (LPARAM) buffer);
|
|
SendMessage(hwndList, WM_SETREDRAW, (WPARAM) TRUE, (LPARAM) 0);
|
|
InvalidateRect(hwndList, NULL, TRUE);
|
|
UpdateWindow(hwndList);
|
|
|
|
va_end(ap);
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* LBreset
|
|
*
|
|
* Reset ListBox state (clear).
|
|
*
|
|
* History:
|
|
* 15-Dec-1994 -by- Gilman Wong [gilmanw]
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
void LBreset()
|
|
{
|
|
SendMessage(hwndList, LB_RESETCONTENT, (WPARAM) FALSE, (LPARAM) 0);
|
|
}
|