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

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

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

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

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

              hRet=pPrimarySurface->GetDC(&hDC);

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

      M++;//для нумерации режимов

              sprintf(Str,"Mode  %3d:    %4d x %4d      %2d      %3d      ",//формируем в массиве Str строку вывода

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

                                           lpddSurfaceDesc->dwWidth,//разрешение по X

                                           lpddSurfaceDesc->dwHeight,//разрешение по Y

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

                                   lpddSurfaceDesc->dwRefreshRate);// частота развертки кадров монитора

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

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

            //Запись этой строки в файл (добавили \n == переход на новую строку вьюверам):

              static DWORD WritenBites=NULL;//количества записанных байт

              sprintf(Str,"Mode  %3d:    %4d x %4d      %2d      %3d\n",//формируем в массиве Str строку вывода

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

                           lpddSurfaceDesc->dwWidth,//разрешение по X

                                           lpddSurfaceDesc->dwHeight,//разрешение по Y

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

                           lpddSurfaceDesc->dwRefreshRate);// частота развертки кадров монитора

              // ЗАПИСЬ очередной строки в файл:

              WriteFile(hMyOutFile, // дескриптор (хендл) на файл (объявлен глобально)

                Str,        // адрес зписываемой строки

                                       strlen(Str),// размер зписываемой строки

                                               &WritenBites,  // получаем количество реально записанных байт

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

               );

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

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

              if(Str[0]==0)return DDENUMRET_CANCEL;//прекратить вызов этой (Callback) функции - EnumModesCallback2()

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

    }

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

// ОКОННАЯ ФУНКЦИЯ == действия программы по обработке сообщений в Windows

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsgName,WPARAM wParam,LPARAM lParam)

{/*************************************************************************/

 switch(uMsgName) // Обработка сообщения:

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

  {case WM_KEYDOWN://при нажатии любой клавиши(по WM_CREATE лучше, т.к. вып. до появления изображения окна)

    if(wParam==VK_F1)//если нажата клавиша 'F1'

     {  nF1++;//число нажатий клавиши 'F1'

        pStr="DirectDraw7 не обновлялся по этому нажатию F1 ";//для контроля обновления DirectDraw

              //Создание экземпляра объекта DirectDraw библиотеки виртуальных классов DirectX v.7.0 

      //(Получаем pointer на DirectDraw указанием его интерфейса в DirectX v.7.0)

      if((nF1==1)|(nF1==2))//!!! делаем экземпляр объекта DirectDraw дважды (при первых двух нажатиях 'F1') ???