}
if (bmpdialog->DoModal()==IDCANCEL) {
PostMessage(WM_CLOSE);
return;
}
fullfilename=bmpdialog->fullfilename;
filename=bmpdialog->filename;
pathname=bmpdialog->pathname;
int index=bmpdialog->GetIndex();
DWORD w,h,d;
if (bmpdialog->FilePalettized()) {
w=palettemode[index].w;
h=palettemode[index].h;
d=palettemode[index].d;
} else {
w=nonpalettemode[index].w;
h=nonpalettemode[index].h;
d=nonpalettemode[index].d;
}
if (GetDisplayDepth()==8) primsurf->SetPalette(palette);
ActivateDisplayMode(GetDisplayModeIndex(w, h, d));
LoadBmp();
ShowCursor(FALSE);
}
Π€ΡΠ½ΠΊΡΠΈΡ ShowDialog() ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 640Γ480. ΠΠ· ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ SelectInitialDisplayMode() Π½Π°ΠΌ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡ ShowDialog() ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ BMP-ΡΠ°ΠΉΠ»Π°. ΠΡΠ»ΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ, ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² ΡΠ΅ΠΆΠΈΠΌ 640Γ480Γ8. ΠΡΠΎ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ΅ΠΆΠΈΠΌΡ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ Mode X, Π° GDI Π² ΡΠ°ΠΊΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠ°Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π°.
ΠΠ°Π»Π΅Π΅ ΠΌΡ Π³ΠΎΡΠΎΠ²ΠΈΠΌΡΡ ΠΊ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠ»Ρ ΠΏΠ°Π»ΠΈΡΡΠΎΠ²ΡΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΠΌΡ ΠΎΡΠΈΡΠ°Π΅ΠΌ Π²ΡΠΎΡΠΈΡΠ½ΡΠΉ Π±ΡΡΠ΅Ρ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΏΠ°Π»ΠΈΡΡΡ, Π½Π΅ ΠΏΡΡΠ°ΡΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ»Ρ Π±Π΅ΡΠΏΠ°Π»ΠΈΡΡΠΎΠ²ΡΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π½Π° Π²ΡΠΎΡΠΈΡΠ½ΡΠΉ Π±ΡΡΠ΅Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π·Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ.
Π‘ΠΠΠΠ’ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
Π§ΡΠΎΠ±Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π² ΠΏΠ°Π»ΠΈΡΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ΅, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ 256 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ°Π»ΠΈΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΎ 236, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ²Π΅ΡΠ° Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ ΠΏΠ°Π»ΠΈΡΡΡ (ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ²Π΅ΡΠ° Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠΎ 10 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π½Π°ΡΠ°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΏΠ°Π»ΠΈΡΡΡ) ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΠ°ΡΡ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π²Π½Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π²Π΅Π΄Π΅Ρ ΠΊ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΠ²Π»Π΅ΠΊΠ°Π΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π§ΡΠΎΠ±Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠ΅ΠΆΠ½Π΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ°Π»ΠΈΡΡΡ.
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ FlipToGDISurface() Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ GDI Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ (ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠΌ DirectDrawWin), ΡΡΠΎΠ±Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΡΡΡΡ.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° BmpDialog, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ ΡΠ°Π½Π΅Π΅. ΠΠ»Π°ΡΡ-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° BmpDialog ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ClassWizard, ΠΎΠ½ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌ. ΠΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΎΠΊΠ½Π° ΠΈ ΡΠ΅Π°ΠΊΡΠΈΠΈ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° BmpDialog Π·Π΄Π΅ΡΡ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ DirectDraw.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ SetArrays() ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅ΠΉ ΠΌΠ°ΡΡΠΈΠ²Ρ palettemode ΠΈ nonpalettemode Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌΡ ΠΎΠΊΠ½Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ°Ρ , ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ°Π»ΠΈΡΡΠΎΠ²ΡΡ , ΡΠ°ΠΊ ΠΈ Π±Π΅ΡΠΏΠ°Π»ΠΈΡΡΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ DoModal(). ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Display Π»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°Π½ BMP-ΡΠ°ΠΉΠ» ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΈΠΌΡ ΠΈ ΠΏΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ BMP-ΡΠ°ΠΉΠ»Π° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ°. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΌΡ ΠΏΠΎΡΡΠ»Π°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_CLOSE ΠΈ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π°Π²Π΅ΡΡΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ ActivateDisplayMode() Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌ, ΡΡΠ½ΠΊΡΠΈΡ LoadBmp() Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ BMP-ΡΠ°ΠΉΠ»Π°, Π° ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ.
Π§ΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ LoadBmp(), ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ BMP-ΡΠ°ΠΉΠ», Π½ΠΎ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ LoadBmp() ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.8.
ΠΠΈΡΡΠΈΠ½Π³ 5.8. Π€ΡΠ½ΠΊΡΠΈΡ LoadBmp()
BOOL BmpViewWin::LoadBmp() {
CWaitCursor cur;
LPDIRECTDRAWSURFACE surf;
surf=CreateSurface(filename, TRUE);
if (surf) {
if (bmpsurf) bmpsurf->Release();
bmpsurf=surf;
} else {
TRACE("failed to load new file\n");
return FALSE;
}
displayrect=GetDisplayRect();
TRACE("display: %d %d\n", displayrect.right, displayrect.bottom);
GetSurfaceRect(bmpsurf, bmprect);
TRACE("surface: %d %d\n", bmprect.right, bmprect.bottom);
int mx = displayrect.Width()-bmprect.Width();
if (mx<0) {
xscroll=TRUE;
xlimit=mx;
x=0;
} else {
xscroll=FALSE;
x=mx/2;
}
int my = displayrect.Height()-bmprect.Height();
if (my<0) {
yscroll=TRUE;
ylimit=my;
y=0;
} else {
yscroll=FALSE;
y=my/2;
}
update_screen=TRUE;
return TRUE;
}
Π‘Π½Π°ΡΠ°Π»Π° ΡΡΠ½ΠΊΡΠΈΡ LoadBmp() ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ MFC CWaitCursor, ΡΡΠΎΠ±Ρ Π½Π° Π²ΡΠ΅ΠΌΡ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΡΡ ΠΊΡΡΡΠΎΡ Windows Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅ΡΠΎΡΠ½ΡΡ ΡΠ°ΡΠΎΠ². ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ CreateSurface() ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠΌΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ BMP-ΡΠ°ΠΉΠ»Π°. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ CreateSurface() ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»Π°ΡΡ ΡΠ°Π½Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ BMP-ΡΠ°ΠΉΠ» Π½Π° Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ.
ΠΠ°ΡΠ΅ΠΌ LoadBmp() ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠ° BmpViewWin, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠΎΠΉ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ΅ΠΉ. ΠΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ°, ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΡΠ΅Π½ΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅; Π΅ΡΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ Π΅Π΅ ΠΏΡΠΎΠΊΡΡΡΠΊΡ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ x ΠΈ y ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ, Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ xlimit ΠΈ ylimit ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ. ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ xscroll ΠΈ yscroll ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π° Π»ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½Π°Ρ ΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠ° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ update_screen ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ TRUE; ΠΎΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ DrawScene() Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ. Π ΡΡΠ½ΠΊΡΠΈΠΈ DrawScene() ΡΠ΅ΡΡ ΠΏΠΎΠΉΠ΄Π΅Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.
ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ²ΠΎΠ΄Π€ΡΠ½ΠΊΡΠΈΡ DrawScene() ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠΊΡΠ°Π½ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ update_screen. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ update_screen ΡΠ°Π²Π½Π° FALSE, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ Π½Π΅ ΡΡΡΠ°ΡΠ΅Π»ΠΎ, ΠΈ Π΄Π΅Π»Π°ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. Π€ΡΠ½ΠΊΡΠΈΡ DrawScene() Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
void BmpViewWin::DrawScene() {
if (update_screen && bmpsurf) {
ClearSurface(backsurf, 0);
BltSurface(backsurf, bmpsurf, x, y);
primsurf->Flip(0, DDFLIP_WAIT);
update_screen=FALSE;
}
}
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π° ΡΡΠ½ΠΊΡΠΈΡ BltSurface() ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΡΠ½ΠΊΡΠΈΡ DrawScene() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠΎ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ update_screen ΡΠ°Π²Π½Π° TRUE ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π°, ΡΠΊΡΠ°Π½ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΊΡΠ°Π½ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²ΡΠΎΡΠΈΡΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΡΡΠΈΡΠ°Π΅ΡΡΡ; Π΅ΡΠ»ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ, ΡΠΎ Π² ΡΡΠΈΡΠ°Π½ΠΈΠΈ Π±ΡΡΠ΅ΡΠ° Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ°ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ BltSurface() ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Π½Π° Π²ΡΠΎΡΠΈΡΠ½ΡΠΉ Π±ΡΡΠ΅Ρ, Π° ΡΡΠ½ΠΊΡΠΈΡ Flip() ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ update_screen ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ FALSE.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Π² Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π²ΠΎΠ΄Π°. ΠΠ°ΠΆΠ°ΡΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ OnKeyDown(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
void BmpViewWin::OnKeyDown(UINT key, UINT nRepCnt, UINT nFlags) {
switch (key) {
case VK_UP:
Up();
break;
case VK_DOWN:
Down();
break;
case VK_LEFT:
Left();
break;
case VK_RIGHT:
Right();
break;
case VK_HOME:
Home();
break;
case VK_END:
End();
break;
case VK_PRIOR:
PageUp();
break;
case VK_NEXT:
PageDown();
break;
case VK_ESCAPE:
case VK_SPACE:
case VK_RETURN:
ShowDialog();
break;
}
DirectDrawWin::OnKeyDown(key, nRepCnt, nFlags);
}
Π‘ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Π·Π³Π»ΡΠ΄Π° Π½Π° Π»ΠΈΡΡΠΈΠ½Π³ OnKeyDown() ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π²Π΅ ΡΡΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎΡΡΡΠ°Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡ Escape, ΠΏΡΠΎΠ±Π΅Π» ΠΈ Enter Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ShowDialog(). ΠΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΠΎΡΠ»Π΅ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.