/******************************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 #include #include #include #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: // 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); }