Initial commit: ROW Client source code
Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
353
Library/dxx8/samples/Multimedia/Direct3D/MFCTex/mfctex.cpp
Normal file
353
Library/dxx8/samples/Multimedia/Direct3D/MFCTex/mfctex.cpp
Normal file
@@ -0,0 +1,353 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// File: MFCTex.cpp
|
||||
//
|
||||
// Desc: Main file for the D3D multitexture app that uses MFC.
|
||||
//
|
||||
// Copyright (c) 1997-2001 Microsoft Corporation. All rights reserved.
|
||||
//-----------------------------------------------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#include <stdio.h>
|
||||
#include <mmsystem.h>
|
||||
#include <D3DX8.h>
|
||||
#include "D3DApp.h"
|
||||
#include "D3DFont.h"
|
||||
#include "D3DUtil.h"
|
||||
#include "DXUtil.h"
|
||||
#include "MFCTex.h"
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// The MFC macros are all listed here
|
||||
//-----------------------------------------------------------------------------
|
||||
IMPLEMENT_DYNCREATE( CAppDoc, CDocument )
|
||||
IMPLEMENT_DYNCREATE( CAppFrameWnd, CFrameWnd )
|
||||
IMPLEMENT_DYNCREATE( CAppForm, CFormView )
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP( CApp, CWinApp )
|
||||
//{{AFX_MSG_MAP(CApp)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP( CAppForm, CFormView )
|
||||
//{{AFX_MSG_MAP(CAppForm)
|
||||
ON_COMMAND( IDC_VIEWFULLSCREEN, OnToggleFullScreen )
|
||||
ON_COMMAND( IDC_VIEWCODE, OnViewCode )
|
||||
ON_COMMAND( IDM_CHANGEDEVICE, OnChangeDevice )
|
||||
ON_BN_CLICKED( IDM_CHANGEDEVICE, OnChangeDevice )
|
||||
ON_EN_CHANGE( IDC_TEX0_NAME, OnChangeTex )
|
||||
ON_EN_CHANGE( IDC_TEX1_NAME, OnChangeTex )
|
||||
ON_EN_CHANGE( IDC_TEX2_NAME, OnChangeTex )
|
||||
ON_BN_CLICKED( IDC_SELECTTEX0, OnSelectTexture0Name )
|
||||
ON_BN_CLICKED( IDC_SELECTTEX1, OnSelectTexture1Name )
|
||||
ON_BN_CLICKED( IDC_SELECTTEX2, OnSelectTexture2Name )
|
||||
ON_EN_CHANGE( IDC_BLEND_FACTOR, OnChangeBlendFactor )
|
||||
ON_EN_CHANGE( IDC_DIFFUSE_COLOR, OnChangeDiffuseColor )
|
||||
ON_CBN_SELCHANGE( IDC_PRESET_EFFECTS, OnChangePresetEffects )
|
||||
ON_CBN_SELCHANGE( IDC_TEX0_COLORARG1, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX0_COLOROP, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX0_COLORARG2, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX0_ALPHAARG1, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX0_ALPHAOP, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX0_ALPHAARG2, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX1_COLORARG1, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX1_COLOROP, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX1_COLORARG2, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX1_ALPHAARG1, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX1_ALPHAOP, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX1_ALPHAARG2, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX2_COLORARG1, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX2_COLOROP, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX2_COLORARG2, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX2_ALPHAARG1, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX2_ALPHAOP, OnChangeStageArgs )
|
||||
ON_CBN_SELCHANGE( IDC_TEX2_ALPHAARG2, OnChangeStageArgs )
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CAppDoc, CDocument)
|
||||
//{{AFX_MSG_MAP(CAppDoc)
|
||||
// NOTE - the ClassWizard will add and remove mapping macros here.
|
||||
// DO NOT EDIT what you see in these blocks of generated code!
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CAppFrameWnd, CFrameWnd)
|
||||
//{{AFX_MSG_MAP(CAppFrameWnd)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Global data and objects
|
||||
//-----------------------------------------------------------------------------
|
||||
CApp g_App;
|
||||
CAppForm* g_AppFormView = NULL;
|
||||
TCHAR* g_strAppTitle = _T("MFCTex: MFC Multitexture Sample");
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: FullScreenWndProc()
|
||||
// Desc: The WndProc funtion used when the app is in fullscreen mode. This is
|
||||
// needed simply to trap the ESC key.
|
||||
//-----------------------------------------------------------------------------
|
||||
LRESULT CALLBACK FullScreenWndProc( HWND hWnd, UINT msg, WPARAM wParam,
|
||||
LPARAM lParam )
|
||||
{
|
||||
if( msg == WM_CLOSE )
|
||||
{
|
||||
// User wants to exit, so go back to windowed mode and exit for real
|
||||
g_AppFormView->OnToggleFullScreen();
|
||||
g_App.GetMainWnd()->PostMessage( WM_CLOSE, 0, 0 );
|
||||
}
|
||||
|
||||
if( msg == WM_SETCURSOR )
|
||||
{
|
||||
SetCursor( NULL );
|
||||
}
|
||||
|
||||
if( msg == WM_KEYUP && wParam == VK_ESCAPE )
|
||||
{
|
||||
// User wants to leave fullscreen mode
|
||||
g_AppFormView->OnToggleFullScreen();
|
||||
}
|
||||
|
||||
return DefWindowProc( hWnd, msg, wParam, lParam );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: CheckForLostFullscreen()
|
||||
// Desc: If fullscreen and device was lost (probably due to alt-tab),
|
||||
// automatically switch to windowed mode
|
||||
//-----------------------------------------------------------------------------
|
||||
HRESULT CAppForm::CheckForLostFullscreen()
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
if( m_bWindowed )
|
||||
return S_OK;
|
||||
|
||||
if( FAILED( hr = m_pd3dDevice->TestCooperativeLevel() ) )
|
||||
ForceWindowed();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: PreCreateWindow()
|
||||
// Desc: Change the window style (so it cannot maximize or be sized) before
|
||||
// the main frame window is created.
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL CAppFrameWnd::PreCreateWindow( CREATESTRUCT& cs )
|
||||
{
|
||||
cs.style = WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX;
|
||||
return CFrameWnd::PreCreateWindow( cs );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: InitInstance()
|
||||
// Desc: This is the main entry point for the application. The MFC window stuff
|
||||
// is initialized here. See also the main initialization routine for the
|
||||
// CAppForm class, which is called indirectly from here.
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL CApp::InitInstance()
|
||||
{
|
||||
// Asscociate the MFC app with the frame window and doc/view classes
|
||||
AddDocTemplate( new CSingleDocTemplate( IDR_MAINFRAME,
|
||||
RUNTIME_CLASS(CAppDoc),
|
||||
RUNTIME_CLASS(CAppFrameWnd),
|
||||
RUNTIME_CLASS(CAppForm) ) );
|
||||
|
||||
// Dispatch commands specified on the command line (req'd by MFC). This
|
||||
// also initializes the the CAppDoc, CAppFrameWnd, and CAppForm classes.
|
||||
CCommandLineInfo cmdInfo;
|
||||
ParseCommandLine( cmdInfo );
|
||||
if( !ProcessShellCommand( cmdInfo ) )
|
||||
return FALSE;
|
||||
|
||||
if( !g_AppFormView->IsReady() )
|
||||
return FALSE;
|
||||
|
||||
g_AppFormView->GetParentFrame()->RecalcLayout();
|
||||
g_AppFormView->ResizeParentToFit( FALSE );
|
||||
|
||||
m_pMainWnd->SetWindowText( g_strAppTitle );
|
||||
m_pMainWnd->UpdateWindow();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: OnIdle()
|
||||
// Desc: Uses idle time to render the 3D scene.
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL CApp::OnIdle( LONG )
|
||||
{
|
||||
// Do not render if the app is minimized
|
||||
if( m_pMainWnd->IsIconic() )
|
||||
return FALSE;
|
||||
|
||||
// Update and render a frame
|
||||
if( g_AppFormView->IsReady() )
|
||||
{
|
||||
g_AppFormView->CheckForLostFullscreen();
|
||||
g_AppFormView->RenderScene();
|
||||
}
|
||||
|
||||
// Keep requesting more idle time
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: CAppForm()
|
||||
// Desc: Constructor for the dialog resource form
|
||||
//-----------------------------------------------------------------------------
|
||||
CAppForm::CAppForm()
|
||||
:CFormView( IDD_FORMVIEW )
|
||||
{
|
||||
g_AppFormView = this;
|
||||
m_bActive = FALSE;
|
||||
m_bReady = FALSE;
|
||||
m_bWindowed = TRUE;
|
||||
|
||||
m_dwAdapter = 0L;
|
||||
m_pD3D = NULL;
|
||||
m_pd3dDevice = NULL;
|
||||
m_bUseDepthBuffer = TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: ~CAppForm()
|
||||
// Desc: Destructor for the dialog resource form. Shuts down the app
|
||||
//-----------------------------------------------------------------------------
|
||||
CAppForm::~CAppForm()
|
||||
{
|
||||
Cleanup3DEnvironment();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: OnInitialUpdate()
|
||||
// Desc: When the AppForm object is created, this function is called to
|
||||
// initialize it. Here we getting access ptrs to some of the controls,
|
||||
// and setting the initial state of some of them as well.
|
||||
//-----------------------------------------------------------------------------
|
||||
VOID CAppForm::OnInitialUpdate()
|
||||
{
|
||||
// Update the UI
|
||||
CFormView::OnInitialUpdate();
|
||||
InitializeUIControls();
|
||||
|
||||
// Save static reference to the render window
|
||||
m_hwndRenderWindow = GetDlgItem(IDC_RENDERVIEW)->GetSafeHwnd();
|
||||
|
||||
// Register a class for a fullscreen window
|
||||
WNDCLASS wndClass = { CS_HREDRAW | CS_VREDRAW, FullScreenWndProc, 0, 0, NULL,
|
||||
NULL, NULL, (HBRUSH)GetStockObject(WHITE_BRUSH), NULL,
|
||||
_T("Fullscreen Window") };
|
||||
RegisterClass( &wndClass );
|
||||
|
||||
// We create the fullscreen window (not visible) at startup, so it can
|
||||
// be the focus window. The focus window can only be set at CreateDevice
|
||||
// time, not in a Reset, so ToggleFullscreen wouldn't work unless we have
|
||||
// already set up the fullscreen focus window.
|
||||
m_hwndRenderFullScreen = CreateWindow( _T("Fullscreen Window"), NULL,
|
||||
WS_POPUP, CW_USEDEFAULT,
|
||||
CW_USEDEFAULT, 100, 100,
|
||||
GetTopLevelParent()->GetSafeHwnd(), 0L, NULL, 0L );
|
||||
|
||||
// Note that for the MFC samples, the device window and focus window
|
||||
// are not the same.
|
||||
CD3DApplication::m_hWnd = m_hwndRenderWindow;
|
||||
CD3DApplication::m_hWndFocus = m_hwndRenderFullScreen;
|
||||
CD3DApplication::Create( AfxGetInstanceHandle() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: OnChangeDevice()
|
||||
// Desc: Use hit the "Change Device.." button. Display the dialog for the user
|
||||
// to select a new device/mode, and call Change3DEnvironment to
|
||||
// use the new device/mode.
|
||||
//-----------------------------------------------------------------------------
|
||||
VOID CAppForm::OnChangeDevice()
|
||||
{
|
||||
UserSelectNewDevice();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: AdjustWindowForChange()
|
||||
// Desc: Adjusts the window properties for windowed or fullscreen mode
|
||||
//-----------------------------------------------------------------------------
|
||||
HRESULT CAppForm::AdjustWindowForChange()
|
||||
{
|
||||
if( m_bWindowed )
|
||||
{
|
||||
::ShowWindow( m_hwndRenderFullScreen, SW_HIDE );
|
||||
CD3DApplication::m_hWnd = m_hwndRenderWindow;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( ::IsIconic( m_hwndRenderFullScreen ) )
|
||||
::ShowWindow( m_hwndRenderFullScreen, SW_RESTORE );
|
||||
::ShowWindow( m_hwndRenderFullScreen, SW_SHOW );
|
||||
CD3DApplication::m_hWnd = m_hwndRenderFullScreen;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: OnToggleFullScreen()
|
||||
// Desc: Called when user toggles the fullscreen mode
|
||||
//-----------------------------------------------------------------------------
|
||||
void CAppForm::OnToggleFullScreen()
|
||||
{
|
||||
ToggleFullscreen();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user