⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkerdialog.cpp

📁 游戏编程精华02-含有几十个游戏编程例子
💻 CPP
字号:
/* Copyright (C) Greg James, 2001. 
 * All rights reserved worldwide.
 *
 * This software is provided "as is" without express or implied
 * warranties. You may freely copy and compile this source into
 * applications you distribute provided that the copyright text
 * below is included in the resulting source code, for example:
 * "Portions Copyright (C) Greg James, 2001"
 */
// linkerdialog.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "LinkerDialog.h"
#include "resource.h"
#include "linkercommon.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CLinkerDialog theApp;

// Exported functions
extern "C"
{

BOOL LinkerDialog_ShowDialog(bool bShow)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return theApp.ShowDialog(bShow);

}

BOOL LinkerDialog_Initialise(HWND hWndParent)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return theApp.Initialise(hWndParent);

}

BOOL LinkerDialog_Free()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return theApp.Free();

}

BOOL LinkerDialog_GetSettings(DialogSettings* pSettings)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return theApp.GetSettings(pSettings);
}

BOOL LinkerDialog_SetSettings(DialogSettings* pSettings)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return theApp.SetSettings(pSettings);
}

}


/////////////////////////////////////////////////////////////////////////////
// CLinkerdialogApp

BEGIN_MESSAGE_MAP(CLinkerDialog, CWinApp)
	//{{AFX_MSG_MAP(CLinkerDialog)
		// 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()

/////////////////////////////////////////////////////////////////////////////
// CLinkerdialogApp construction

CLinkerDialog::CLinkerDialog()
: m_bShow(false)
{
	
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CLinkerdialogApp object

BOOL CLinkerDialog::ShowDialog(bool bShow)
{
	m_bShow = bShow;
	m_TLOptions.ShowWindow(bShow);
	return true;
}

BOOL CLinkerDialog::Initialise(HWND hWnd)
{
	m_ParentWnd.Attach(hWnd);
	m_TLOptions.Create(MAKEINTRESOURCE(IDD_TLOPTIONS), &m_ParentWnd);
	ZeroMemory(&m_Settings, sizeof(DialogSettings));
	return true;
}

BOOL CLinkerDialog::Free()
{
	m_TLOptions.DestroyWindow();
	m_ParentWnd.Detach();
	return true;
}
	
BOOL CLinkerDialog::GetSettings(DialogSettings* pSettings) 
{
	assert(pSettings);

	DialogSettings Temp = m_Settings;
	
	m_TLOptions.UpdateData(TRUE);

	m_Settings.m_dwNumDirectionalLights = m_TLOptions.m_dwNumDirectionalLights;
	m_Settings.m_dwNumPointLights = m_TLOptions.m_dwNumPointLights;
	m_Settings.m_TexGen = (eTexGenOptions)m_TLOptions.m_TexGen;
	m_Settings.m_bSpecular = m_TLOptions.m_bSpecular;
	m_Settings.m_bEyeSpace = m_TLOptions.m_bEyeSpace;
	m_Settings.m_bLocalViewer = m_TLOptions.m_bLocalViewer;
	m_Settings.m_bLighting = m_TLOptions.m_bLighting;
	m_Settings.m_bTextures = m_TLOptions.m_bTextures;
	m_Settings.m_bWhiteLight = m_TLOptions.m_bWhiteLight;
	m_Settings.m_bSpecularRDotL = m_TLOptions.m_bSpecularRDotL;
	m_Settings.m_Fog = (eFogOptions)m_TLOptions.m_Fog;

	if (memcmp(&Temp, &m_Settings, sizeof(DialogSettings)) != 0)
	{
		m_Settings.m_bDirty = true;
	}
	else
	{
		m_Settings.m_bDirty = false;
	}

	*pSettings = m_Settings;

	UpdateEnables();

	return true;
}

BOOL CLinkerDialog::SetSettings(DialogSettings* pSettings) 
{
	assert(pSettings); 
	m_Settings = *pSettings;
	
	m_TLOptions.m_dwNumDirectionalLights = m_Settings.m_dwNumDirectionalLights;
	m_TLOptions.m_dwNumPointLights = m_Settings.m_dwNumPointLights;
	m_TLOptions.m_TexGen = (DWORD)m_Settings.m_TexGen;
	m_TLOptions.m_bSpecular = m_Settings.m_bSpecular;
	m_TLOptions.m_bEyeSpace = m_Settings.m_bEyeSpace;
	m_TLOptions.m_bLocalViewer = m_Settings.m_bLocalViewer;
	m_TLOptions.m_bLighting = m_Settings.m_bLighting;
	m_TLOptions.m_bTextures = m_Settings.m_bTextures;
	m_TLOptions.m_bWhiteLight = m_Settings.m_bWhiteLight;
	m_TLOptions.m_bSpecularRDotL = m_Settings.m_bSpecularRDotL;
	m_TLOptions.m_Fog = (DWORD)m_Settings.m_Fog;

	UpdateEnables();
	
	m_TLOptions.UpdateData(FALSE);
	return true;
}

BOOL CLinkerDialog::UpdateEnables()
{
	CWnd* pBlinnRadio = m_TLOptions.GetDlgItem(IDC_TEXGEN_BUMPMAPBASIS);
	CWnd* pCameraReflect = m_TLOptions.GetDlgItem(IDC_TEXGEN_CUBEMAPREFLECT);
	CWnd* pTexGenNone = m_TLOptions.GetDlgItem(IDC_TEXGEN_NONE);
	pBlinnRadio->EnableWindow(m_Settings.m_bTextures && m_Settings.m_bEnableBump);
	pCameraReflect->EnableWindow(m_Settings.m_bTextures && m_Settings.m_bEnableReflect);
	pTexGenNone->EnableWindow(m_Settings.m_bTextures);

	CWnd* pDirectional = m_TLOptions.GetDlgItem(IDC_EDIT_NUMDIRECTIONAL);
	CWnd* pPoint = m_TLOptions.GetDlgItem(IDC_EDIT_NUMPOINT);
	CWnd* pSpecular = m_TLOptions.GetDlgItem(IDC_LIGHTING_SPECULAR);
	CWnd* pLocalViewer = m_TLOptions.GetDlgItem(IDC_LIGHTING_LOCALVIEWER);
	CWnd* pEyeSpace = m_TLOptions.GetDlgItem(IDC_LIGHTING_EYESPACE);
	CWnd* pSpecularRDotL = m_TLOptions.GetDlgItem(IDC_LIGHTING_SPECULARREFLECT);
	pDirectional->EnableWindow(m_Settings.m_bLighting);
	pPoint->EnableWindow(m_Settings.m_bLighting);
	pSpecular->EnableWindow(m_Settings.m_bLighting);
	pLocalViewer->EnableWindow(m_Settings.m_bLighting && m_Settings.m_bSpecular && !m_Settings.m_bSpecularRDotL);
	pEyeSpace->EnableWindow(m_Settings.m_bLighting);
	pSpecularRDotL->EnableWindow(m_Settings.m_bLighting && m_Settings.m_bSpecular);
	
	CWnd* pTexture = m_TLOptions.GetDlgItem(IDC_ENABLETEXTURES);
	pTexture->EnableWindow(m_Settings.m_bEnableTextures);


	return TRUE;
}


// Standard init/close
BOOL CLinkerDialog::InitInstance() 
{
	return CWinApp::InitInstance();
}

int CLinkerDialog::ExitInstance() 
{
	return CWinApp::ExitInstance();
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -