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

            hRet=pDirectDraw7->CreateSurface(

                                          &ddSurfaceDesc,//адрес структуры с желаемыми параметрами поверхности  

                          &pPrimarySurface,//получаем pointer на поверхность (адрес ее начала в VRAM)

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

            //Определение параметров текущего режима (== текущих параметров первичной поверхности)

      hRet=pDirectDraw7->GetDisplayMode(&ddSurfaceDesc);//

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

              hRet=pPrimarySurface->Lock(

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

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

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

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

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

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

              hRet=pPrimarySurface->GetDC(&hDC);// контекст для первичной поверхности

            //ВЫВОД текста средствами GDI (выводим параметры текущего режима)             sprintf(Str,"ВЫВОД в DirectDraw-окно (см. ниже):");

              sprintf(Str,"ВЫВОД в DirectDraw-окно (см. ниже):");

              TextOut(hDC,10,90,Str,strlen(Str));//вывод текста

              sprintf(Str,"nF1=%d",nF1);

              TextOut(hDC,420,90,Str,strlen(Str));//номер нажатия на F1

              TextOut(hDC,10,110,pStr,strlen(pStr));//вывод текста об обновлении экземпляра DirectDraw

              sprintf(Str,"pDirectDraw7=%p",pDirectDraw7);

              TextOut(hDC,420,110,Str,strlen(Str));//вывод текста об обновлении экземпляра DirectDraw

              sprintf(Str,"Width=%i  Height=%u  PixelFormat=%d  RefreshRate=%d ",

                           ddSurfaceDesc.dwWidth,// разрешение по X

                                                            ddSurfaceDesc.dwHeight,// разрешение по Y

                                                ddSurfaceDesc.ddpfPixelFormat.dwRGBBitCount,// бит на пиксель

                                                                                                                                       ddSurfaceDesc.dwRefreshRate);//частота кадров

              TextOut(hDC,10,130,Str,strlen(Str));//вывод текста о текущем режиме

              // контроль изменения адресов поверхностей (Surface):

              sprintf(Str,"&ddSurfaceDesc=%p  &pPrimarySurface=%p  pPrimarySurface=%p",&ddSurfaceDesc,&pPrimarySurface,pPrimarySurface);

              TextOut(hDC,420,130,Str,strlen(Str));//вывод текста об обновлении &ddSurfaceDesc и &pPrimarySurface

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

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

//  /*

//=!!!!=========

//Получение информации о графическом адаптере компьютера (о всех его графических драйверах и присоединенных к нему устройствах (акселераторах)

            //DirectDrawEnumerateEx() - обычная API (НЕ ТРЕБУЕТ ИСПОЛЬЗОВАНИЯ pDirectDraw7->), объявлена (прототип) в ddraw.h

            //(Для работы DirectDrawEnumerateEx() используется функция обратного вызова DDEnumCallbackEx(), созданная в этой программе)

    if(nF1==3)//выводим по третьему нажатию на F1

              {DirectDrawEnumerateEx(  DDEnumCallbackEx,//имя функции обратного вызова(для вывода инф об очередном найденном результате поиска)

                                       NULL,//не передаем дополнительную информации, передаваемой из программы непосредственно в функцию обратного вызова ( EnumModesCallbac() )

                             //0    //сообщать о всех драйверах и присоединенных к нему устройствах (акселераторах)