LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { bool bActivating; switch(msg) { case WM_CREATE: return FALSE; case WM_PAINT: if(pHGE->pD3D && pHGE->procRenderFunc && pHGE->bWindowed) pHGE->procRenderFunc(); break; case WM_DESTROY: PostQuitMessage(0); return FALSE; /* case WM_ACTIVATEAPP: bActivating = (wparam == TRUE); if(pHGE->pD3D && pHGE->bActive != bActivating) pHGE->_FocusChange(bActivating); return FALSE; */ case WM_ACTIVATE: // tricky: we should catch WA_ACTIVE and WA_CLICKACTIVE, // but only if HIWORD(wParam) (fMinimized) == FALSE (0) bActivating = (LOWORD(wparam) != WA_INACTIVE) && (HIWORD(wparam) == 0); if(pHGE->pD3D && pHGE->bActive != bActivating) pHGE->_FocusChange(bActivating); return FALSE; case WM_SETCURSOR: if(pHGE->bActive && LOWORD(lparam)==HTCLIENT && pHGE->bHideMouse) SetCursor(NULL); else SetCursor(LoadCursor(NULL, IDC_ARROW)); return FALSE; case WM_SYSKEYDOWN: if(wparam == VK_F4) { if(pHGE->procExitFunc && !pHGE->procExitFunc()) return FALSE; return DefWindowProc(hwnd, msg, wparam, lparam); } else if(wparam == VK_RETURN) { pHGE->System_SetState(HGE_WINDOWED, !pHGE->System_GetState(HGE_WINDOWED)); return FALSE; } else { pHGE->_BuildEvent(INPUT_KEYDOWN, wparam, HIWORD(lparam) & 0xFF, (lparam & 0x40000000) ? HGEINP_REPEAT:0, -1, -1); return FALSE; } case WM_KEYDOWN: pHGE->_BuildEvent(INPUT_KEYDOWN, wparam, HIWORD(lparam) & 0xFF, (lparam & 0x40000000) ? HGEINP_REPEAT:0, -1, -1); return FALSE; case WM_SYSKEYUP: pHGE->_BuildEvent(INPUT_KEYUP, wparam, HIWORD(lparam) & 0xFF, 0, -1, -1); return FALSE; case WM_KEYUP: pHGE->_BuildEvent(INPUT_KEYUP, wparam, HIWORD(lparam) & 0xFF, 0, -1, -1); return FALSE; case WM_LBUTTONDOWN: SetFocus(hwnd); pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_LBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_MBUTTONDOWN: SetFocus(hwnd); pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_MBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_RBUTTONDOWN: SetFocus(hwnd); pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_RBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_LBUTTONDBLCLK: pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_LBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_MBUTTONDBLCLK: pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_MBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_RBUTTONDBLCLK: pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_RBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_LBUTTONUP: pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_LBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_MBUTTONUP: pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_MBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_RBUTTONUP: pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_RBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_MOUSEMOVE: pHGE->_BuildEvent(INPUT_MOUSEMOVE, 0, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case 0x020A: // WM_MOUSEWHEEL, GET_WHEEL_DELTA_WPARAM(wparam); pHGE->_BuildEvent(INPUT_MOUSEWHEEL, short(HIWORD(wparam))/120, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_SIZE: if(pHGE->pD3D && wparam==SIZE_RESTORED) pHGE->_Resize(LOWORD(lparam), HIWORD(lparam)); //return FALSE; break; case WM_SYSCOMMAND: if(wparam==SC_CLOSE) { if(pHGE->procExitFunc && !pHGE->procExitFunc()) return FALSE; pHGE->bActive=false; return DefWindowProc(hwnd, msg, wparam, lparam); } break; } return DefWindowProc(hwnd, msg, wparam, lparam); }
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_CREATE: return FALSE; case WM_PAINT: if(pHGE->procRenderFunc) pHGE->procRenderFunc(); break; case WM_DESTROY: PostQuitMessage(0); return FALSE; case WM_ACTIVATEAPP: if(pHGE->pD3D && pHGE->bActive != (wparam == TRUE)) pHGE->_FocusChange(wparam == TRUE); return FALSE; case WM_SETCURSOR: if(pHGE->bActive && LOWORD(lparam)==HTCLIENT && pHGE->bHideMouse) SetCursor(NULL); else SetCursor(LoadCursor(NULL, IDC_ARROW)); return FALSE; case WM_SYSKEYDOWN: if(wparam==VK_F4) { if(pHGE->procExitFunc) { if(pHGE->procExitFunc()) return DefWindowProc(hwnd, msg, wparam, lparam); else return FALSE; } else return DefWindowProc(hwnd, msg, wparam, lparam); } else { pHGE->_BuildEvent(INPUT_KEYDOWN, wparam, HIWORD(lparam) & 0xFF, (lparam & 0x40000000) ? HGEINP_REPEAT:0, -1, -1); return FALSE; } case WM_KEYDOWN: pHGE->_BuildEvent(INPUT_KEYDOWN, wparam, HIWORD(lparam) & 0xFF, (lparam & 0x40000000) ? HGEINP_REPEAT:0, -1, -1); return FALSE; case WM_SYSKEYUP: pHGE->_BuildEvent(INPUT_KEYUP, wparam, HIWORD(lparam) & 0xFF, 0, -1, -1); return FALSE; case WM_KEYUP: pHGE->_BuildEvent(INPUT_KEYUP, wparam, HIWORD(lparam) & 0xFF, 0, -1, -1); return FALSE; case WM_LBUTTONDOWN: SetFocus(hwnd); pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_LBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_MBUTTONDOWN: SetFocus(hwnd); pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_MBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_RBUTTONDOWN: SetFocus(hwnd); pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_RBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_LBUTTONDBLCLK: pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_LBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_MBUTTONDBLCLK: pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_MBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_RBUTTONDBLCLK: pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_RBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_LBUTTONUP: pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_LBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_MBUTTONUP: pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_MBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_RBUTTONUP: pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_RBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_MOUSEMOVE: pHGE->_BuildEvent(INPUT_MOUSEMOVE, 0, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case 0x020A: // WM_MOUSEWHEEL, GET_WHEEL_DELTA_WPARAM(wparam); pHGE->_BuildEvent(INPUT_MOUSEWHEEL, short(HIWORD(wparam))/120, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam)); return FALSE; case WM_SIZE: if(wparam==SIZE_RESTORED) pHGE->_Resize(LOWORD(lparam), HIWORD(lparam)); //return FALSE; break; case WM_SYSCOMMAND: if(wparam==SC_CLOSE) { if(pHGE->procExitFunc) { if(pHGE->procExitFunc()) { pHGE->bActive=false; return DefWindowProc(hwnd, msg, wparam, lparam); } else return FALSE; } else { pHGE->bActive=false; return DefWindowProc(hwnd, msg, wparam, lparam); } } break; } return DefWindowProc(hwnd, msg, wparam, lparam); }