open source
This commit is contained in:
@@ -0,0 +1,291 @@
|
||||
/**
|
||||
@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--------------------------------
|
||||
Reference in New Issue
Block a user