291 lines
8.2 KiB
C++
291 lines
8.2 KiB
C++
/**
|
|
@file winWindows.cpp
|
|
@brief
|
|
@author James
|
|
@version 1.0
|
|
@date 2017_11_28
|
|
*/
|
|
|
|
#include "winWindows.h"
|
|
#include "AppMessage.h"
|
|
#include "../JCScriptRuntime.h"
|
|
#include "WinCtrl.h"
|
|
|
|
#include <CommCtrl.h>
|
|
|
|
#pragma comment(lib,"d3d9.lib")
|
|
#pragma comment(lib,"libEGL.lib")
|
|
#pragma comment(lib,"libGLESv2.lib")
|
|
|
|
HWND g_hWnd;
|
|
extern int g_nInnerWidth;
|
|
extern int g_nInnerHeight;
|
|
|
|
namespace laya
|
|
{
|
|
/*
|
|
这个函数中不应该直接处理,应该转换一下通过事件发出去
|
|
*/
|
|
LRESULT WINAPI winWindows::WindowProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
LONG udata = GetWindowLongPtr(hWnd,GWL_USERDATA);
|
|
winWindows* pWnd = (winWindows*)udata;
|
|
LRESULT lRet = 1;
|
|
|
|
if( uMsg>=WM_CMD_BASE && uMsg<=WM_CMD_MAX )
|
|
{
|
|
JCEventEmitter::evtPtr e(new JCEventBase );
|
|
e->m_nID=winWindows::Evt_RunCmd;
|
|
e->m_nP1 = uMsg;
|
|
e->m_nP2 = wParam;
|
|
e->setDataAsInt(lParam);
|
|
pWnd->emit(e);
|
|
return 1;
|
|
}
|
|
int x = LOWORD(lParam);
|
|
int y = HIWORD(lParam);
|
|
switch (uMsg)
|
|
{
|
|
case WM_CREATE:
|
|
break;
|
|
case WM_SIZE:
|
|
{
|
|
int width = LOWORD( lParam );
|
|
int height = HIWORD( lParam );
|
|
JCEventEmitter::evtPtr e(new JCEventBase );
|
|
e->m_nID=winWindows::Evt_WndResize;
|
|
e->m_nP1=width;
|
|
e->m_nP2=height;
|
|
pWnd->emit(e);
|
|
|
|
break;
|
|
}
|
|
case WM_PAINT:
|
|
break;
|
|
case WM_DESTROY:
|
|
{
|
|
JCEventEmitter::evtPtr e(new JCEventBase );
|
|
e->m_nID=winWindows::Evt_WndClose;
|
|
pWnd->emit(e);
|
|
PostQuitMessage(0);
|
|
break;
|
|
}
|
|
case WM_KEYDOWN:
|
|
{
|
|
inputEvent e;
|
|
e.nTouchType = e.nType = E_ONKEYDOWN;
|
|
strncpy(e.type, "keydown", 256);
|
|
e.keyCode = wParam;
|
|
if (JCScriptRuntime::s_JSRT)
|
|
{
|
|
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
|
|
}
|
|
break;
|
|
}
|
|
case WM_CHAR:
|
|
break;
|
|
case WM_KEYUP:
|
|
{
|
|
inputEvent e;
|
|
e.nTouchType = e.nType = E_ONKEYUP;
|
|
strncpy(e.type, "keyup", 256);
|
|
e.keyCode = wParam;
|
|
if (JCScriptRuntime::s_JSRT)
|
|
{
|
|
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
|
|
}
|
|
break;
|
|
}
|
|
case WM_LBUTTONDOWN:
|
|
{
|
|
inputEvent e;
|
|
e.nTouchType = e.nType = E_ONMOUSEDOWN;
|
|
e.posX = x;
|
|
e.posY = y;
|
|
strncpy(e.type, "mousedown", 256);
|
|
if (JCScriptRuntime::s_JSRT)
|
|
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
|
|
break;
|
|
}
|
|
case WM_RBUTTONDOWN:
|
|
{
|
|
inputEvent e;
|
|
e.nTouchType = e.nType = E_ONRIGHTMOUSEDOWN;
|
|
e.posX = x;
|
|
e.posY = y;
|
|
strncpy(e.type, "rightmousedown", 256);
|
|
if (JCScriptRuntime::s_JSRT)
|
|
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
|
|
break;
|
|
}
|
|
case WM_LBUTTONUP:
|
|
{
|
|
inputEvent e;
|
|
e.nTouchType = e.nType = E_ONMOUSEUP;
|
|
e.posX = x;
|
|
e.posY = y;
|
|
strncpy(e.type, "mouseup", 256);
|
|
if (JCScriptRuntime::s_JSRT)
|
|
{
|
|
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
|
|
}
|
|
break;
|
|
}
|
|
case WM_RBUTTONUP:
|
|
{
|
|
inputEvent e;
|
|
e.nTouchType = e.nType = E_ONRIGHTMOUSEUP;
|
|
e.posX = x;
|
|
e.posY = y;
|
|
strncpy(e.type, "rightmouseup", 256);
|
|
if (JCScriptRuntime::s_JSRT)
|
|
{
|
|
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
|
|
}
|
|
break;
|
|
}
|
|
case WM_MOUSEMOVE:
|
|
{
|
|
inputEvent e;
|
|
e.nTouchType = e.nType = E_ONMOUSEMOVE;
|
|
strncpy(e.type, "mousemove", 256);
|
|
e.posX = x;
|
|
e.posY = y;
|
|
if (JCScriptRuntime::s_JSRT)
|
|
{
|
|
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case WM_MOUSEWHEEL:
|
|
{
|
|
inputEvent e;
|
|
e.nTouchType = e.nType = E_ONMOUSEWHEEL;
|
|
strncpy(e.type, "mousewheel", 256);
|
|
e.posX = x;
|
|
e.posY = y;
|
|
short nWheel = (short)HIWORD(wParam);
|
|
e.nWheel = nWheel;
|
|
if (JCScriptRuntime::s_JSRT)
|
|
{
|
|
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case WMU_CREATE_CTRL:
|
|
{
|
|
WinControl* winCtrl = (WinControl*)lParam;
|
|
winCtrl->Init();
|
|
break;
|
|
}
|
|
case WM_CTLCOLOREDIT:
|
|
{
|
|
HWND hwnd = (HWND)lParam;
|
|
WinControl* ctrl = WinCtrlEvtManager::Get(hwnd);
|
|
if (WinControl::IsEidt(ctrl))
|
|
{
|
|
HDC hdc = (HDC)wParam;
|
|
ctrl->OnCtrlColor(hdc);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case WM_INPUTLANGCHANGE://切换输入法的时候会触发
|
|
break;
|
|
case WM_IME_SETCONTEXT:
|
|
break;
|
|
case WM_IME_STARTCOMPOSITION://开始使用ime,要进行初始化
|
|
break;
|
|
case WM_IME_COMPOSITION://ime的消息监测,出现输入法的时候,英文输入的内容在这可以获得,中文的候选框,在NOTYFY中获得
|
|
break;
|
|
case WM_IME_ENDCOMPOSITION://结束ime。一个输入已经完成
|
|
break;
|
|
case WM_IME_NOTIFY://ime的消息处理,中文的候选框在这获得
|
|
break;
|
|
|
|
default:
|
|
lRet = DefWindowProc (hWnd, uMsg, wParam, lParam);
|
|
break;
|
|
}
|
|
return lRet;
|
|
}
|
|
winWindows::winWindows()
|
|
{
|
|
m_hWnd = 0;
|
|
m_AllListener.resize(winWindows::Evt_Num);
|
|
}
|
|
bool winWindows::create(int x, int y, int w, int h )
|
|
{
|
|
WNDCLASS wndclass = {0};
|
|
RECT windowRect;
|
|
HINSTANCE hInstance = GetModuleHandle(NULL);
|
|
wndclass.style = CS_OWNDC;
|
|
wndclass.lpfnWndProc = (WNDPROC)winWindows::WindowProc;
|
|
wndclass.hInstance = hInstance;
|
|
wndclass.hbrBackground = NULL;// (HBRUSH)GetStockObject(BLACK_BRUSH);
|
|
wndclass.lpszClassName = TEXT("opengles3.0");
|
|
|
|
//如果要多次创建窗口,则需要先执行UnReg
|
|
UnregisterClass(wndclass.lpszClassName, hInstance);
|
|
if (!RegisterClass (&wndclass) ) return FALSE;
|
|
DWORD wStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN ;//WS_POPUP | WS_BORDER | WS_SYSMENU | WS_CAPTION;
|
|
//DWORD wStyle = WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_POPUP;
|
|
g_nInnerWidth=w;
|
|
g_nInnerHeight=h;
|
|
windowRect.left = 0;
|
|
windowRect.top = 0;
|
|
windowRect.right = w;
|
|
windowRect.bottom = h;
|
|
AdjustWindowRect ( &windowRect, wStyle, FALSE );
|
|
m_hWnd = CreateWindow(
|
|
TEXT("opengles3.0"),TEXT("LAYABOX-2.0"),wStyle,0,0,
|
|
windowRect.right - windowRect.left,
|
|
windowRect.bottom - windowRect.top,
|
|
NULL,NULL,hInstance,NULL);
|
|
|
|
g_hWnd = m_hWnd;
|
|
SetWindowLongPtr ( m_hWnd, GWL_USERDATA, (LONG) (LONG_PTR) this );
|
|
|
|
|
|
|
|
if ( m_hWnd == NULL )
|
|
return false;
|
|
ShowWindow ( m_hWnd, TRUE );
|
|
return true;
|
|
}
|
|
void winWindows::show(bool b)
|
|
{
|
|
ShowWindow ( m_hWnd, b?TRUE:FALSE );
|
|
}
|
|
void winWindows::close()
|
|
{
|
|
PostMessage(m_hWnd, WM_QUIT, 0, 0);
|
|
}
|
|
void winWindows::handleMessage( UPDATEFUNC pUpdate)
|
|
{
|
|
MSG msg = { 0 };
|
|
while (true)
|
|
{
|
|
int gotMsg = (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0);
|
|
if ( gotMsg )
|
|
{
|
|
if (msg.message==WM_QUIT)
|
|
{
|
|
break;//结束
|
|
}
|
|
else
|
|
{
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
if(pUpdate)pUpdate();
|
|
}
|
|
}
|
|
}
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
//-----------------------------END FILE--------------------------------
|