WinProc() is a thread... So I avoid it when I can.
I think ??? /Ob2 ??? ( via ??? #pragma optimize ??? )
and ??? inline ??? are what Mr. Pango needs.
I made a lot of changes ( e.g. removing recently added bugs )
since I last mentioned Games.EXE to you.
A two year old backup resulted in a serious bug fix.
So, as I said, regular backups are the best ??? docs ??? you can have.
This is 2 days of changes: ??? www.Cotse.NET/users/jeffrelf/Games.ZIP ???.
Games.EXE is an ??? Odd ??? mix of DirectDraw and CreateWindow(),
including child ( and small popup ) windows.
WinProc() is a thread, so I avoid it when I can;
now there's just one ??? WNDPROC ??? and it's just:
??? long __stdcall WinProc ( HWND Wnd, uint _WM, uint C, long C2 ) {
int Edit = _WM == WM_CTLCOLOREDIT ;
return
// ??? IniDC() ??? sets the font and background/foreground colors
// for a button or an edit control.
Edit || _WM == WM_CTLCOLORSTATIC
? ( IniDC( ( HDC ) C, Edit ? _Gray : _D_Yellow, Fnt, 1 )
, (int) Black )
// ??? Win ??? is the mother window ( i.e not a child ).
: Wnd != Win
? DefWindowProc( Wnd, _WM, C, C2 )
: PostMessage( Win, _WM, C, C2 ); } ???.
This is my all-purpose event loop handler, used everywhere:
??? #define WantsOut ( \
WM == WM_APPCOMMAND && P_C2[ 1 ] == APPCOMMAND_CLOSE \
|| WM == WM_KEYDOWN && C== 27 )
const int Any = 1, Spun = 0 ;
int Getting( int TheGirl ) {
// OnStage is true when our window is active.
// WasInX tells me when the mouse cursor has left the window,
// so I can repaint it one more time ( to remove the old cursor ).
static int OnStage = -1, WasInX, rv ;
// Fuck ??? Code Complete ???,
// ??? Getting() ??? sets ( or unsets ) these globals.
// Most get set in ??? Mouse() ???. ( See Games.CPP, in the .ZIP )
Wnd = 0, Tics, InMainW = Hit = 0 ;
WinID = Wheel_Flip = OnUp = OnDwn = 0 ;
OnLD = OnMD = OnRD = OnLU = OnMU = OnRU = WM = C = C2 = 0 ;
GetCursorPos( & XY ); MouseX = XY.x, MouseY = XY.y ;
// InX is true when the mouse cursor is inside
// a back-buffered, maximized window.
InX = Game == Mario && MouseY >= ScrTop && MouseY <= ScrBot ;
// No mouse cursor is shown ( and you can't exit )
// when InMario is true.
InMario =InX && MouseX >= MarioScrR.left && MouseX < MarioScrR.right
&& MouseY >= MarioScrR.top && MouseY < MarioScrR.bottom ;
if ( PeekMessage( & Msg, 0,0,0, PM_REMOVE ) ) {
WM = Msg.message, C = Msg.wParam ;
C2 = Msg.lParam, Wnd = Msg.hwnd, Mouse();
if ( ! InMario && WantsOut ) exit( 1 );
if ( Wnd != Win ) // This allows for child windows:
TranslateMessage( & Msg ), DispatchMessage( & Msg );
else if ( WM == WM_PAINT ) // Ditch the WM_PAINT crap.
PaintReq = 1, ValidateRect( Win, & WinRec );
if ( ! OnStage && WM == WM_SYNCPAINT )
// I'd mimimize on the WM_ACTIVATEAPP event,
// but it can't be done without a horrid ??? activation battle ???.
// This mimimizes the inactive window ( instead of drawing ):
ShowWindow( Win, SW_SHOWMINNOACTIVE );
if ( WM == WM_ACTIVATEAPP ) {
rv = OnStage == -1, PaintReq |= ( OnStage = C ) ;
if ( ! rv && OnStage ) { _SurT Was = 0, Is ;
if ( ! ScrSur ) exit( 1 );
ShowWindow( Win, SW_SHOWNOACTIVATE );
// All DirectDraw surfaces must be redrawn.
Load_BM, ScrSur->Restore(), DrawSur->Restore();
Cursor->Restore(), DrawCursor();
// ??? LoopXx( Gy, Gy ) ??? re-caches glyphs.
LoopXx( Gy, Gy ) { CharSurT * S = P->CharSur -1 ;
Loop( Colors )
if ( Is = ( ++ S )->Cached ) {
if ( Is != Was ) Is->Restore(), Was = Is ;
_CacheGlyph( P, J, Is, S->I ); } } } }
if ( WM != WM_MOUSEMOVE ) goto Done ; }
// Don't draw anything if...
if ( ! OnStage || ! InX && ! PaintReq && ! ( WasInX && ! InX ) ) {
Done: int GotIt = TheGirl <= Any && WM || TheGirl > Any && WM == TheGirl ;
if ( TheGirl == Any && ! OnUp && ButUp )
// Nothing is happening, dehighlight the pressed button:
ButUp = 0, ButDwn = ButDwnE = 0 ;
else if ( ! GotIt && TheGirl != Spun )
// Nothin' going on, sleep for a thirtieth of a second.
// Redrawing the entire maximized window 30 times a second
// is ??? nothing ???, the CPU indicator doesn't budge.
Sleep( 900 / 30 ); return GotIt ; }
WasInX = InX ;
// StupidPaint() doesn't use a back buffer... it's a 'tard.
if ( Game != Mario ) StupidPaint();
else SetCur( - InX ), MarioPaint();
goto Done ; } ???.