CnC_Red_Alert/WINVQ/VQAVIEW/MAINWIND.CPP

210 lines
6.8 KiB
C++

/*
** Command & Conquer Red Alert(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/***************************************************************************
** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
***************************************************************************
* *
* Project Name : VQAVIEW *
* *
* File Name : MAINWIND.CPP *
* *
* Programmer : Mike Grayford *
* *
* Start Date : Nov 15, 1995 *
* *
* Last Update : Nov 15, 1995 [MG] *
* *
*-------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#include <windows.h>
#include <westwood.h>
#include <mainwind.h>
#include <vidmode.h>
#include <wm.h>
#include <misc.h>
#include <wwlib.h>
//==========================================================================
// Private defines
//==========================================================================
#define APPLICATION_NAME "VQAVIEW"
#define APPLICATION_TITLE "VQA Movie Viewer"
//==========================================================================
// Public data
//==========================================================================
MainWindowClass Main_Window;
//==========================================================================
// Private functions
//==========================================================================
long WINAPI Main_Window_Message_Handler(
WindowHandle window_handle,
unsigned int message,
unsigned int w_param,
long l_param );
/***************************************************************************
* MainWindowClass::MainWindowClass -- Constructor for MainWindowClass *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: See PVCS log *
*=========================================================================*/
MainWindowClass::MainWindowClass( void )
{
// Much ado about nothing.
}
void MainWindowClass::Create_Main_Window( InstanceHandle instance_handle )
{
WindowClass window_class;
//
// Register the window class.
//
window_class.style = CS_OWNDC;
window_class.lpfnWndProc = Main_Window_Message_Handler;
window_class.cbClsExtra = 0;
window_class.cbWndExtra = 0;
window_class.hInstance = instance_handle;
window_class.hIcon = LoadIcon ( NULL, IDI_APPLICATION );
window_class.hCursor = LoadCursor ( NULL, IDC_ARROW );
window_class.hbrBackground = GetStockObject( BLACK_BRUSH );
window_class.lpszMenuName = APPLICATION_NAME;
window_class.lpszClassName = APPLICATION_NAME;
RegisterClass ( &window_class );
//
// Create our main window
//
main_window_handle = CreateWindowEx (
WS_EX_TOPMOST, // extended window info
APPLICATION_NAME, // window class name
APPLICATION_TITLE, // window caption
// WS_POPUP | WS_MAXIMIZE, // window style
WS_OVERLAPPED, // window style
0, // initial x position
0, // initial y position
VIDEO_MODE_WIDTH, // initial width
VIDEO_MODE_HEIGHT, // initial height
NULL, // parent window handle
NULL, // window menu handle
instance_handle, // program instance handle
NULL ); // creation parameters
MainWindow = main_window_handle;
global_instance_handle = instance_handle;
}
void MainWindowClass::Display_Window( void )
{
//
// Bring up the window, force a paint, and make sure we are the foreground window.
//
ShowWindow( main_window_handle, SW_SHOWMAXIMIZED );
UpdateWindow( main_window_handle );
SetForegroundWindow( main_window_handle );
//
// Via direct draw, set the video mode.
//
Set_Video_Mode( main_window_handle, VIDEO_MODE_WIDTH, VIDEO_MODE_HEIGHT, VIDEO_MODE_BITS_PER_PIXEL );
}
BOOL MainWindowClass::Update_Windows_Messages( void )
{
if ( PeekMessage( &message_queue, NULL, 0, 0, PM_NOREMOVE ) ) {
if ( GetMessage( &message_queue, NULL, 0, 0 ) ) {
TranslateMessage( &message_queue );
DispatchMessage( &message_queue );
}
else {
return( FALSE );
}
}
return( TRUE );
}
int MainWindowClass::Get_Message_Queue_wParam( void )
{
return( message_queue.wParam );
}
WindowHandle MainWindowClass::Get_Window_Handle( void )
{
return( main_window_handle );
}
long WINAPI Main_Window_Message_Handler(
WindowHandle window_handle,
unsigned int message,
unsigned int w_param,
long l_param )
{
switch ( message ) {
case WM_COMMAND:
return( WM_Command_Func( window_handle, message, w_param, l_param ) );
case WM_TIMER:
break;
case WM_ACTIVATEAPP:
WM_ActivateApp_Func( window_handle, message, w_param, l_param );
break;
case WM_DESTROY:
WM_Destroy_Func( window_handle, message, w_param, l_param );
return( 0 );
}
return( DefWindowProc( window_handle, message, w_param, l_param ) );
}
InstanceHandle MainWindowClass::Get_Instance_Handle( void )
{
return( global_instance_handle );
}