Вивід вікна, керованого методами DirectDraw бібліотеки Direct v.7

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

Лабораторна робота №4

Тема:Вивід вікна, керованого методами DirectDraw бібліотеки Direct v.7

Мета: Отримати та закріпити практичні навички роботи з режимами адаптеру.

Індивідуальне завдання:

Вивести на екран та в файл перечня підтримуємих графічним адаптером режимів з вказівкою для кожного дозволення екрану, формату пікселя, частоти розгортки кадрів.

Текст програми:

#define WIN32_LEAN_AND_MEAN // для ускорения запуска процесса

#include <windows.h>        // для доступа к API функциям Windows

#include <stdio.h>          // для доступа к sprintf()

#include <ddraw.h>          // для доступа к DirectX

#include <mmsystem.h>       // для доступа к Multimedia API's DirectX

#include <winbase.h>        // для записи в файл

//ГЛОБАЛЬНЫЕ ОБЪЯВЛЕНИЯ для использования во всех функциях проекта

static LPDIRECTDRAW7 pDirectDraw7=NULL;   // для pointer-а на класс DirectDraw

static LPDIRECTDRAWSURFACE7 pPrimarySurface=NULL;// для pointer-а на первичную поверхность (Surface)

static DDSURFACEDESC2 DDSurfaceDesc={NULL};//структура для параметров поверхности c обнулением ее полей !!!

static HDC hDC;      //для GDI контекста вывода на экран

static int nF1=0;//счетчик подсчета числа нажатий клавиши 'F1'

       HANDLE  hMyOutFile;//для работы с файлом

       HRESULT hRet; //Переменная для возвращаемых функциями кодов ошибок

                     //[ использовать (обычно) не будем, НО НАДО! ]

       char Str[150],*pStr=NULL;// для формирования текстовых строк

       HWND hWndG;   // для использования значения hWnd в разных функциях проекта

/****************************************************************************/

//ФУНКЦИЯ1 "обратного вызова"(Callback) для обеспечения работы метода DirectDrawEnumerateEx() (используется в WndProc() )

BOOL WINAPI DDEnumCallbackEx(GUID FAR *lpGUID,//значение GUID идентификатора объекта DirectDraw

                                                                                    LPSTR lpDriverDescription,//строка с описанием  очередного найденного драйвера

                                                                                    LPSTR lpDriverName,//строка с именем  очередного найденного драйвера

                                                                                    LPVOID lpContext,//

                                                                                    HMONITOR hm //номер описываемого монитора (0 = текущий)

                                                                                   )

 {  static int N=0;//для смещения текста по оси y

  //Блокируем ПЕРВИЧНУЮ поверхность (== рабочую область экрана)

    hRet=pPrimarySurface->Lock(

                            NULL,//блокируем ВСЮ поверхность (можно только RECT)

                            &DDSurfaceDesc,//адрес структуры с параметрами РЕАЛЬНОЙ ПЕРВИЧНОЙ поверхности(выводимой сейчас)- объявлена в ГЛОБАЛЬНЫХ переменных

            DDLOCK_SURFACEMEMORYPTR | //флаг получения поинтера на начало поверхности

                                   DDLOCK_WAIT,//ожидать до получения реального доступа к поверхности 

                                   NULL); // не используется

  //Получение GDI контекста для вывода

    hRet=pPrimarySurface->GetDC(&hDC);

  //ВЫВОД текста средствами GDI (выводим текущие значения, полученные этой функцией)

    sprintf(Str,"lpGUID=%x  DriverDescription=%s  DriverName=%s  Handle to device=%x",

                                 lpGUID,    lpDriverDescription,  lpDriverName,  hm);

    TextOut(hDC,20,(150+N),Str,strlen(Str));//вывод очередной записи

  //смещения текста по y для вывода при следующем вызове этой функции

    N=N+20;//20 - шаг смещения текста по y

    pPrimarySurface->ReleaseDC(hDC);//удаляем GDI контекст

    pPrimarySurface->Unlock(NULL);//прекращаем блокирование доступа к ПЕРВИЧНОЙ поверхности

    return TRUE;//продолжать вывод следующих строк

//  return FALSE;//прекратить вывод (прекратить вызов этой (Callback) функции - DDEnumCallbackEx)

  };

/****************************************************************************/

//ФУНКЦИЯ2 "обратного вызова"(Callback) для обеспечения работы метода EnumDisplayModes() (используется в WndProc() )

HRESULT WINAPI EnumModesCallback2(

                LPDDSURFACEDESC2 lpddSurfaceDesc,//поинтер на структуру параметров очередной из возможных первичных поверхностей 

                LPVOID lpContext //вспомогательные данные из программы проекта(не используем этот канал)

                                                            )

   { static int K=0;//для смещения текста по оси y (в TextOut() )

     static int M=0;//для нумерации режимов

            //Блокируем ПЕРВИЧНУЮ поверхность (== рабочую область экрана)

              hRet=pPrimarySurface->Lock(

                            NULL,//блокируем ВСЮ поверхность (можно только RECT)

                            &DDSurfaceDesc,//адрес структуры с параметрами РЕАЛЬНОЙ ПЕРВИЧНОЙ поверхности(выводимой сейчас)- объявлена в ГЛОБАЛЬНЫХ переменных

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.