亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? d3dsaver.cpp

?? VC游戲編程基礎
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
//-----------------------------------------------------------------------------
// File: D3DSaver.cpp
//
// Desc: Framework for screensavers that use Direct3D.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#include <Windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <stdio.h>
#include <tchar.h>
#include <regstr.h>
#define COMPILE_MULTIMON_STUBS
#include <multimon.h>
#include <mmsystem.h>
#include <D3DX9.h>
#include "D3DSaver.h"
#include "dxutil.h"

// Resource IDs.  D3DSaver assumes that you will create resources with
// these IDs that it can use.  The easiest way to do this is to copy
// the resources from the rc file of an existing D3DSaver-based program.
#define IDI_MAIN_ICON                   101
#define IDD_SINGLEMONITORSETTINGS       200
#define IDD_MULTIMONITORSETTINGS        201

#define IDC_MONITORSTAB                 2000
#define IDC_TABNAMEFMT                  2001
#define IDC_ADAPTERNAME                 2002
#define IDC_RENDERING                   2003
#define IDC_MOREINFO                    2004
#define IDC_DISABLEHW                   2005
#define IDC_SCREENUSAGEBOX              2006
#define IDC_RENDER                      2007
#define IDC_LEAVEBLACK                  2008
#define IDC_DISPLAYMODEBOX              2009
#define IDC_MODESSTATIC                 2010
#define IDC_MODESCOMBO                  2011
#define IDC_AUTOMATIC                   2012
#define IDC_DISPLAYMODENOTE             2013
#define IDC_GENERALBOX                  2014
#define IDC_SAME                        2015
#define IDC_MODEFMT                     2016

#define IDS_ERR_GENERIC                 2100
#define IDS_ERR_NODIRECT3D              2101
#define IDS_ERR_NOWINDOWEDHAL           2102
#define IDS_ERR_CREATEDEVICEFAILED      2103
#define IDS_ERR_NOCOMPATIBLEDEVICES     2104
#define IDS_ERR_NOHARDWAREDEVICE        2105
#define IDS_ERR_HALNOTCOMPATIBLE        2106
#define IDS_ERR_NOHALTHISMODE           2107
#define IDS_ERR_MEDIANOTFOUND           2108
#define IDS_ERR_RESIZEFAILED            2109
#define IDS_ERR_OUTOFMEMORY             2110
#define IDS_ERR_OUTOFVIDEOMEMORY        2111
#define IDS_ERR_NOPREVIEW               2112

#define IDS_INFO_GOODHAL                2200
#define IDS_INFO_BADHAL_GOODSW          2201
#define IDS_INFO_BADHAL_BADSW           2202
#define IDS_INFO_BADHAL_NOSW            2203
#define IDS_INFO_NOHAL_GOODSW           2204
#define IDS_INFO_NOHAL_BADSW            2205
#define IDS_INFO_NOHAL_NOSW             2206
#define IDS_INFO_DISABLEDHAL_GOODSW     2207
#define IDS_INFO_DISABLEDHAL_BADSW      2208
#define IDS_INFO_DISABLEDHAL_NOSW       2209
#define IDS_RENDERING_HAL               2210
#define IDS_RENDERING_SW                2211
#define IDS_RENDERING_NONE              2212


// Use the following structure rather than DISPLAY_DEVICE, since some old 
// versions of DISPLAY_DEVICE are missing the last two fields and this can
// cause problems with EnumDisplayDevices on Windows 2000.
struct DISPLAY_DEVICE_FULL
{
    DWORD  cb;
    TCHAR  DeviceName[32];
    TCHAR  DeviceString[128];
    DWORD  StateFlags;
    TCHAR  DeviceID[128];
    TCHAR  DeviceKey[128];
};


static CD3DScreensaver* s_pD3DScreensaver = NULL;


//-----------------------------------------------------------------------------
// Name: CD3DScreensaver()
// Desc: Constructor
//-----------------------------------------------------------------------------
CD3DScreensaver::CD3DScreensaver()
{
    s_pD3DScreensaver = this;

    m_bCheckingSaverPassword = FALSE;
    m_bIs9x = FALSE;
    m_dwSaverMouseMoveCount = 0;
    m_hWndParent = NULL;
    m_hPasswordDLL = NULL;
    m_hWnd = NULL;
    m_VerifySaverPassword = NULL;
    
    m_bAllScreensSame = FALSE;
    m_pD3D = NULL;
    m_pd3dDevice = NULL;
    m_bWindowed = FALSE;
    m_bWaitForInputIdle = FALSE;

    m_bErrorMode = FALSE;
    m_hrError = S_OK;
    m_szError[0] = TEXT('\0');

    m_fFPS              = 0.0f;
    m_strDeviceStats[0] = TEXT('\0');
    m_strFrameStats[0]  = TEXT('\0');

    // Note: clients should load a resource into m_strWindowTitle to localize this string
    lstrcpy( m_strWindowTitle, TEXT("Screen Saver") );
    m_bAllowRef = FALSE;
    m_bUseDepthBuffer = FALSE;
    m_bMultithreaded = FALSE;
    m_bOneScreenOnly = FALSE;
    m_strRegPath[0] = TEXT('\0');
    m_dwMinDepthBits = 16;
    m_dwMinStencilBits = 0;
    m_SwapEffectFullscreen = D3DSWAPEFFECT_DISCARD;
    m_SwapEffectWindowed = D3DSWAPEFFECT_COPY;

    SetRectEmpty( &m_rcRenderTotal );
    SetRectEmpty( &m_rcRenderCurDevice );

    ZeroMemory( m_Monitors, sizeof(m_Monitors) );
    m_dwNumMonitors = 0;

    ZeroMemory( m_Adapters, sizeof(m_Adapters) );
    m_dwNumAdapters = 0;

    ZeroMemory( m_RenderUnits, sizeof(m_RenderUnits) );
    m_dwNumRenderUnits = 0;

    m_fTime = 0.0f;
}




//-----------------------------------------------------------------------------
// Name: Create()
// Desc: Have the client program call this function before calling Run().
//-----------------------------------------------------------------------------
HRESULT CD3DScreensaver::Create( HINSTANCE hInstance )
{
    HRESULT hr;

    SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_IDLE );

    m_hInstance = hInstance;

    // Parse the command line and do the appropriate thing
    TCHAR* pstrCmdLine = GetCommandLine();
    m_SaverMode = ParseCommandLine( pstrCmdLine );

    EnumMonitors();

    // Create the screen saver window(s)
    if( m_SaverMode == sm_preview || 
        m_SaverMode == sm_test    || 
        m_SaverMode == sm_full )
    {
        if( FAILED( hr = CreateSaverWindow() ) )
        {
            m_bErrorMode = TRUE;
            m_hrError = hr;
        }
    }

    if( m_SaverMode == sm_preview )
    {
        // In preview mode, "pause" (enter a limited message loop) briefly 
        // before proceeding, so the display control panel knows to update itself.
        m_bWaitForInputIdle = TRUE;

        // Post a message to mark the end of the initial group of window messages
        PostMessage( m_hWnd, WM_USER, 0, 0 );

        MSG msg;
        while( m_bWaitForInputIdle )
        {
            // If GetMessage returns FALSE, it's quitting time.
            if( !GetMessage( &msg, m_hWnd, 0, 0 ) )
            {
                // Post the quit message to handle it later
                PostQuitMessage(0);
                break;
            }

            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }

    // Create Direct3D object
    if( (m_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) == NULL )
    {
        m_bErrorMode = TRUE;
        m_hrError = D3DAPPERR_NODIRECT3D;
        return S_OK;
    }

    // Give the app the opportunity to register a pluggable SW D3D Device.
    if( FAILED( hr = RegisterSoftwareDevice() ) )
    {
        m_bErrorMode = TRUE;
        m_hrError = hr;
        return S_OK;
    }

    // Build a list of Direct3D adapters, modes and devices. The
    // ConfirmDevice() callback is used to confirm that only devices that
    // meet the app's requirements are considered.
    if( FAILED( hr = BuildDeviceList() ) )
    {
        m_bErrorMode = TRUE;
        m_hrError = hr;
        return S_OK;
    }

    // Make sure that at least one valid usable D3D device was found
    BOOL bCompatibleDeviceFound = FALSE;
    for( DWORD iAdapter = 0; iAdapter < m_dwNumAdapters; iAdapter++ )
    {
        if( m_Adapters[iAdapter]->bHasAppCompatHAL || 
            m_Adapters[iAdapter]->bHasAppCompatSW )
        {
            bCompatibleDeviceFound = TRUE;
            break;
        }
    }
    if( !bCompatibleDeviceFound )
    {
        m_bErrorMode = TRUE;
        m_hrError = D3DAPPERR_NOCOMPATIBLEDEVICES;
        return S_OK;
    }

    // Read any settings we need
    ReadSettings();

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: EnumMonitors()
// Desc: Determine HMONITOR, desktop rect, and other info for each monitor.  
//       Note that EnumDisplayDevices enumerates monitors in the order 
//       indicated on the Settings page of the Display control panel, which 
//       is the order we want to list monitors in, as opposed to the order 
//       used by D3D's GetAdapterInfo.
//-----------------------------------------------------------------------------
VOID CD3DScreensaver::EnumMonitors( VOID )
{
    DWORD iDevice = 0;
    DISPLAY_DEVICE_FULL dispdev;
    DISPLAY_DEVICE_FULL dispdev2;
    DEVMODE devmode;
    dispdev.cb = sizeof(dispdev);
    dispdev2.cb = sizeof(dispdev2);
    devmode.dmSize = sizeof(devmode);
    devmode.dmDriverExtra = 0;
    MonitorInfo* pMonitorInfoNew;
    while( EnumDisplayDevices(NULL, iDevice, (DISPLAY_DEVICE*)&dispdev, 0) )
    {
        // Ignore NetMeeting's mirrored displays
        if( (dispdev.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) == 0 )
        {
            // To get monitor info for a display device, call EnumDisplayDevices
            // a second time, passing dispdev.DeviceName (from the first call) as
            // the first parameter.
            EnumDisplayDevices(dispdev.DeviceName, 0, (DISPLAY_DEVICE*)&dispdev2, 0);

            pMonitorInfoNew = &m_Monitors[m_dwNumMonitors];
            ZeroMemory( pMonitorInfoNew, sizeof(MonitorInfo) );
            lstrcpy( pMonitorInfoNew->strDeviceName, dispdev.DeviceString );
            lstrcpy( pMonitorInfoNew->strMonitorName, dispdev2.DeviceString );
            pMonitorInfoNew->iAdapter = NO_ADAPTER;
            
            if( dispdev.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP )
            {
                EnumDisplaySettings( dispdev.DeviceName, ENUM_CURRENT_SETTINGS, &devmode );
                if( dispdev.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE )
                {
                    // For some reason devmode.dmPosition is not always (0, 0)
                    // for the primary display, so force it.
                    pMonitorInfoNew->rcScreen.left = 0;
                    pMonitorInfoNew->rcScreen.top = 0;
                }
                else
                {
                    pMonitorInfoNew->rcScreen.left = devmode.dmPosition.x;
                    pMonitorInfoNew->rcScreen.top = devmode.dmPosition.y;
                }
                pMonitorInfoNew->rcScreen.right = pMonitorInfoNew->rcScreen.left + devmode.dmPelsWidth;
                pMonitorInfoNew->rcScreen.bottom = pMonitorInfoNew->rcScreen.top + devmode.dmPelsHeight;
                pMonitorInfoNew->hMonitor = MonitorFromRect( &pMonitorInfoNew->rcScreen, MONITOR_DEFAULTTONULL );
            }
            m_dwNumMonitors++;
            if( m_dwNumMonitors == MAX_DISPLAYS )
                break;
        }
        iDevice++;
    }
}




//-----------------------------------------------------------------------------
// Name: Run()
// Desc: Starts main execution of the screen saver.
//-----------------------------------------------------------------------------
INT CD3DScreensaver::Run()
{
    HRESULT hr;

    // Parse the command line and do the appropriate thing
    switch ( m_SaverMode )
    {
        case sm_config:
        {
            if( m_bErrorMode )
            {
                DisplayErrorMsg( m_hrError, 0 );
            }
            else
            {
                DoConfig();
            }
            break;
        }
        
        case sm_preview:
        case sm_test:
        case sm_full:
        {
            if( FAILED( hr = DoSaver() ) )
                DisplayErrorMsg( hr, 0 );
            break;
        }
        
        case sm_passwordchange:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月激情综合网| 一区二区成人在线观看| 欧美精品九九99久久| 99久久99久久久精品齐齐| 国产在线视视频有精品| 老司机精品视频线观看86| 亚洲自拍偷拍欧美| 亚洲第一福利一区| 亚洲国产精品久久一线不卡| 亚洲成人中文在线| 亚洲国产日韩综合久久精品| 一区二区三区在线视频免费观看| 亚洲天堂久久久久久久| 亚洲欧美在线另类| 一区二区三区日韩| 亚洲成av人片一区二区梦乃| 五月天激情综合| 国内国产精品久久| 成人成人成人在线视频| 一本久久a久久精品亚洲| 在线日韩av片| 日韩一区二区三区电影在线观看| 欧美大片免费久久精品三p| 久久精品人人做人人爽人人| 国产欧美精品一区aⅴ影院| 亚洲欧洲三级电影| 亚洲成人777| 国产麻豆精品95视频| k8久久久一区二区三区| 色老头久久综合| 日韩欧美一区二区久久婷婷| 国产丝袜在线精品| 亚洲一区在线视频观看| 久久99久久99| 91色porny在线视频| 欧美一区二区三区在| 国产精品美女久久久久久| 婷婷综合另类小说色区| 国产精品自在欧美一区| 日本久久电影网| 久久久久久久久久久久久久久99| 亚洲精品写真福利| 激情综合网激情| 欧美中文字幕亚洲一区二区va在线 | 精品黑人一区二区三区久久| 日本一区二区电影| 日韩精品国产欧美| 91年精品国产| 久久综合狠狠综合| 午夜精品久久久久影视| gogo大胆日本视频一区| 精品福利一区二区三区免费视频| 亚洲三级久久久| 国产91高潮流白浆在线麻豆| 欧美性色综合网| 一区视频在线播放| 国产黑丝在线一区二区三区| 欧美日韩电影一区| 有码一区二区三区| 懂色中文一区二区在线播放| 日韩欧美区一区二| 青青草国产精品97视觉盛宴| 在线视频欧美精品| 一二三四社区欧美黄| 高清不卡一区二区在线| 久久天堂av综合合色蜜桃网| 偷拍日韩校园综合在线| 欧美群妇大交群中文字幕| 1024成人网| 99久久精品费精品国产一区二区| 国产无人区一区二区三区| 另类小说图片综合网| 日韩一区二区三区四区| 三级欧美在线一区| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲成人av资源| 欧美日韩精品二区第二页| 亚洲国产视频在线| 欧美日韩国产一级片| 亚洲成年人影院| 日韩视频在线你懂得| 国产在线精品一区二区夜色 | 欧美日韩一区视频| 亚洲成人激情自拍| 欧美一区二区福利视频| 午夜久久电影网| 7777精品伊人久久久大香线蕉最新版| 午夜久久久影院| 91精品国产入口| 国产一区欧美日韩| 欧美国产日韩a欧美在线观看| 成人午夜又粗又硬又大| 亚洲视频小说图片| 欧美日韩国产首页| 美国三级日本三级久久99 | 国产精品免费观看视频| 99这里只有精品| 亚洲一区二区欧美日韩| 91精品国产品国语在线不卡| 极品少妇xxxx精品少妇| 亚洲视频狠狠干| 91精品国产入口在线| 国产成人免费xxxxxxxx| 亚洲精品精品亚洲| 制服.丝袜.亚洲.另类.中文| 国产一区二区视频在线播放| 国产欧美日韩亚州综合 | 97国产一区二区| 午夜成人免费电影| 久久男人中文字幕资源站| 成人av影院在线| 日一区二区三区| 国产精品久久久久影院色老大| 欧美性极品少妇| 国产精品一色哟哟哟| 亚洲一区视频在线观看视频| 欧美成人一区二区三区在线观看| 成人免费观看男女羞羞视频| 五月天国产精品| 亚洲色图视频网| 欧美变态凌虐bdsm| 在线看国产一区| 国产宾馆实践打屁股91| 午夜精品成人在线视频| 亚洲欧美色综合| 国产午夜亚洲精品理论片色戒| 欧美三级视频在线观看| 粉嫩av一区二区三区粉嫩 | 久久精品视频免费| 777午夜精品免费视频| 日本乱码高清不卡字幕| 国产成人h网站| 精品一区二区在线视频| 午夜精品爽啪视频| 中文字幕一区二区5566日韩| 日韩欧美黄色影院| 欧美猛男超大videosgay| 一本到不卡免费一区二区| 高清成人免费视频| 国产又黄又大久久| 另类的小说在线视频另类成人小视频在线| 玉足女爽爽91| 亚洲永久精品国产| 亚洲精品日韩一| 亚洲男人电影天堂| 成人免费一区二区三区在线观看| 国产日韩亚洲欧美综合| 欧美电视剧在线观看完整版| 日韩视频一区二区三区在线播放 | 中文字幕一区二区不卡| 欧美国产一区二区在线观看| 久久免费电影网| 日本一区二区三区电影| 国产女主播一区| 国产精品女同互慰在线看| 欧美经典一区二区| 国产精品女上位| 亚洲免费色视频| 亚洲图片欧美一区| 图片区小说区国产精品视频| 舔着乳尖日韩一区| 久久精品久久久精品美女| 青青草成人在线观看| 乱中年女人伦av一区二区| 久久福利资源站| 成人三级伦理片| 成人免费福利片| 国产成人午夜99999| av在线综合网| 欧美日韩成人综合天天影院| 欧美一级理论片| 久久一留热品黄| 亚洲欧洲成人自拍| 亚洲成人动漫一区| 免费成人在线视频观看| 高清免费成人av| 欧美网站大全在线观看| 欧美一区二区大片| 国产精品卡一卡二| 偷拍亚洲欧洲综合| 国产一区欧美一区| 91国产免费看| 亚洲精品在线观| 亚洲另类色综合网站| 秋霞av亚洲一区二区三| 国产成人av电影在线| 欧美乱妇一区二区三区不卡视频 | 懂色av噜噜一区二区三区av| 色系网站成人免费| 日韩丝袜美女视频| 综合av第一页| 狠狠色狠狠色综合日日91app| gogogo免费视频观看亚洲一| 3751色影院一区二区三区| 国产视频视频一区| 青青草原综合久久大伊人精品优势 | 久久综合久久综合亚洲| 又紧又大又爽精品一区二区| 国产一区二区三区免费看| 在线观看91精品国产入口|