现在的位置: 首页 > 综合 > 正文

Direct3D改变分辨率&真假全屏

2018年06月10日 ⁄ 综合 ⁄ 共 1034字 ⁄ 字号 评论关闭
    BOOL bRet = FALSE;

    m_d3dpp.BackBufferWidth = 0; 
    m_d3dpp.BackBufferHeight = 0;

    GetWindowRect(hwnd, &m_rcWindow);
    RECT rect = {0, 0, nWidth, nHeight};
    AdjustWindowRectEx(&rect, GetWindowLong(hwnd, GWL_STYLE), 
        FALSE, GetWindowLong(hwnd, GWL_EXSTYLE));

    SetWindowPos(hwnd, HWND_NOTOPMOST, m_rcWindow.left, m_rcWindow.top, 
        rect.right - rect.left, rect.bottom - rect.top, 
        SWP_SHOWWINDOW);

    //务必释放dx资源
    OnDeviceLost();

    HRESULT hResult = m_d3d_Device->Reset(&m_d3dpp);
        
    if(!FAILED(hResult))
    {
        //重新设定dx资源
        SetupResource();
        bRet = TRUE;
    }

    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);
    return bRet;

    真假全屏

    m_bFullScreen = TRUE;
    m_d3dpp.Windowed = !bRealFullScreen;

    m_d3dpp.BackBufferWidth = GetSystemMetrics(SM_CXSCREEN);
    m_d3dpp.BackBufferHeight = GetSystemMetrics(SM_CYSCREEN);

    ::SetWindowLong(hwnd, GWL_STYLE, WS_EX_TOPMOST | WS_POPUP);
    ::SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 
        GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 
        SWP_SHOWWINDOW);
    OnDeviceLost();

    HRESULT hResult = m_d3d_Device->Reset(&m_d3dpp);
        
    if(!FAILED(hResult))
    {
        //重新设定dx资源
        SetupResource();
        bRet = TRUE;
    }

抱歉!评论已关闭.