📄 dxutmisc.cpp
字号:
TRACE_ID(WM_MDITILE);
TRACE_ID(WM_MDICASCADE);
TRACE_ID(WM_MDIICONARRANGE);
TRACE_ID(WM_MDIGETACTIVE);
TRACE_ID(WM_MDISETMENU);
TRACE_ID(WM_ENTERSIZEMOVE);
TRACE_ID(WM_EXITSIZEMOVE);
TRACE_ID(WM_DROPFILES);
TRACE_ID(WM_MDIREFRESHMENU);
TRACE_ID(WM_IME_SETCONTEXT);
TRACE_ID(WM_IME_NOTIFY);
TRACE_ID(WM_IME_CONTROL);
TRACE_ID(WM_IME_COMPOSITIONFULL);
TRACE_ID(WM_IME_SELECT);
TRACE_ID(WM_IME_CHAR);
TRACE_ID(WM_IME_REQUEST);
TRACE_ID(WM_IME_KEYDOWN);
TRACE_ID(WM_IME_KEYUP);
TRACE_ID(WM_MOUSEHOVER);
TRACE_ID(WM_MOUSELEAVE);
TRACE_ID(WM_NCMOUSEHOVER);
TRACE_ID(WM_NCMOUSELEAVE);
TRACE_ID(WM_WTSSESSION_CHANGE);
TRACE_ID(WM_TABLET_FIRST);
TRACE_ID(WM_TABLET_LAST);
TRACE_ID(WM_CUT);
TRACE_ID(WM_COPY);
TRACE_ID(WM_PASTE);
TRACE_ID(WM_CLEAR);
TRACE_ID(WM_UNDO);
TRACE_ID(WM_RENDERFORMAT);
TRACE_ID(WM_RENDERALLFORMATS);
TRACE_ID(WM_DESTROYCLIPBOARD);
TRACE_ID(WM_DRAWCLIPBOARD);
TRACE_ID(WM_PAINTCLIPBOARD);
TRACE_ID(WM_VSCROLLCLIPBOARD);
TRACE_ID(WM_SIZECLIPBOARD);
TRACE_ID(WM_ASKCBFORMATNAME);
TRACE_ID(WM_CHANGECBCHAIN);
TRACE_ID(WM_HSCROLLCLIPBOARD);
TRACE_ID(WM_QUERYNEWPALETTE);
TRACE_ID(WM_PALETTEISCHANGING);
TRACE_ID(WM_PALETTECHANGED);
TRACE_ID(WM_HOTKEY);
TRACE_ID(WM_PRINT);
TRACE_ID(WM_PRINTCLIENT);
TRACE_ID(WM_APPCOMMAND);
TRACE_ID(WM_THEMECHANGED);
TRACE_ID(WM_HANDHELDFIRST);
TRACE_ID(WM_HANDHELDLAST);
TRACE_ID(WM_AFXFIRST);
TRACE_ID(WM_AFXLAST);
TRACE_ID(WM_PENWINFIRST);
TRACE_ID(WM_PENWINLAST);
TRACE_ID(WM_APP);
default: return L"Unknown";
}
}
//--------------------------------------------------------------------------------------
WCHAR* WINAPI DXUTTraceD3DDECLTYPEtoString( BYTE t )
{
switch( t )
{
case D3DDECLTYPE_FLOAT1: return L"D3DDECLTYPE_FLOAT1";
case D3DDECLTYPE_FLOAT2: return L"D3DDECLTYPE_FLOAT2";
case D3DDECLTYPE_FLOAT3: return L"D3DDECLTYPE_FLOAT3";
case D3DDECLTYPE_FLOAT4: return L"D3DDECLTYPE_FLOAT4";
case D3DDECLTYPE_D3DCOLOR: return L"D3DDECLTYPE_D3DCOLOR";
case D3DDECLTYPE_UBYTE4: return L"D3DDECLTYPE_UBYTE4";
case D3DDECLTYPE_SHORT2: return L"D3DDECLTYPE_SHORT2";
case D3DDECLTYPE_SHORT4: return L"D3DDECLTYPE_SHORT4";
case D3DDECLTYPE_UBYTE4N: return L"D3DDECLTYPE_UBYTE4N";
case D3DDECLTYPE_SHORT2N: return L"D3DDECLTYPE_SHORT2N";
case D3DDECLTYPE_SHORT4N: return L"D3DDECLTYPE_SHORT4N";
case D3DDECLTYPE_USHORT2N: return L"D3DDECLTYPE_USHORT2N";
case D3DDECLTYPE_USHORT4N: return L"D3DDECLTYPE_USHORT4N";
case D3DDECLTYPE_UDEC3: return L"D3DDECLTYPE_UDEC3";
case D3DDECLTYPE_DEC3N: return L"D3DDECLTYPE_DEC3N";
case D3DDECLTYPE_FLOAT16_2: return L"D3DDECLTYPE_FLOAT16_2";
case D3DDECLTYPE_FLOAT16_4: return L"D3DDECLTYPE_FLOAT16_4";
case D3DDECLTYPE_UNUSED: return L"D3DDECLTYPE_UNUSED";
default: return L"D3DDECLTYPE Unknown";
}
}
WCHAR* WINAPI DXUTTraceD3DDECLMETHODtoString( BYTE m )
{
switch( m )
{
case D3DDECLMETHOD_DEFAULT: return L"D3DDECLMETHOD_DEFAULT";
case D3DDECLMETHOD_PARTIALU: return L"D3DDECLMETHOD_PARTIALU";
case D3DDECLMETHOD_PARTIALV: return L"D3DDECLMETHOD_PARTIALV";
case D3DDECLMETHOD_CROSSUV: return L"D3DDECLMETHOD_CROSSUV";
case D3DDECLMETHOD_UV: return L"D3DDECLMETHOD_UV";
case D3DDECLMETHOD_LOOKUP: return L"D3DDECLMETHOD_LOOKUP";
case D3DDECLMETHOD_LOOKUPPRESAMPLED: return L"D3DDECLMETHOD_LOOKUPPRESAMPLED";
default: return L"D3DDECLMETHOD Unknown";
}
}
WCHAR* WINAPI DXUTTraceD3DDECLUSAGEtoString( BYTE u )
{
switch( u )
{
case D3DDECLUSAGE_POSITION: return L"D3DDECLUSAGE_POSITION";
case D3DDECLUSAGE_BLENDWEIGHT: return L"D3DDECLUSAGE_BLENDWEIGHT";
case D3DDECLUSAGE_BLENDINDICES: return L"D3DDECLUSAGE_BLENDINDICES";
case D3DDECLUSAGE_NORMAL: return L"D3DDECLUSAGE_NORMAL";
case D3DDECLUSAGE_PSIZE: return L"D3DDECLUSAGE_PSIZE";
case D3DDECLUSAGE_TEXCOORD: return L"D3DDECLUSAGE_TEXCOORD";
case D3DDECLUSAGE_TANGENT: return L"D3DDECLUSAGE_TANGENT";
case D3DDECLUSAGE_BINORMAL: return L"D3DDECLUSAGE_BINORMAL";
case D3DDECLUSAGE_TESSFACTOR: return L"D3DDECLUSAGE_TESSFACTOR";
case D3DDECLUSAGE_POSITIONT: return L"D3DDECLUSAGE_POSITIONT";
case D3DDECLUSAGE_COLOR: return L"D3DDECLUSAGE_COLOR";
case D3DDECLUSAGE_FOG: return L"D3DDECLUSAGE_FOG";
case D3DDECLUSAGE_DEPTH: return L"D3DDECLUSAGE_DEPTH";
case D3DDECLUSAGE_SAMPLE: return L"D3DDECLUSAGE_SAMPLE";
default: return L"D3DDECLUSAGE Unknown";
}
}
//--------------------------------------------------------------------------------------
// Multimon API handling for OSes with or without multimon API support
//--------------------------------------------------------------------------------------
#define DXUT_PRIMARY_MONITOR ((HMONITOR)0x12340042)
typedef HMONITOR (WINAPI* LPMONITORFROMWINDOW)(HWND, DWORD);
typedef BOOL (WINAPI* LPGETMONITORINFO)(HMONITOR, LPMONITORINFO);
typedef HMONITOR (WINAPI* LPMONITORFROMRECT)(LPCRECT lprcScreenCoords, DWORD dwFlags);
BOOL WINAPI DXUTGetMonitorInfo(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo)
{
static bool s_bInited = false;
static LPGETMONITORINFO s_pFnGetMonitorInfo = NULL;
if( !s_bInited )
{
s_bInited = true;
HMODULE hUser32 = GetModuleHandle( L"USER32" );
if (hUser32 )
{
OSVERSIONINFOA osvi = {0}; osvi.dwOSVersionInfoSize = sizeof(osvi); GetVersionExA((OSVERSIONINFOA*)&osvi);
bool bNT = (VER_PLATFORM_WIN32_NT == osvi.dwPlatformId);
s_pFnGetMonitorInfo = (LPGETMONITORINFO) (bNT ? GetProcAddress(hUser32,"GetMonitorInfoW") : GetProcAddress(hUser32,"GetMonitorInfoA"));
}
}
if( s_pFnGetMonitorInfo )
return s_pFnGetMonitorInfo(hMonitor, lpMonitorInfo);
RECT rcWork;
if ((hMonitor == DXUT_PRIMARY_MONITOR) && lpMonitorInfo && (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) && SystemParametersInfoA(SPI_GETWORKAREA, 0, &rcWork, 0))
{
lpMonitorInfo->rcMonitor.left = 0;
lpMonitorInfo->rcMonitor.top = 0;
lpMonitorInfo->rcMonitor.right = GetSystemMetrics(SM_CXSCREEN);
lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics(SM_CYSCREEN);
lpMonitorInfo->rcWork = rcWork;
lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY;
return TRUE;
}
return FALSE;
}
HMONITOR WINAPI DXUTMonitorFromWindow(HWND hWnd, DWORD dwFlags)
{
static bool s_bInited = false;
static LPMONITORFROMWINDOW s_pFnGetMonitorFromWindow = NULL;
if( !s_bInited )
{
s_bInited = true;
HMODULE hUser32 = GetModuleHandle( L"USER32" );
if (hUser32 ) s_pFnGetMonitorFromWindow = (LPMONITORFROMWINDOW) GetProcAddress(hUser32,"MonitorFromWindow");
}
if( s_pFnGetMonitorFromWindow )
return s_pFnGetMonitorFromWindow(hWnd, dwFlags);
else
return DXUT_PRIMARY_MONITOR;
}
HMONITOR WINAPI DXUTMonitorFromRect(LPCRECT lprcScreenCoords, DWORD dwFlags)
{
static bool s_bInited = false;
static LPMONITORFROMRECT s_pFnGetMonitorFromRect = NULL;
if( !s_bInited )
{
s_bInited = true;
HMODULE hUser32 = GetModuleHandle( L"USER32" );
if (hUser32 ) s_pFnGetMonitorFromRect = (LPMONITORFROMRECT) GetProcAddress(hUser32,"MonitorFromRect");
}
if( s_pFnGetMonitorFromRect )
return s_pFnGetMonitorFromRect(lprcScreenCoords, dwFlags);
else
return DXUT_PRIMARY_MONITOR;
}
//--------------------------------------------------------------------------------------
// Get the desktop resolution of an adapter. This isn't the same as the current resolution
// from GetAdapterDisplayMode since the device might be fullscreen
//--------------------------------------------------------------------------------------
void WINAPI DXUTGetDesktopResolution( UINT AdapterOrdinal, UINT* pWidth, UINT* pHeight )
{
DXUTDeviceSettings DeviceSettings = DXUTGetDeviceSettings();
WCHAR strDeviceName[256] = {0};
DEVMODE devMode;
ZeroMemory( &devMode, sizeof(DEVMODE) );
devMode.dmSize = sizeof(DEVMODE);
if( DeviceSettings.ver == DXUT_D3D9_DEVICE )
{
CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration();
CD3D9EnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( AdapterOrdinal );
if(pAdapterInfo)
{
MultiByteToWideChar( CP_ACP, 0, pAdapterInfo->AdapterIdentifier.DeviceName, -1, strDeviceName, 256 );
strDeviceName[255] = 0;
}
}
else
{
CD3D10Enumeration* pd3dEnum = DXUTGetD3D10Enumeration();
CD3D10EnumOutputInfo* pOutputInfo = pd3dEnum->GetOutputInfo( AdapterOrdinal, DeviceSettings.d3d10.Output );
StringCchCopy( strDeviceName, 256, pOutputInfo->Desc.DeviceName );
}
EnumDisplaySettings( strDeviceName, ENUM_REGISTRY_SETTINGS, &devMode );
if( pWidth )
*pWidth = devMode.dmPelsWidth;
if( pHeight )
*pHeight = devMode.dmPelsHeight;
}
//--------------------------------------------------------------------------------------
// Display error msg box to help debug
//--------------------------------------------------------------------------------------
HRESULT WINAPI DXUTTrace( const CHAR* strFile, DWORD dwLine, HRESULT hr,
const WCHAR* strMsg, bool bPopMsgBox )
{
bool bShowMsgBoxOnError = DXUTGetShowMsgBoxOnError();
if( bPopMsgBox && bShowMsgBoxOnError == false )
bPopMsgBox = false;
return DXTrace( strFile, dwLine, hr, strMsg, bPopMsgBox );
}
//--------------------------------------------------------------------------------------
void WINAPI DXUTConvertDeviceSettings10to9( DXUTD3D10DeviceSettings* pIn, DXUTD3D9DeviceSettings* pOut )
{
pOut->AdapterOrdinal = pIn->AdapterOrdinal;
if( pIn->DriverType == D3D10_DRIVER_TYPE_HARDWARE )
pOut->DeviceType = D3DDEVTYPE_HAL;
else if( pIn->DriverType == D3D10_DRIVER_TYPE_REFERENCE )
pOut->DeviceType = D3DDEVTYPE_REF;
else if( pIn->DriverType == D3D10_DRIVER_TYPE_NULL )
pOut->DeviceType = D3DDEVTYPE_NULLREF;
pOut->AdapterFormat = ConvertFormatDXGIToD3D9( pIn->sd.BufferDesc.Format );
pOut->BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
pOut->pp.BackBufferWidth = pIn->sd.BufferDesc.Width;
pOut->pp.BackBufferHeight = pIn->sd.BufferDesc.Height;
pOut->pp.BackBufferFormat = ConvertFormatDXGIToD3D9( pIn->sd.BufferDesc.Format );
pOut->pp.BackBufferCount = pIn->sd.BufferCount;
pOut->pp.MultiSampleType = (D3DMULTISAMPLE_TYPE)pIn->sd.SampleDesc.Count;
pOut->pp.MultiSampleQuality = pIn->sd.SampleDesc.Quality;
pOut->pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pOut->pp.hDeviceWindow = pIn->sd.OutputWindow;
pOut->pp.Windowed = pIn->sd.Windowed;
pOut->pp.EnableAutoDepthStencil = true;
pOut->pp.AutoDepthStencilFormat = D3DFMT_D24FS8;
pOut->pp.Flags = 0;
if( pIn->sd.BufferDesc.RefreshRate.Denominator == 0 )
pOut->pp.FullScreen_RefreshRateInHz = 60;
else
pOut->pp.FullScreen_RefreshRateInHz = pIn->sd.BufferDesc.RefreshRate.Numerator / pIn->sd.BufferDesc.RefreshRate.Denominator;
switch( pIn->SyncInterval )
{
case 0: pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; break;
case 2: pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_TWO; break;
case 3: pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_THREE; break;
case 4: pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_FOUR; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -