📄 dxutsettingsdlg.cpp
字号:
m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_ADAPTER_OUTPUT )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_ADAPTER_OUTPUT_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_RESOLUTION )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_RESOLUTION_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_REFRESH_RATE )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_REFRESH_RATE_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_BACK_BUFFER_FORMAT )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_MULTISAMPLE_COUNT )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_MULTISAMPLE_COUNT_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_MULTISAMPLE_QUALITY )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_PRESENT_INTERVAL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_PRESENT_INTERVAL_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_DEBUG_DEVICE )->SetVisible( false );
break;
case DXUT_D3D10_DEVICE:
m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( false );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_ADAPTER_OUTPUT )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_ADAPTER_OUTPUT_LABEL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_RESOLUTION )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_RESOLUTION_LABEL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_REFRESH_RATE )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_REFRESH_RATE_LABEL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_BACK_BUFFER_FORMAT )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_MULTISAMPLE_COUNT )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_MULTISAMPLE_COUNT_LABEL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_MULTISAMPLE_QUALITY )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_PRESENT_INTERVAL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_PRESENT_INTERVAL_LABEL )->SetVisible( true );
m_Dialog.GetControl( DXUTSETTINGSDLG_D3D10_DEBUG_DEVICE )->SetVisible( true );
break;
}
}
//--------------------------------------------------------------------------------------
void WINAPI CD3DSettingsDlg::StaticOnEvent( UINT nEvent, int nControlID,
CDXUTControl* pControl, void* pUserData )
{
CD3DSettingsDlg* pD3DSettings = (CD3DSettingsDlg*) pUserData;
if( pD3DSettings )
pD3DSettings->OnEvent( nEvent, nControlID, pControl );
}
//--------------------------------------------------------------------------------------
// Name: CD3DSettingsDlg::StaticOnModeChangeTimer()
// Desc: Timer callback registered by a call to DXUTSetTimer. It is called each second
// until mode change timeout limit.
//--------------------------------------------------------------------------------------
void WINAPI CD3DSettingsDlg::StaticOnModeChangeTimer( UINT nIDEvent, void* pUserContext )
{
CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* ) pUserContext;
assert( pD3DSettings );
assert( pD3DSettings->m_pActiveDialog == &pD3DSettings->m_RevertModeDialog );
assert( pD3DSettings->m_nIDEvent == nIDEvent );
if( 0 == --pD3DSettings->m_nRevertModeTimeout )
{
CDXUTControl* pControl = pD3DSettings->m_RevertModeDialog.GetControl( DXUTSETTINGSDLG_MODE_CHANGE_REVERT );
assert( pControl );
pD3DSettings->m_RevertModeDialog.SendEvent( EVENT_BUTTON_CLICKED, false, pControl );
}
pD3DSettings->UpdateModeChangeTimeoutText( pD3DSettings->m_nRevertModeTimeout );
}
//--------------------------------------------------------------------------------------
void CD3DSettingsDlg::OnEvent( UINT nEvent, int nControlID,
CDXUTControl* pControl )
{
switch( nControlID )
{
case DXUTSETTINGSDLG_ADAPTER: OnAdapterChanged(); break;
case DXUTSETTINGSDLG_DEVICE_TYPE: OnDeviceTypeChanged(); break;
case DXUTSETTINGSDLG_WINDOWED: OnWindowedFullScreenChanged(); break;
case DXUTSETTINGSDLG_FULLSCREEN: OnWindowedFullScreenChanged(); break;
case DXUTSETTINGSDLG_ADAPTER_FORMAT: OnAdapterFormatChanged(); break;
case DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL:
{
if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE )
{
OnAdapterFormatChanged();
}
else
{
OnBackBufferFormatChanged();
}
break;
}
case DXUTSETTINGSDLG_RESOLUTION: OnResolutionChanged(); break;
case DXUTSETTINGSDLG_REFRESH_RATE: OnRefreshRateChanged(); break;
case DXUTSETTINGSDLG_BACK_BUFFER_FORMAT: OnBackBufferFormatChanged(); break;
case DXUTSETTINGSDLG_DEPTH_STENCIL: OnDepthStencilBufferFormatChanged(); break;
case DXUTSETTINGSDLG_MULTISAMPLE_TYPE: OnMultisampleTypeChanged(); break;
case DXUTSETTINGSDLG_MULTISAMPLE_QUALITY: OnMultisampleQualityChanged(); break;
case DXUTSETTINGSDLG_VERTEX_PROCESSING: OnVertexProcessingChanged(); break;
case DXUTSETTINGSDLG_PRESENT_INTERVAL: OnPresentIntervalChanged(); break;
case DXUTSETTINGSDLG_DEVICECLIP: OnDeviceClipChanged(); break;
case DXUTSETTINGSDLG_API_VERSION: OnAPIVersionChanged(); break;
case DXUTSETTINGSDLG_D3D10_ADAPTER_OUTPUT: OnAdapterOutputChanged(); break;
case DXUTSETTINGSDLG_D3D10_RESOLUTION: OnD3D10ResolutionChanged(); break;
case DXUTSETTINGSDLG_D3D10_REFRESH_RATE: OnRefreshRateChanged(); break;
case DXUTSETTINGSDLG_D3D10_BACK_BUFFER_FORMAT: OnBackBufferFormatChanged(); break;
case DXUTSETTINGSDLG_D3D10_MULTISAMPLE_COUNT: OnMultisampleTypeChanged(); break;
case DXUTSETTINGSDLG_D3D10_MULTISAMPLE_QUALITY: OnMultisampleQualityChanged(); break;
case DXUTSETTINGSDLG_D3D10_PRESENT_INTERVAL: OnPresentIntervalChanged(); break;
case DXUTSETTINGSDLG_D3D10_DEBUG_DEVICE: OnDebugDeviceChanged(); break;
case DXUTSETTINGSDLG_OK:
{
bool bFullScreenModeChange = false;
DXUTDeviceSettings currentSettings = DXUTGetDeviceSettings();
if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE )
{
if( g_DeviceSettings.d3d9.pp.Windowed )
{
g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0;
RECT rcClient;
if( DXUTIsWindowed() )
GetClientRect( DXUTGetHWND(), &rcClient );
else
rcClient = DXUTGetWindowClientRectAtModeChange();
DWORD dwWindowWidth = rcClient.right - rcClient.left;
DWORD dwWindowHeight = rcClient.bottom - rcClient.top;
g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWindowWidth;
g_DeviceSettings.d3d9.pp.BackBufferHeight = dwWindowHeight;
}
else
{
// Check for fullscreen mode change
bFullScreenModeChange = g_DeviceSettings.d3d9.pp.BackBufferWidth != currentSettings.d3d9.pp.BackBufferWidth ||
g_DeviceSettings.d3d9.pp.BackBufferHeight != currentSettings.d3d9.pp.BackBufferHeight ||
g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz != currentSettings.d3d9.pp.FullScreen_RefreshRateInHz;
}
if( g_DeviceSettings.d3d9.pp.MultiSampleType != D3DMULTISAMPLE_NONE )
{
g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
}
}
else
{
if( g_DeviceSettings.d3d10.sd.Windowed )
{
g_DeviceSettings.d3d10.sd.BufferDesc.RefreshRate.Denominator =
g_DeviceSettings.d3d10.sd.BufferDesc.RefreshRate.Numerator = 0;
RECT rcClient;
if( DXUTIsWindowed() )
GetClientRect( DXUTGetHWND(), &rcClient );
else
rcClient = DXUTGetWindowClientRectAtModeChange();
DWORD dwWindowWidth = rcClient.right - rcClient.left;
DWORD dwWindowHeight = rcClient.bottom - rcClient.top;
g_DeviceSettings.d3d10.sd.BufferDesc.Width = dwWindowWidth;
g_DeviceSettings.d3d10.sd.BufferDesc.Height = dwWindowHeight;
}
else
{
// Check for fullscreen mode change
bFullScreenModeChange = g_DeviceSettings.d3d10.sd.BufferDesc.Width != currentSettings.d3d10.sd.BufferDesc.Width ||
g_DeviceSettings.d3d10.sd.BufferDesc.Height != currentSettings.d3d10.sd.BufferDesc.Height ||
g_DeviceSettings.d3d10.sd.BufferDesc.RefreshRate.Denominator != currentSettings.d3d10.sd.BufferDesc.RefreshRate.Denominator ||
g_DeviceSettings.d3d10.sd.BufferDesc.RefreshRate.Numerator != currentSettings.d3d10.sd.BufferDesc.RefreshRate.Numerator;
}
}
if( bFullScreenModeChange )
{
// set appropriate global device settings to that of the current device
// settings. These will get set to the user-defined settings once the
// user accepts the mode change
DXUTDeviceSettings tSettings = g_DeviceSettings;
if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE )
{
g_DeviceSettings.d3d9.pp.BackBufferWidth = currentSettings.d3d9.pp.BackBufferWidth;
g_DeviceSettings.d3d9.pp.BackBufferHeight = currentSettings.d3d9.pp.BackBufferHeight;
g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = currentSettings.d3d9.pp.FullScreen_RefreshRateInHz;
g_DeviceSettings.d3d9.pp.Windowed = currentSettings.d3d9.pp.Windowed;
}
else
{
g_DeviceSettings.d3d10.sd.BufferDesc.Width = currentSettings.d3d10.sd.BufferDesc.Width;
g_DeviceSettings.d3d10.sd.BufferDesc.Height = currentSettings.d3d10.sd.BufferDesc.Height;
g_DeviceSettings.d3d10.sd.BufferDesc.RefreshRate.Denominator = currentSettings.d3d10.sd.BufferDesc.RefreshRate.Denominator;
g_DeviceSettings.d3d10.sd.BufferDesc.RefreshRate.Numerator = currentSettings.d3d10.sd.BufferDesc.RefreshRate.Numerator;
g_DeviceSettings.d3d10.sd.Windowed = currentSettings.d3d10.sd.Windowed;
}
// apply the user-defined settings
DXUTCreateDeviceFromSettings( &tSettings );
// create the mode change timeout dialog
m_pActiveDialog = &m_RevertModeDialog;
m_nRevertModeTimeout = 15;
UpdateModeChangeTimeoutText( m_nRevertModeTimeout );
// activate a timer for 1-second updates
DXUTSetTimer( StaticOnModeChangeTimer, 1.0f, &m_nIDEvent, (void*) this );
}
else
{
DXUTCreateDeviceFromSettings( &g_DeviceSettings );
SetActive( false );
}
break;
}
case DXUTSETTINGSDLG_CANCEL:
{
SetActive( false );
break;
}
case DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT:
{
DXUTKillTimer( m_nIDEvent );
g_DeviceSettings = DXUTGetDeviceSettings();
m_pActiveDialog = &m_Dialog;
SetActive( false );
break;
}
case DXUTSETTINGSDLG_MODE_CHANGE_REVERT:
{
DXUTKillTimer( m_nIDEvent );
m_pActiveDialog = &m_Dialog;
m_nIDEvent = 0;
m_nRevertModeTimeout = 0;
DXUTCreateDeviceFromSettings( &g_DeviceSettings );
Refresh();
break;
}
}
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::SetDeviceSettingsFromUI()
{
CDXUTComboBox* pComboBox;
CDXUTRadioButton* pRadioButton;
// DXUTSETTINGSDLG_DEVICE_TYPE
pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );
g_DeviceSettings.d3d9.DeviceType = (D3DDEVTYPE) PtrToUlong( pComboBox->GetSelectedData() );
// DXUTSETTINGSDLG_WINDOWED
pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED );
g_DeviceSettings.d3d9.pp.Windowed = pRadioButton->GetChecked();
// DXUTSETTINGSDLG_ADAPTER_FORMAT
pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );
g_DeviceSettings.d3d9.AdapterFormat = (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() );
if( g_DeviceSettings.d3d9.pp.Windowed )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -