forked from metin2/client
1
0
Fork 0
client/UserInterface/PythonApplicationProcedure.cpp

282 lines
6.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
}