#include "StdAfx.h" #include "PythonApplication.h" #include "../eterlib/Camera.h" #include "../CWebBrowser/CWebBrowser.h" #include static int gs_nMouseCaptureRef = 0; void CPythonApplication::SafeSetCapture() { SetCapture(m_hWnd); gs_nMouseCaptureRef++; } void CPythonApplication::SafeReleaseCapture() { gs_nMouseCaptureRef--; if (gs_nMouseCaptureRef==0) ReleaseCapture(); } void CPythonApplication::__SetFullScreenWindow(HWND hWnd, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) { DEVMODE DevMode; DevMode.dmSize = sizeof(DevMode); DevMode.dmBitsPerPel = dwBPP; DevMode.dmPelsWidth = dwWidth; DevMode.dmPelsHeight = dwHeight; DevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; LONG Error = ChangeDisplaySettings(&DevMode, CDS_FULLSCREEN); if(Error == DISP_CHANGE_RESTART) { ChangeDisplaySettings(0,0); } } void CPythonApplication::__MinimizeFullScreenWindow(HWND hWnd, DWORD dwWidth, DWORD dwHeight) { ChangeDisplaySettings(0, 0); SetWindowPos(hWnd, 0, 0, 0, dwWidth, dwHeight, SWP_SHOWWINDOW); ShowWindow(hWnd, SW_MINIMIZE); } LRESULT CPythonApplication::WindowProcedure(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { const int c_DoubleClickTime = 300; const int c_DoubleClickBox = 5; static int s_xDownPosition = 0; static int s_yDownPosition = 0; switch (uiMsg) { case WM_ACTIVATEAPP: { m_isActivateWnd = (wParam == WA_ACTIVE) || (wParam == WA_CLICKACTIVE); if (m_isActivateWnd) { m_SoundManager.RestoreVolume(); ////////////////// if (m_isWindowFullScreenEnable) { __SetFullScreenWindow(hWnd, m_dwWidth, m_dwHeight, m_pySystem.GetBPP()); } } else { m_SoundManager.SaveVolume(); ////////////////// if (m_isWindowFullScreenEnable) { __MinimizeFullScreenWindow(hWnd, m_dwWidth, m_dwHeight); } } } break; case WM_INPUTLANGCHANGE: return CPythonIME::Instance().WMInputLanguage(hWnd, uiMsg, wParam, lParam); break; case WM_IME_STARTCOMPOSITION: return CPythonIME::Instance().WMStartComposition(hWnd, uiMsg, wParam, lParam); break; case WM_IME_COMPOSITION: return CPythonIME::Instance().WMComposition(hWnd, uiMsg, wParam, lParam); break; case WM_IME_ENDCOMPOSITION: return CPythonIME::Instance().WMEndComposition(hWnd, uiMsg, wParam, lParam); break; case WM_IME_NOTIFY: return CPythonIME::Instance().WMNotify(hWnd, uiMsg, wParam, lParam); break; case WM_IME_SETCONTEXT: lParam &= ~(ISC_SHOWUICOMPOSITIONWINDOW | ISC_SHOWUIALLCANDIDATEWINDOW); break; case WM_CHAR: return CPythonIME::Instance().WMChar(hWnd, uiMsg, wParam, lParam); break; case WM_KEYDOWN: OnIMEKeyDown(LOWORD(wParam)); break; case WM_LBUTTONDOWN: SafeSetCapture(); if (ELTimer_GetMSec() - m_dwLButtonDownTime < c_DoubleClickTime && abs(LOWORD(lParam) - s_xDownPosition) < c_DoubleClickBox && abs(HIWORD(lParam) - s_yDownPosition) < c_DoubleClickBox) { m_dwLButtonDownTime = 0; OnMouseLeftButtonDoubleClick(short(LOWORD(lParam)), short(HIWORD(lParam))); } else { m_dwLButtonDownTime = ELTimer_GetMSec(); OnMouseLeftButtonDown(short(LOWORD(lParam)), short(HIWORD(lParam))); } s_xDownPosition = LOWORD(lParam); s_yDownPosition = HIWORD(lParam); return 0; case WM_LBUTTONUP: m_dwLButtonUpTime = ELTimer_GetMSec(); if (hWnd == GetCapture()) { SafeReleaseCapture(); OnMouseLeftButtonUp(short(LOWORD(lParam)), short(HIWORD(lParam))); } return 0; case WM_MBUTTONDOWN: SafeSetCapture(); UI::CWindowManager::Instance().RunMouseMiddleButtonDown(short(LOWORD(lParam)), short(HIWORD(lParam))); // OnMouseMiddleButtonDown(short(LOWORD(lParam)), short(HIWORD(lParam))); break; case WM_MBUTTONUP: if (GetCapture() == hWnd) { SafeReleaseCapture(); UI::CWindowManager::Instance().RunMouseMiddleButtonUp(short(LOWORD(lParam)), short(HIWORD(lParam))); // OnMouseMiddleButtonUp(short(LOWORD(lParam)), short(HIWORD(lParam))); } break; case WM_RBUTTONDOWN: SafeSetCapture(); OnMouseRightButtonDown(short(LOWORD(lParam)), short(HIWORD(lParam))); return 0; case WM_RBUTTONUP: if (hWnd == GetCapture()) { SafeReleaseCapture(); OnMouseRightButtonUp(short(LOWORD(lParam)), short(HIWORD(lParam))); } return 0; case 0x20a: if (WebBrowser_IsVisible()) { // À¥ºê¶ó¿ìÀú »óÅÂÀ϶§´Â ÈÙ ÀÛµ¿ ¾ÈµÇµµ·Ï ó¸® } else { OnMouseWheel(short(HIWORD(wParam))); } break; case WM_SIZE: switch (wParam) { case SIZE_RESTORED: case SIZE_MAXIMIZED: { RECT rcWnd; GetClientRect(&rcWnd); UINT uWidth=rcWnd.right-rcWnd.left; UINT uHeight=rcWnd.bottom-rcWnd.left; m_grpDevice.ResizeBackBuffer(uWidth, uHeight); } break; } if (wParam==SIZE_MINIMIZED) m_isMinimizedWnd=true; else m_isMinimizedWnd=false; OnSizeChange(short(LOWORD(lParam)), short(HIWORD(lParam))); break; case WM_EXITSIZEMOVE: { RECT rcWnd; GetClientRect(&rcWnd); UINT uWidth=rcWnd.right-rcWnd.left; UINT uHeight=rcWnd.bottom-rcWnd.left; m_grpDevice.ResizeBackBuffer(uWidth, uHeight); OnSizeChange(short(LOWORD(lParam)), short(HIWORD(lParam))); } break; case WM_SYSKEYDOWN: switch (LOWORD(wParam)) { case VK_F10: break; } break; case WM_SYSKEYUP: switch(LOWORD(wParam)) { case 18: return FALSE; break; case VK_F10: break; } break; case WM_SETCURSOR: if (IsActive()) { if (m_bCursorVisible && CURSOR_MODE_HARDWARE == m_iCursorMode) { SetCursor((HCURSOR) m_hCurrentCursor); return 0; } else { SetCursor(NULL); return 0; } } break; case WM_CLOSE: #ifdef _DEBUG PostQuitMessage(0); #else RunPressExitKey(); #endif return 0; case WM_DESTROY: return 0; default: //Tracenf("%x msg %x", timeGetTime(), uiMsg); break; } return CMSApplication::WindowProcedure(hWnd, uiMsg, wParam, lParam); }