client/UserInterface/PythonApplicationProcedure.cpp

282 lines
6.0 KiB
C++
Raw Normal View History

#include "StdAfx.h"
#include "PythonApplication.h"
#include "../eterlib/Camera.h"
#include "../CWebBrowser/CWebBrowser.h"
#include <winuser.h>
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())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD> <20><> <20>۵<EFBFBD> <20>ȵǵ<C8B5><C7B5><EFBFBD> ó<><C3B3>
}
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);
}