#include <sys/stat.h>
#elif TARGET_HOST_WIN32
#elif TARGET_HOST_WINCE
- // including gx.h does only work in c++ (thanks MS...),
- // so we define this on our own...
-struct GXKeyList {
- short vkUp; // key for up
- POINT ptUp; // x,y position of key/button. Not on screen but in screen coordinates.
- short vkDown;
- POINT ptDown;
- short vkLeft;
- POINT ptLeft;
- short vkRight;
- POINT ptRight;
- short vkA;
- POINT ptA;
- short vkB;
- POINT ptB;
- short vkC;
- POINT ptC;
- short vkStart;
- POINT ptStart;
-};
-/*__declspec(dllimport) struct GXKeyList GXGetDefaultKeys(int iOptions);
-__declspec(dllimport) int GXOpenInput();
-#include "my_gx.h"*/
-
-extern void wince_GetDefaultKeys(void* nData, int iOptions);
-extern void wince_OpenInput();
-
-/*void wince_GetDefaultKeys(void* nData, int iOptions)
-{
- *(struct GXKeyList*)nData = GXGetDefaultKeys(iOptions);
-}
-void wince_OpenInput()
-{
- GXOpenInput();
-}*/
+
+typedef struct GXDisplayProperties GXDisplayProperties;
+typedef struct GXKeyList GXKeyList;
+#include <gx.h>
+
+typedef struct GXKeyList (*GXGETDEFAULTKEYS)(int);
+typedef int (*GXOPENINPUT)();
+
+GXGETDEFAULTKEYS GXGetDefaultKeys_ = NULL;
+GXOPENINPUT GXOpenInput_ = NULL;
+
+struct GXKeyList gxKeyList;
#endif
fgDeinitialize( );
exit( 0 );
}
+ else if( fgState.ActionOnWindowClose == GLUT_ACTION_GLUTMAINLOOP_RETURNS )
+ fgState.ExecState = GLUT_EXEC_STATE_STOP;
- fgState.ExecState = GLUT_EXEC_STATE_STOP;
return;
}
break;
fgDeinitialize( );
exit( 0 );
}
- fgState.ExecState = GLUT_EXEC_STATE_STOP;
+ else if( fgState.ActionOnWindowClose == GLUT_ACTION_GLUTMAINLOOP_RETURNS )
+ fgState.ExecState = GLUT_EXEC_STATE_STOP;
+
return;
}
ReleaseDC( window->Window.Handle, window->Window.Device );
#if TARGET_HOST_WINCE
- // Take over button handling
- wince_OpenInput();
+ /* Take over button handling */
+ {
+ HINSTANCE dxDllLib=LoadLibrary(_T("gx.dll"));
+ if (dxDllLib)
+ {
+ GXGetDefaultKeys_=(GXGETDEFAULTKEYS)GetProcAddress(dxDllLib, _T("?GXGetDefaultKeys@@YA?AUGXKeyList@@H@Z"));
+ GXOpenInput_=(GXOPENINPUT)GetProcAddress(dxDllLib, _T("?GXOpenInput@@YAHXZ"));
+ }
+
+ if(GXOpenInput_)
+ (*GXOpenInput_)();
+ if(GXGetDefaultKeys_)
+ gxKeyList = (*GXGetDefaultKeys_)(GX_LANDSCAPEKEYS);
+ }
+
#endif /* TARGET_HOST_WINCE */
break;
break;
#if 0
case WM_SETFOCUS:
- printf("WM_SETFOCUS: %p\n", window );
+ /* printf("WM_SETFOCUS: %p\n", window ); */
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
break;
if (LOWORD(wParam) != WA_INACTIVE)
{
/* glutSetCursor( fgStructure.Window->State.Cursor ); */
- printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window,
- window->State.Cursor );
+ /* printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window,
+ window->State.Cursor ); */
glutSetCursor( window->State.Cursor );
}
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
{
-#if TARGET_HOST_WINCE
- struct GXKeyList gxKeyList;
-#endif /* TARGET_HOST_WINCE */
int keypress = -1;
POINT mouse_pos ;
}
#if TARGET_HOST_WINCE
- if(!(lParam & 0x40000000)) // Prevent auto-repeat
+ if(!(lParam & 0x40000000)) /* Prevent auto-repeat */
{
- wince_GetDefaultKeys(&gxKeyList, 0x03);
-
if(wParam==(unsigned)gxKeyList.vkRight)
keypress = GLUT_KEY_RIGHT;
else if(wParam==(unsigned)gxKeyList.vkLeft)
{
/*
* We have received a system command message. Try to act on it.
- * The commands are passed in through the "lParam" parameter:
- * Clicking on a corner to resize the window gives a "F004" message
- * but this is not defined in my header file.
+ * The commands are passed in through the "wParam" parameter:
+ * The least significant digit seems to be which edge of the window
+ * is being used for a resize event:
+ * 4 3 5
+ * 1 2
+ * 7 6 8
+ * Congratulations and thanks to Richard Rauch for figuring this out..
*/
- switch ( lParam )
+ switch ( wParam & 0xfff0 )
{
case SC_SIZE :
break ;
case SC_HOTKEY :
break ;
+
+ default:
+#if _DEBUG
+ fgWarning( "Unknown wParam type 0x%x\n", wParam );
+#endif
+ break;
}
}
#endif /* !TARGET_HOST_WINCE */