На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> Помогите! Пропадаю! (DirectX & VC++)
    Взялся изучать VC++ и застрял. :((((
    Проблема в следующем: Нужно написать программу устанавливающую режим 640х480х16bit и рисующую в этом режиме простую анимацию. Вот какой набросок у меня получился:
    #include "stdafx.h"
    #include <ddraw.h>
    LPDIRECTDRAW lpDD;
    BOOL DirectDrawInit(HWND hwnd)
    {
    HRESULT ddrval;
    ddrval = DirectDrawCreate(NULL, &lpDD, NULL);
    if( ddrval != DD_OK )
    {
    MessageBox(NULL, "ошибка 1", "", MB_OK);
    return FALSE;
    }
    ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);
    if( ddrval != DD_OK )
    {
    lpDD->Release();
    MessageBox(NULL, "ошибка 2", "", MB_OK);
    return FALSE;
    }
    ddrval = lpDD->SetDisplayMode(640, 480, 16);
    if( ddrval != DD_OK )
    {
    lpDD->Release();
    MessageBox(NULL, "ошибка 3", "", MB_OK);
    return FALSE;
    }
    return TRUE;
    }
    int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    HWND hwnd=GetDesktopWindow();
    DirectDrawInit(hwnd);
    return 0;
    }
    Выдает: "ошибка 2", т.е. SetCooperativeLevel() не хочет работать. :( Я так понимаю из-за переменной hwnd, указателя на окно. Но где ее взять? DeskTop ей не нравится, NULL - тоже. Создать окно? Но ведь мне не нужен никакой Windows интерфейс, кроме работы с плоской графикой (не в окне) и файлами!
    Исправте пожалуйста эту программу, или пришлите свой работающий исходник. Желательно, чтобы было как можно меньше различных #include <хрен_знает_чего.h> и т.д.
    Для меня и так этот Visual С++ темный лес. Впрочем собственно C++ я знаю, но под Windows ничего, кроме баз данных на Paradox не писал. Помогите plz. А то я уже неделю читаю различные умные книги, а в них во всех рассматривается что-то вроде написания своей версии Word. Очень жду Вашей помощи. С уважением, Игорь.
      Извини сильно ковыряться не хочется, поэтому почитай MSDN
      hWnd
      Window handle used for the application. Set to the calling application's top-level window handle (not a handle for any child windows created by the top-level window). This parameter !!!!!!! can be NULL when the DDSCL_NORMAL flag is specified in the dwFlags parameter.
      (это тебе ссылка из него)
        Окошко-то увы создать придется; а вообще советую разобраться в общих чертах со всем этим и избавиться от геммороя путем использования классной библиотеки NukeDX
        (www.nukesoftware.dk) на основе DirectX7 -
        отличная, грамотно написанная вещь, причем очень простая в изучении
          Попробовал запустить твою прогу, предварительно убрав "stdafx.h"(для чистого API он не нужен)и добавив в список используемых библиотек ddraw.lib.
          SetCooperativeLevel работает.
          Экранчик переводится в 640 на 480 на некоторое время, а потом все.
          Рекомедуемая лит-ра:
          Мешков, Тихомиров, "Visual C++ и MFC"
            Да, окно все-таки придется создать,э
            так как это именно тот способ, которым
            Винда отслеживает input-сообщения твоей программе
            меня другое интересует, как ты собираешься
            синхронизировать свою анимацию ?
            WM_TIMER'ом что-ли?
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0182 ]   [ 15 queries used ]   [ Generated: 18.05.24, 23:34 GMT ]