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') ???
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.