Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π“Ρ€Π°Ρ„ΠΈΠΊΠ° для Windows срСдствами DirectDrawΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 34

Автор Бтэн Π’Ρ€ΡƒΡ…ΠΈΠ»ΡŒΠΎ

НСоптимизированный Ρ†ΠΈΠΊΠ» ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ примСнялся для 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… повСрхностСй, Π½ΠΎ Π½Π° этот Ρ€Π°Π· Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сокращСниС Ρ†Π²Π΅Ρ‚ΠΎΠ². Для доступа ΠΊ повСрхности ΠΈ графичСским Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° указатСля, surf ΠΈ image. Оба ΡΠ²Π»ΡΡŽΡ‚ΡΡ указатСлями Π½Π° 24-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ RGBTRIPLE, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ 24-Π±ΠΈΡ‚Π½Ρ‹Ρ… пиксСлСй.

КаТдая цвСтовая ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ извлСкаСтся ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° графичСских Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ сдвигаСтся Π² соотвСтствии со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… loREDbit, loGREENbit ΠΈ loBLUEbit. Π—Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΈ заносятся Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ повСрхности. НаконСц, ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ surf ΠΈ image ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈΡ… ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ пиксСлю. 

32-Π±ΠΈΡ‚Π½Ρ‹Π΅ повСрхности

ПослСдняя функция, Copy_Bmp24_Surface32(), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… повСрхностСй ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Copy_Bmp24_Surface24(). Если Π±Ρ‹ Π² 32-Π±ΠΈΡ‚Π½ΠΎΠΉ повСрхности всС 32 Π±ΠΈΡ‚Π° использовались для хранСния Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…, Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 24 Π±ΠΈΡ‚Π°, Π² этом Π½Π΅Ρ‚ нСобходимости. Ѐункция Copy_Bmp24_Surface32() ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² листингС 5.4.


Листинг 5.4. Ѐункция Copy_Bmp24_Surface32()

BOOL DirectDrawWin::Copy_Bmp24_Surface32(LPDIRECTDRAWSURFACE surf, BYTE* bmpbuf, int w, int h) {

 if (surf==0 || bmpbuf==0)  return FALSE;

 DDSURFACEDESC desc;

 ZeroMemory(&desc, sizeof(desc));

 desc.dwSize = sizeof(desc);

 HRESULT r=surf->Lock(0, &desc, DDLOCK_WAIT | DDLOCK_WRITEONLY, 0);

 if (r!=DD_OK) {

  TRACE("Copy_Bmp24_Surface32: Lock() failed\n");

  return FALSE;

 }

 int bytesrequired=w*3;

 int bytesgiven=(bytesrequired+3) & ~3;

 BYTE* surfbits = (BYTE*)desc.lpSurface;

 BYTE* imagebits = (BYTE*)(&bmpbuf[(h-1)*bytesgiven]);

 for(int i=0; i<h; i++) {

  DWORD* surf=(DWORD*)surfbits;

  RGBTRIPLE* image=(RGBTRIPLE*)imagebits;

  for (int p=0;p>w;p++) {

   DWORD r=image->rgbtRed << loREDbit;

   DWORD g=image->rgbtGreen << loGREENbit;

   DWORD b=image->rgbtBlue << loBLUEbit;

   DWORD* data=(DWORD*)surf;

   *data = r|g|b;

   surf++;

   image++;

  }

  surfbits += desc.lPitch;

  imagebits -= bytesgiven;

 }

 surf->Unlock(0);

 return TRUE;

}

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с пиксСлями ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° указатСля, surf ΠΈ image. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ DWORD ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… пиксСлСй Π² памяти повСрхности. Π’Ρ‚ΠΎΡ€ΠΎΠΉ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° 24-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ RGBTRIPLE ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа ΠΊ пиксСлям графичСских Π΄Π°Π½Π½Ρ‹Ρ…. Ѐункция вряд Π»ΠΈ нуТдаСтся Π² пояснСниях, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ своСго Π°Π½Π°Π»ΠΎΠ³Π° для 24-Π±ΠΈΡ‚Π½Ρ‹Ρ… повСрхностСй, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΈΠΏΠ° указатСля surf ΠΈ отсутствия ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ†ΠΈΠΊΠ»Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° BmpView 

На основС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ ΠΌΡ‹ напишСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ DirectDraw для просмотра BMP-Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° BmpView ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ BMP-Ρ„Π°ΠΉΠ». Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список всСх Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠΎΠ², ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Ρ… для просмотра Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ изобраТСния. Если Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌ ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Display, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° BmpView ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ содСрТимоС BMP-Ρ„Π°ΠΉΠ»Π°. Если ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ помСщаСтся Π½Π° экранС, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиш стрСлок, Home, End, Page Up ΠΈ Page Down. Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ для Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π½Π° рис. 5.7. 

Рис. 5.7. Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ для Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ BmpView


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π° Π³Π»ΡƒΠ±ΠΈΠ½Π° пиксСлСй опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π΅Π³ΠΎ отобраТСния. На рисункС Π²Ρ‹Π±Ρ€Π°Π½ΠΎ 8-Π±ΠΈΡ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, поэтому Π² список Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 8-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹. Если Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ 24-Π±ΠΈΡ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ список состоял Π±Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· бСспалитровых Ρ€Π΅ΠΆΠΈΠΌΠΎΠ².

НашС знакомство с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ BmpView Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

β€’ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· BMP-Ρ„Π°ΠΉΠ»ΠΎΠ²;

β€’ прямой доступ ΠΊ памяти повСрхности;

β€’ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… повСрхностСй;

β€’ Ρ€Π°Π±ΠΎΡ‚Π° с Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ Windows Π² DirectDraw.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° вопроса ΠΌΡ‹ ΡƒΠΆΠ΅ обсудили, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ лишь Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠΎΠ΄. Π₯отя Π΄Π²Π° послСдних вопроса ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ прямого ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Ρ‚Π΅ΠΌΠ΅, ΠΎ Π½ΠΈΡ… Ρ‚ΠΎΠΆΠ΅ стоит ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ. 

ΠŸΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… повСрхностСй 

Π”ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° DirectX 5 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° DirectDraw Π½Π΅ позволяла Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² видСопамяти повСрхности, ΡˆΠΈΡ€ΠΈΠ½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π»Π° ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ повСрхности. Π’ DirectX 5 это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ снято, Π½ΠΎ лишь для видСоустройств, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΠΈ, находящиСся Π² систСмной памяти, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌ нСдоступны прСимущСства Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ускорСния. Если Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ BMP-Ρ„Π°ΠΉΠ» ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌ, ΡˆΠΈΡ€ΠΈΠ½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ мСньшС ΡˆΠΈΡ€ΠΈΠ½Ρ‹ изобраТСния, скорСС всСго, Π½Π°ΠΌ придСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с систСмной ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ условия:

β€’ установка Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DirectX 5;

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡˆΠΈΡ€ΠΎΠΊΠΈΡ… повСрхностСй видСоустройством;

β€’ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ достаточного объСма видСопамяти.

Для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ просмотра ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ BmpView) ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ особСнно Π²Π°ΠΆΠ½Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ нас устроит ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Если ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ являСтся ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠΉ, большоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ всСгда ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° нСсколько ΠΌΠ°Π»Ρ‹Ρ… повСрхностСй, Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² видСопамяти ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ экран с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π»ΠΈΡ‚-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. 

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ 

Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ Windows Π² полноэкранном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ оказываСтся Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ просто. РазумССтся, полноэкранному ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ΅Π½ интСрфСйс, Π½ΠΎ стоит Π»ΠΈ для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ интСрфСйс Windows β€” вопрос спорный. РСшСниС этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… основных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²:

β€’ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ страниц ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ Windows;

β€’ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° потрСбуСтся вывСсти Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ;

β€’ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСстандартноС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ элСмСнты DirectDraw.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π²Π°ΠΌ придСтся ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ страниц ΠΈ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°ΠΌΠΈ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Windows GDI. GDI Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ DirectDraw, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, какая страница видСопамяти отобраТаСтся Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° GDI всСгда выводятся Π½Π° «настоящСй» ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ повСрхности, ΠΈΠ»ΠΈ повСрхности GDI. Π’ бСспалитровых Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Π²Ρ‹Π²ΠΎΠ΄ GDI выглядит ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Π±Π΅Π· Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° с вашСй стороны, Π½ΠΎ Π² ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… отсутствиС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ DirectDraw Π² GDI Π΄Π°Π΅Ρ‚ ΠΎ сСбС Π·Π½Π°Ρ‚ΡŒ β€” GDI ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° Π² систСмной ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ Windows, Π½Π΅ подозрСвая ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ другая ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°. РСшСниС зависит ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ BmpView ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ страниц ΠΈ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ Windows для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ отобраТСния Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ это дСлаСтся, ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° BmpView.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌ ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол Windows ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Он встрСчаСтся Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… коммСрчСских ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ…; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΈΠ³Ρ€Π΅ MechWarrior 2 Ρ„ΠΈΡ€ΠΌΡ‹ Activision для заставок, воспроизвСдСния Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠΎΠ² ΠΈ Π²ΡΡ‚ΡƒΠΏΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ инструктаТа ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартный интСрфСйс Windows. Π—Π°Ρ‚Π΅ΠΌ, с Π½Π°Ρ‡Π°Π»ΠΎΠΌ миссии, ΠΈΠ³Ρ€Π° Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя всС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ΠΎΠΉ ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌΠΈ интСрфСйсными ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Windows. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ миссии ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола снова восстанавливаСтся. Π’ этой ΠΈΠ³Ρ€Π΅ данная ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ.

ВСрсия MechWarrior 2, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я Π³ΠΎΠ²ΠΎΡ€ΡŽ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ для Ρ‡ΠΈΠΏΠΎΠ² 3Dfx. Для видСоустройств, построСнных Π½Π° Ρ‚Π°ΠΊΠΈΡ… Ρ‡ΠΈΠΏΠ°Ρ…, Π²Ρ‹Π²ΠΎΠ΄ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ Π² DirectDraw Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ 3Dfx ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ видСоустройствами, ΠΈ GDI Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎΠ± ΠΈΡ… сущСствовании. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Activision Π½Π΅ ΠΌΠΎΠ³Π»Π° Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° Π² DirectDraw.

Π’Ρ€Π΅Ρ‚ΡŒΡ стратСгия (созданиС нСстандартных интСрфСйсов Π½Π° Π±Π°Π·Π΅ DirectDraw) оказываСтся самой Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΎΠΉ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° нСстандартных ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… элСмСнтов Π΄Π°Π²Π½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»Π°ΡΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ‚Ρ€Π°ΡΠ»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ индустрии, ΠΈ ΠΌΠ°Π»ΠΎ ΠΊΡ‚ΠΎ ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² позволяСт сСбС Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° созданиС ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠ² ΠΈ списков, ΠΊΠΎΠ³Π΄Π° с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π±Π΅Π· Ρ‚ΠΎΠ³ΠΎ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Ρ…Π»ΠΎΠΏΠΎΡ‚. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ интСрфСйс, спроСктированный ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для вашСго прилоТСния. ВСорСтичСски этот интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈ само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ BmpView ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π½Π° рис. 5.7 ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ GDI ΠΈ восстанавливаСм ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ. 

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса 

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ BmpView, ΠΊΠ°ΠΊ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… этой ΠΊΠ½ΠΈΠ³ΠΈ, класс ΠΎΠΊΠ½Π° прилоТСния являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ класса DirectDrawWin. К соТалСнию, ΠΏΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ соглашСнию ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… имя ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса образуСтся ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ прилоТСния ΠΈ суффикса Win. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, класс ΠΎΠΊΠ½Π° прилоТСния BmpView называСтся BmpViewWin, Ρ‡Ρ‚ΠΎ выглядит нСсколько Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠ΅. ОбъявлСниС класса BmpViewWin ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² листингС 5.5.