Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2015, 04:05   #1
koker_007
Пользователь
 
Аватар для koker_007
 
Регистрация: 30.03.2015
Сообщений: 35
Сообщение класс D3DDISPLAYMODE не содержит Windowed

Учусь по книге фленова по directx и c++ 2005 года. вроде бы все писал но компилятор visual 2012 орет в 2-х местах:

1) класс D3DDISPLAYMODE не содержит члена SwapEffect
2) класс D3DDISPLAYMODE не содержит члена Windowed

Сам участок кода:
PHP код:
    else
    {
        
//Установка оконного режима и его параметров
        
RECT wndRect;
        
RECT clientRect;
        
GetWindowRect(hWnd, &wndRect);
        
GetClientRect(hWnd, &clientRect);

        
int iWinWidth iWidth + (wndRect.right wndRect.left) - (clientRect.right clientRect.left);
        
int iWinHeight iHeight + (wndRect.bottom wndRect.top) - (clientRect.bottom clientRect.top);

        
MoveWindow(hWndwndRect.leftwndRect.topiWinWidthiWinHeightTRUE);
        
//получаем формат пикселя
        
D3DDISPLAYMODE d3ddm;
        (*
ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);

        
//установка параметров

        
d3dpp.BackBufferFormat d3ddm.Format;
        
d3ddm.SwapEffect D3DSWAPEFFECT_DISCARD;
        
d3ddm.Windowed TRUE;
    } 
я понимаю что книга старая за 2005 год и библиотека directx могла претерпеть некоторые изменения, я больше не нашел книг по которым мог бы научиться directx на с++.

Подскажите как проблему решить?
ученик самоучка
koker_007 вне форума Ответить с цитированием
Старый 05.08.2015, 07:48   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

По названию переменной d3dpp и смыслу пропущено D3DPRESENT_PARAMETERS d3dpp. Вот там и есть и бекбуферформат, и свапэффект, ..
p51x вне форума Ответить с цитированием
Старый 05.08.2015, 14:45   #3
koker_007
Пользователь
 
Аватар для koker_007
 
Регистрация: 30.03.2015
Сообщений: 35
Сообщение

Цитата:
Сообщение от p51x Посмотреть сообщение
По названию переменной d3dpp и смыслу пропущено D3DPRESENT_PARAMETERS d3dpp. Вот там и есть и бекбуферформат, и свапэффект, ..
Вот полный код, D3DPRESENT_PARAMETERS d3dpp; инициализирована перед if-else, перед выводом запроса на отображение.

Что странно на туже функцию
d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;
d3dpp.Windowed = FALSE;
в коде if, полно-экранного отображения, он не ругается, ругается на вариант else с отображением в окне, хотя D3DPRESENT_PARAMETERS d3dpp; была инициализированная перед if-else.

PHP код:
#include "dxfunc.h"
//Функция инициализации директикс 3д
HRESULT DX3DInit(IDirect3D9 **ppiD3D9,
    
IDirect3DDevice9 **ppiD3DDevice,
    
HWND hWnd,
    
DWORD iWidth,
    
DWORD iHeight,
    
BOOL bFullScreen)
{
    
//Инициализация
    
if ((*ppiD3D9 Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
        return 
E_FAIL;

    
//Заполняем основные параметры
    
D3DPRESENT_PARAMETERS d3dpp;
    
ZeroMemory(&d3dppsizeof(d3dpp));
    
d3dpp.BackBufferWidth iWidth;
    
d3dpp.BackBufferHeight iHeight;

    
//Запрос на отображение в полноэкранном режиме
    
int iRes;
    if (!
bFullScreen)
        
iRes MessageBox(hWnd"Use fullscreen mode?",
        
"Screen"MB_YESNO MB_ICONQUESTION);
    else
        
iRes IDYES;
    if (
iRes IDYES)
    {
        
//Установка полноэкранного режима и его параметров
        
d3dpp.BackBufferFormat D3DFMT_R5G6B5;
        
d3dpp.SwapEffect D3DSWAPEFFECT_FLIP;
        
d3dpp.Windowed FALSE;
        
d3dpp.FullScreen_RefreshRateInHz D3DPRESENT_RATE_DEFAULT;
        
d3dpp.PresentationInterval D3DPRESENT_INTERVAL_DEFAULT;
    }
    else
    {
        
//Установка оконного режима и его параметров
        
RECT wndRect;
        
RECT clientRect;
        
GetWindowRect(hWnd, &wndRect);
        
GetClientRect(hWnd, &clientRect);

        
int iWinWidth iWidth + (wndRect.right wndRect.left) - (clientRect.right clientRect.left);
        
int iWinHeight iHeight + (wndRect.bottom wndRect.top) - (clientRect.bottom clientRect.top);

        
MoveWindow(hWndwndRect.leftwndRect.topiWinWidthiWinHeightTRUE);
        
//получаем формат пиклеся
        
D3DDISPLAYMODE d3ddm;
        (*
ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);

        
//установка параметров

        
d3dpp.BackBufferFormat d3ddm.Format;
        
d3ddm.SwapEffect D3DSWAPEFFECT_DISCARD;
        
d3ddm.Windowed TRUE;
    }
    
//sozdat 3d ystroistvo
    
DWORD Flags D3DCREATE_MIXED_VERTEXPROCESSING D3DCREATE_MULTITHREADED;

    
HRESULT hRes;
    if (
FAILED(hRes = (*ppiD3D9)->CreateDevice(
        
D3DADAPTER_DEFAULTD3DDEVTYPE_HALhWndFlags, &d3dppppiD3DDevice)))
        return 
hRes;
    
//Устанавливаем перспективу
    
float Aspect = (float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight;

    
D3DXMATRIX matProjection;
    
D3DXMatrixPerspectiveFovLH(&matProjectionD3DX_PI 4.0fAspect10.0f1000.0f);
    (*
ppiD3DDevice)->SetTransform(D3DTS_PROJECTION, &matProjection);

    return 
S_OK;

Не пойму чем проблема.
ученик самоучка
koker_007 вне форума Ответить с цитированием
Старый 05.08.2015, 14:59   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
Что странно на туже функцию
d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;
d3dpp.Windowed = FALSE;
в коде if, полно-экранного отображения, он не ругается, ругается на вариант else с отображением в окне, хотя D3DPRESENT_PARAMETERS d3dpp; была инициализированная перед if-else.
Ничего странного, сравните:
Код:
        d3dpp.BackBufferFormat = D3DFMT_R5G6B5; 
        d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP; 
        d3dpp.Windowed = FALSE; 
...
        d3dpp.BackBufferFormat = d3ddm.Format; 
        d3ddm.SwapEffect = D3DSWAPEFFECT_DISCARD; 
        d3ddm.Windowed = TRUE;
А теперь перечитайте мой пост и сообщение об ошибке.
p51x вне форума Ответить с цитированием
Старый 05.08.2015, 16:35   #5
koker_007
Пользователь
 
Аватар для koker_007
 
Регистрация: 30.03.2015
Сообщений: 35
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ничего странного, сравните:
Код:
        d3dpp.BackBufferFormat = D3DFMT_R5G6B5; 
        d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP; 
        d3dpp.Windowed = FALSE; 
...
        d3dpp.BackBufferFormat = d3ddm.Format; 
        d3ddm.SwapEffect = D3DSWAPEFFECT_DISCARD; 
        d3ddm.Windowed = TRUE;
А теперь перечитайте мой пост и сообщение об ошибке.
Все понял сам виноват .. решил.. спасибо..
ученик самоучка
koker_007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
реализовать класс Time который содержит три поля типа int shilovec5377 Общие вопросы C/C++ 4 08.06.2015 11:04
Массив. Класс с именем NOTE содержит следующие поля: MrRuslanBB Помощь студентам 0 12.03.2013 02:12
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24