/// // ESWindowProc() // // Main window procedure // LRESULT WINAPI ESWindowProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { LRESULT lRet = 1; switch (uMsg) { case WM_CREATE: break; case WM_PAINT: { ESContext *esContext = (ESContext*)(LONG_PTR) GetWindowLongPtr ( hWnd, GWL_USERDATA ); if ( esContext && esContext->drawFunc ) esContext->drawFunc ( esContext ); ValidateRect( esContext->hWnd, NULL ); } break; case WM_DESTROY: PostQuitMessage(0); break; case WM_CHAR: { POINT point; ESContext *esContext = (ESContext*)(LONG_PTR) GetWindowLongPtr ( hWnd, GWL_USERDATA ); GetCursorPos( &point ); if ( esContext && esContext->keyFunc ) esContext->keyFunc ( esContext, (unsigned char) wParam, (int) point.x, (int) point.y ); } break; case WM_KEYUP: { POINT point; ESContext *esContext = (ESContext*)(LONG_PTR) GetWindowLongPtr ( hWnd, GWL_USERDATA ); GetCursorPos( &point ); if ( esContext && esContext->keyFuncUp ) esContext->keyFuncUp ( esContext, (unsigned char) wParam, (int) point.x, (int) point.y ); } break; case WM_MOUSEMOVE: { POINT point; ESContext *esContext = (ESContext*)(LONG_PTR) GetWindowLongPtr ( hWnd, GWL_USERDATA ); GetCursorPos( &point ); if ( esContext && esContext->mouseMoveFunc ) esContext->mouseMoveFunc ( esContext, (unsigned char) wParam, (int) point.x, (int) point.y ); } default: lRet = DefWindowProc (hWnd, uMsg, wParam, lParam); break; } return lRet; }