ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ Π²ΠΎΡΠ΅ΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ OnKeyDown(), ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ:
β’ Up()
β’ Down()
β’ Left()
β’ Right()
β’ Home()
β’ End()
β’ PageUp()
β’ PageDown()
ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ x, y, xlimit, ylimit, xscroll ΠΈ yscroll. ΠΠΎΠ΄ Π²ΡΠ΅Ρ Π²ΠΎΡΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.9.
ΠΠΈΡΡΠΈΠ½Π³ 5.9. Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ
void BmpViewWin::Up(int inc) {
if (!yscroll) return;
if (y+inc<0) {
y+=inc;
update_screen=TRUE;
} else {
y=0;
update_screen=TRUE;
}
}
void BmpViewWin::Down(int inc) {
if (!yscroll) return;
if (y-inc>=ylimit) {
y-=inc;
update_screen=TRUE;
} else {
y=ylimit;
update_screen=TRUE;
}
}
void BmpViewWin::Left(int inc) {
if (!xscroll) return;
if (x+inc<0) {
x+=inc;
update_screen=TRUE;
} else {
x=0;
update_screen=TRUE;
}
}
void BmpViewWin::Right(int inc) {
if (!xscroll) return;
if (x-inc>=xlimit) {
x-=inc;
update_screen=TRUE;
} else {
x=xlimit;
update_screen=TRUE;
}
}
void BmpViewWin::Home() {
if (xscroll && x!=0) {
x=0;
update_screen=TRUE;
}
if (yscroll && y!=0) {
y=0;
update_screen=TRUE;
}
}
void BmpViewWin::End() {
if (yscroll) {
y=-(bmprect.Height()-displayrect.Height());
update_screen=TRUE;
}
if (xscroll) {
x=-(bmprect.Width()-displayrect.Width());
update_screen=TRUE;
}
}
void BmpViewWin::PageUp() {
if (yscroll) {
if (y-displayrect.Height()>0) {
y-=displayrect.Height();
update_screen=TRUE;
} else {
y=0;
update_screen=TRUE;
}
}
}
void BmpViewWin::PageDown() {
if (yscroll) {
if (y+displayrect.Height()<=ylimit) {
y+=displayrect.Height();
update_screen=TRUE;
} else {
y=ylimit;
update_screen=TRUE;
}
}
}
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΊΠ»Π°Π²ΠΈΡ ΡΠΎ ΡΡΡΠ΅Π»ΠΊΠ°ΠΌΠΈ (Up(), Down(), Left(), Right()) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ°Π³ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ. ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° BmpViewWin (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 5.5), ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π³ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ ΡΠ°Π²Π΅Π½ 4.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ, Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ β Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ DirectDrawSurface Π²Ρ ΠΎΠ΄ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ GetDC(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Win32. Π Π΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
BOOL CopyBmp(LPDIRECTDRAWSURFACE surface, HBITMAP bmp, int x, int y) {
if (bmp==0) {
TRACE("no bmp specified\n");
return FALSE;
}
if (surface==0) {
TRACE("no surface specified\n");
return FALSE;
}
HDC imageDC = CreateCompatibleDC(0);
SelectObject(imageDC, bmp);
BITMAP bitmap;
GetObject(bmp, sizeof(bitmap), &bitmap);
int w=bitmap.bmWidth;
int h=bitmap.bnHeight;
DDSURFACEDESC desc;
desc.dwSize = sizeof(desc);
desc.dwFlags = DDSD+HEIGHT |DDSC_WIDTH;
surface->GetSurfaceDesc(&desc);
HDC dc;
HRESULT result;
if ((result=surface->GetDC(&dc))==DD_OK)) {
Stretchblt(dc, 0, 0, desc.dwWidth, desc.dwHeight, imageDC, x, y, w, h, SRCCOPY);
surface->ReleaseDC(dc);
}
DeleteDC(imageDC);
return result==DD_OK;
}
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ, Π΅Π΅ Π΄Π°ΠΆΠ΅ Π½Π΅Ρ Π½Π° CD-ROM. ΠΠ½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ β ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ GetDC() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° DirectDrawSurface ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Win32 Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ StretchBlt() ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Windows Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΆΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΊΠΎΡΠΎΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ GDI Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡΠΎΠ±ΡΠΌ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ, Π° Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π°ΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡΡΡ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΠΌΡ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ β ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡΠΌ. ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΡΡΡΠΎΠ² Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ Π±ΡΠ»Π° Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ΠΌ. Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠ΅ Π·Π½Π°Π΅ΡΠ΅ ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠΎΡΠΌΠ°ΡΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΉ, ΡΡΡΠ΅ΠΊΡΡ ΡΠ°ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (dithering) ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΏΡΠ°ΠΉΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ².
Π Π³Π»Π°Π²Π΅ 6 ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ DirectInput. ΠΠ±Ρ ΠΎΠ΄Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π²Π²ΠΎΠ΄Π° Windows, DirectInput ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡ ΡΠ°ΠΊΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ², ΠΊΠ°ΠΊ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΠΈΠ»ΠΈ ΠΌΡΡΡ.
ΠΠ»Π°Π²Π° 6. DirectInput
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΡΠ΄ΠΎΡ Π½Π΅ΠΌ ΠΎΡ DirectDraw ΠΈ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ DirectInput. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠ° ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠ΅, Π½ΠΎ Π²Π²ΠΎΠ΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ β Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°Ρ ΡΠ°ΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ DirectInput ΡΠ»ΡΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²Π²ΠΎΠ΄ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ. ΠΠΎΡΠ»Π΅ ΠΊΡΠ°ΡΠΊΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ DirectInput API ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡ Π΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ DirectInput. ΠΠ½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π΄Π²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: Qwerty ΠΈ Smear. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Qwerty ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ DirectInput Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, Π° Smear ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΌΡΡΡΡ.
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ DirectX 3 SDK. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Windows NT 4.0 Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Service Pack 3 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ DirectInput?
DirectInput ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ DirectX API Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ Π²Π²ΠΎΠ΄Π° β ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ, ΠΌΡΡΡΡ, Π΄ΠΆΠΎΠΉΡΡΠΈΠΊΠ°ΠΌΠΈ, ΡΡΠ»ΡΠΌΠΈ, Π°Π²ΠΈΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΡΡΠΊΠΎΡΡΠΊΠ°ΠΌΠΈ, ΡΠ»Π΅ΠΌΠ°ΠΌΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΡΡ. Π ΠΏΠΎΠ»Π½ΠΎΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ DirectX Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° DirectInput ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π»Π°ΡΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° DirectInput β ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ ΠΈ Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΡΡ; Π΄Π»Ρ Π½ΠΈΡ Π² DirectInput ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ Π²Π²ΠΎΠ΄Π°, ΡΠ°ΠΊ ΠΈ Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°DirectInput ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²Π²ΠΎΠ΄Π°, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΊ PC. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ Π»ΠΈΡΡ ΠΎ ΡΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ , Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ DirectInput. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π»ΡΠ±ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² Π²Π²ΠΎΠ΄Π°, ΡΡΠΎ ΠΎΠ½Π° (ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ) ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½Ρ.
Π― Π½Π΅ ΠΏΡΡΠ°ΡΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ Π²ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ DirectInput, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»Π°ΡΡ Π±Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΊΠ½ΠΈΠ³Π°. ΠΠ΄Π΅ΡΡ ΠΆΠ΅ DirectInput ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Windows Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ DirectInput Ρ Π²Π°ΡΠ°Π΅Ρ Π΄Π°ΠΆΠ΅ Π½Π° ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡ ΠΈ/ΠΈΠ»ΠΈ ΠΌΡΡΠ΅ΠΉ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π΄Π°Π½Π½Π°Ρ ΡΠ΅ΠΌΠ° ΡΠΎΠΆΠ΅ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ; ΠΌΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠ±ΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΌΡΡΡΡ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ.
ΠΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ DirectInput ΠΎΠ±Π³ΠΎΠ½ΡΠ΅Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Windows. DirectInput ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π΄Π»Ρ ΡΡΡΡΠΎΠΉΡΡΠ², Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Win32 API, Π½ΠΎ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΡΡΡΡ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ?
DirectInput, ΠΊΠ°ΠΊ ΠΈ DirectDraw, ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Windows ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ, Π½Π΅ ΡΡΡΠ°ΡΠΈΠ²Π°Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Windows Π² ΡΡΠΎΠΉ ΡΡ Π΅ΠΌΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² Π²Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΎΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π΄Π»Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈΠ»ΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΡΡΠΈ) Π½Π΅ Π²Π»ΠΈΡΡΡ Π½Π° DirectInput.
Π‘Ρ Π΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡΠ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ DirectInput ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π΄Π²ΡΡ Π²ΠΈΠ΄ΠΎΠ²: Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ (immediate) ΠΈ Π±ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ (buffered). ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²Π²ΠΎΠ΄Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°ΠΏΡΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , Π° Π±ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠ΅Π²ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ).
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π°ΠΆΠ°ΡΠ° Π»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠ»Π°Π²ΠΈΡΠ° Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠ»Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Win32 GetAsyncKeyState(). ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈ ΡΠ°ΡΡΠΎΠΌ ΠΎΠΏΡΠΎΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²Π²ΠΎΠ΄Π° (ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΡΠ΅ΠΆΠ΅ 30 ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ). Π Π΅Π΄ΠΊΠΈΠΉ ΠΎΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΡΡ ; Π΅ΡΠ»ΠΈ Π·Π° Π²ΡΠ΅ΠΌΡ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π² Π½Π°ΠΆΠ°ΡΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° Π½Π΅ ΠΎΠΏΡΠ°ΡΠΈΠ²Π°Π»Π°ΡΡ, ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ·Π½Π°Π΅Ρ ΠΎ Π½Π°Π»ΠΈΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°.