Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.148.107.255] |
|
Сообщ.
#1
,
|
|
|
Взялся изучать 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. Очень жду Вашей помощи. С уважением, Игорь. |
Сообщ.
#2
,
|
|
|
Извини сильно ковыряться не хочется, поэтому почитай 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. (это тебе ссылка из него) |
Сообщ.
#3
,
|
|
|
Окошко-то увы создать придется; а вообще советую разобраться в общих чертах со всем этим и избавиться от геммороя путем использования классной библиотеки NukeDX
(www.nukesoftware.dk) на основе DirectX7 - отличная, грамотно написанная вещь, причем очень простая в изучении |
Сообщ.
#4
,
|
|
|
Попробовал запустить твою прогу, предварительно убрав "stdafx.h"(для чистого API он не нужен)и добавив в список используемых библиотек ddraw.lib.
SetCooperativeLevel работает. Экранчик переводится в 640 на 480 на некоторое время, а потом все. Рекомедуемая лит-ра: Мешков, Тихомиров, "Visual C++ и MFC" |
Сообщ.
#5
,
|
|
|
Да, окно все-таки придется создать,э
так как это именно тот способ, которым Винда отслеживает input-сообщения твоей программе меня другое интересует, как ты собираешься синхронизировать свою анимацию ? WM_TIMER'ом что-ли? |