/******************************Module*Header*******************************\ * Module Name: mtkwin.hxx * * Copyright (c) 1997 Microsoft Corporation * \**************************************************************************/ #ifndef __mtkwin_hxx__ #define __mtkwin_hxx__ #include "mtk.hxx" #include "mtkbmp.hxx" #include "mtkanim.hxx" // SSW flags (mf: not used yet) #define SS_HRC_PROXY_BIT (1 << 0) // Window config bits #define MTK_FULLSCREEN (1 << 0) #define MTK_NOBORDER (1 << 1) #define MTK_NOCURSOR (1 << 2) #define MTK_TRANSPARENT (1 << 3) // GL config bits #define MTK_RGB (1 << 0) #define MTK_DOUBLE (1 << 1) #define MTK_BITMAP (1 << 2) #define MTK_DEPTH (1 << 3) #define MTK_DEPTH16 (1 << 4) #define MTK_ALPHA (1 << 5) //mf: way to make sure bitmap not resized, but what intial size ? #define MTK_STATIC_BITMAP (1 << 2) // Callback function types #if 0 typedef void (CALLBACK* MTK_RESHAPEPROC)(int, int, void *); typedef void (CALLBACK* MTK_REPAINTPROC)( LPRECT, void *); typedef void (CALLBACK* MTK_DISPLAYPROC)( LPRECT, void *); typedef void (CALLBACK* MTK_FINISHPROC)( void *); #else //mf: no DataPtr's for now typedef void (CALLBACK* MTK_RESHAPEPROC)(int, int); typedef void (CALLBACK* MTK_REPAINTPROC)( LPRECT ); typedef void (CALLBACK* MTK_DISPLAYPROC)(); typedef BOOL (CALLBACK* MTK_MOUSEMOVEPROC)( int, int, GLenum ); typedef BOOL (CALLBACK* MTK_MOUSEDOWNPROC)( int, int, GLenum ); typedef BOOL (CALLBACK* MTK_MOUSEUPPROC)( int, int, GLenum ); typedef BOOL (CALLBACK* MTK_KEYDOWNPROC)( int, GLenum ); typedef void (CALLBACK* MTK_FINISHPROC)(); #endif /**************************************************************************\ * MTKWIN * \**************************************************************************/ class MTKWIN { public: // mf: most of these have to be kept public, since have to call from outside // the class scope by other functions in mtk (? subclass it ?) // Interface : MTKWIN(); ~MTKWIN(); BOOL Create( LPCTSTR title, ISIZE *pSize, IPOINT2D *pPos, UINT winConfig, WNDPROC wndProc ); BOOL Config( UINT glConfig ); BOOL Config( UINT glConfig, PVOID pConfigData ); void SetReshapeFunc(MTK_RESHAPEPROC); void SetRepaintFunc(MTK_REPAINTPROC); void SetDisplayFunc(MTK_DISPLAYPROC); void SetAnimateFunc(MTK_ANIMATEPROC); void SetMouseMoveFunc(MTK_MOUSEMOVEPROC); void SetMouseUpFunc(MTK_MOUSEUPPROC); void SetMouseDownFunc(MTK_MOUSEDOWNPROC); void SetKeyDownFunc(MTK_KEYDOWNPROC); void SetFinishFunc(MTK_FINISHPROC); void SetCallbackData( void *pData ) { DataPtr = pData; }; BOOL Exec(); // execute message loop ?? return void * ? void Return(); // return from message loop MTKBMP *pBackBitmap; // back buffer bitmap MTKBMP *pBackgroundBitmap; void Flush(); // flush and swap void mtkSwapBuffers(); void CopyBackBuffer(); // copy back buffer to window void UpdateBackgroundBitmap( RECT *pRect ); void ClearToBackground(); HWND GetHWND() { return hwnd; }; HDC GetHdc() { return hdc; }; void GetSize( ISIZE *pSize ) { *pSize = size; }; void GetMouseLoc( int *, int * ); void Close(); void SetTitle( char *title ); // ~Private int wFlags; // various window flags HWND hwnd; int execRefCount; // reference count for Exec/Return BOOL bOwnWindow; // TRUE if we created the window, otherwise system // window, and this is a wrapper HDC hdc; HGLRC hrc; // Can be for this window or a bitmap in pStretch ISIZE size; // window size IPOINT2D pos; // window pos'n relative to parent's origin BOOL bTransparent; BOOL bFullScreen; BOOL bDoubleBuf; MTK_RESHAPEPROC ReshapeFunc; MTK_REPAINTPROC RepaintFunc; MTK_DISPLAYPROC DisplayFunc; MTK_MOUSEMOVEPROC MouseMoveFunc; MTK_MOUSEDOWNPROC MouseDownFunc; MTK_MOUSEUPPROC MouseUpFunc; MTK_KEYDOWNPROC KeyDownFunc; MTK_FINISHPROC FinishFunc; void *DataPtr; //mf: !!! static for now MTKANIMATOR animator; void SetAnimateMode( UINT mode, float *fParam ); void mtkAnimate(); // Call animation function void MakeCurrent(); HGLRC GetHRC() { return hrc; }; void GdiClear(); void Resize( int width, int height ); // called on WM_RESIZE void Repaint( BOOL bCheckUpdateRect ); // called on WM_REPAINT void Display(); // DisplayFunc wrapper void Reshape(); // Call back to ss to reshape its GL draw area private: void Reset(); // Set to default init state BOOL ConfigureForGdi(); HGLRC hrcSetupGL( UINT glConfig, PVOID pData ); void SetSSWindowPos( int flags ); void SetSSWindowPos(); void MoveSSWindow( BOOL bRedrawBg ); void GetSSWindowRect( LPRECT lpRect ); int GLPosY(); // Convert window pos.y from gdi to GL }; typedef MTKWIN* PMTKWIN; #endif // __mtkwin_hxx__