|
|
@ -479,10 +479,22 @@ void DebugMsgF(const char* format, ...); |
|
|
|
|
|
|
|
|
|
|
|
// Handles all the windows messages we might receive
|
|
|
|
// Handles all the windows messages we might receive
|
|
|
|
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
{
|
|
|
|
{ |
|
|
|
static bool gDragging = false; |
|
|
|
static bool gDragging = false; |
|
|
|
static UInt8 mouse_down = 0; |
|
|
|
static UInt8 mouse_down = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Messages we registered for manually (no const value)
|
|
|
|
|
|
|
|
if (message == s_WmTaskbarList) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// Grab the Windows 7 taskbar list stuff
|
|
|
|
|
|
|
|
if (gTaskbarList) |
|
|
|
|
|
|
|
gTaskbarList->Release(); |
|
|
|
|
|
|
|
HRESULT result = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&gTaskbarList); |
|
|
|
|
|
|
|
if (FAILED(result)) |
|
|
|
|
|
|
|
gTaskbarList = nil; |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Handle messages
|
|
|
|
// Handle messages
|
|
|
|
switch (message) {
|
|
|
|
switch (message) {
|
|
|
|
case WM_LBUTTONDOWN: |
|
|
|
case WM_LBUTTONDOWN: |
|
|
@ -505,7 +517,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
if (gClient->WindowActive() && gClient->GetInputManager()) |
|
|
|
if (gClient->WindowActive() && gClient->GetInputManager()) |
|
|
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); |
|
|
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); |
|
|
|
} |
|
|
|
} |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
case WM_LBUTTONUP: |
|
|
|
case WM_LBUTTONUP: |
|
|
|
case WM_RBUTTONUP: |
|
|
|
case WM_RBUTTONUP: |
|
|
|
case WM_MBUTTONUP: |
|
|
|
case WM_MBUTTONUP: |
|
|
@ -517,19 +529,19 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
case WM_KEYUP: |
|
|
|
case WM_KEYUP: |
|
|
|
if (gClient && gClient->WindowActive() && gClient->GetInputManager()) |
|
|
|
if (gClient && gClient->WindowActive() && gClient->GetInputManager()) |
|
|
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); |
|
|
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case WM_MOUSEMOVE: |
|
|
|
case WM_MOUSEMOVE: |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (gClient && gClient->GetInputManager()) |
|
|
|
if (gClient && gClient->GetInputManager()) |
|
|
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); |
|
|
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); |
|
|
|
} |
|
|
|
} |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
#if 0 |
|
|
|
#if 0 |
|
|
|
case WM_KILLFOCUS: |
|
|
|
case WM_KILLFOCUS: |
|
|
|
SetForegroundWindow(hWnd); |
|
|
|
SetForegroundWindow(hWnd); |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
case WM_SYSKEYUP: |
|
|
|
case WM_SYSKEYUP: |
|
|
@ -541,25 +553,25 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
} |
|
|
|
} |
|
|
|
//DefWindowProc(hWnd, message, wParam, lParam);
|
|
|
|
//DefWindowProc(hWnd, message, wParam, lParam);
|
|
|
|
} |
|
|
|
} |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case WM_SYSCOMMAND: |
|
|
|
case WM_SYSCOMMAND: |
|
|
|
switch (wParam) { |
|
|
|
switch (wParam) { |
|
|
|
// Trap ALT so it doesn't pause the app
|
|
|
|
// Trap ALT so it doesn't pause the app
|
|
|
|
case SC_KEYMENU : |
|
|
|
case SC_KEYMENU : |
|
|
|
//// disable screensavers and monitor power downs too.
|
|
|
|
//// disable screensavers and monitor power downs too.
|
|
|
|
case SC_SCREENSAVE: |
|
|
|
case SC_SCREENSAVE: |
|
|
|
case SC_MONITORPOWER: |
|
|
|
case SC_MONITORPOWER: |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
case SC_CLOSE : |
|
|
|
case SC_CLOSE : |
|
|
|
// kill game if window is closed
|
|
|
|
// kill game if window is closed
|
|
|
|
gClient->SetDone(TRUE); |
|
|
|
gClient->SetDone(TRUE); |
|
|
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance()) |
|
|
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance()) |
|
|
|
mgr->QueueDisableNet(false, nil); |
|
|
|
mgr->QueueDisableNet(false, nil); |
|
|
|
DestroyWindow(gClient->GetWindowHandle()); |
|
|
|
DestroyWindow(gClient->GetWindowHandle()); |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case WM_SETCURSOR: |
|
|
|
case WM_SETCURSOR: |
|
|
|
{ |
|
|
|
{ |
|
|
@ -583,9 +595,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case WM_ACTIVATE: |
|
|
|
case WM_ACTIVATE: |
|
|
|
{ |
|
|
|
{ |
|
|
|
bool active = (LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE); |
|
|
|
bool active = (LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE); |
|
|
|
bool minimized = (HIWORD(wParam) != 0); |
|
|
|
bool minimized = (HIWORD(wParam) != 0); |
|
|
@ -603,7 +615,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
gPendingActivateFlag = active; |
|
|
|
gPendingActivateFlag = active; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
// Let go of the mouse if the window is being moved.
|
|
|
|
// Let go of the mouse if the window is being moved.
|
|
|
|
case WM_ENTERSIZEMOVE: |
|
|
|
case WM_ENTERSIZEMOVE: |
|
|
@ -611,7 +623,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
gDragging = true; |
|
|
|
gDragging = true; |
|
|
|
if( gClient ) |
|
|
|
if( gClient ) |
|
|
|
gClient->WindowActivate(false); |
|
|
|
gClient->WindowActivate(false); |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
// Redo the mouse capture if the window gets moved
|
|
|
|
// Redo the mouse capture if the window gets moved
|
|
|
|
case WM_EXITSIZEMOVE: |
|
|
|
case WM_EXITSIZEMOVE: |
|
|
@ -619,7 +631,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
gDragging = false; |
|
|
|
gDragging = false; |
|
|
|
if( gClient ) |
|
|
|
if( gClient ) |
|
|
|
gClient->WindowActivate(true); |
|
|
|
gClient->WindowActivate(true); |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
// Redo the mouse capture if the window gets moved (special case for Colin
|
|
|
|
// Redo the mouse capture if the window gets moved (special case for Colin
|
|
|
|
// and his cool program that bumps windows out from under the taskbar)
|
|
|
|
// and his cool program that bumps windows out from under the taskbar)
|
|
|
@ -631,7 +643,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
DebugMsgF("Got WM_MOVE, but ignoring"); |
|
|
|
DebugMsgF("Got WM_MOVE, but ignoring"); |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
/// Resize the window
|
|
|
|
/// Resize the window
|
|
|
|
// (we do WM_SIZING here instead of WM_SIZE because, for some reason, WM_SIZE is
|
|
|
|
// (we do WM_SIZING here instead of WM_SIZE because, for some reason, WM_SIZE is
|
|
|
@ -646,7 +658,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
::GetClientRect(hWnd, &r); |
|
|
|
::GetClientRect(hWnd, &r); |
|
|
|
gClient->GetPipeline()->Resize(r.right - r.left, r.bottom - r.top); |
|
|
|
gClient->GetPipeline()->Resize(r.right - r.left, r.bottom - r.top); |
|
|
|
} |
|
|
|
} |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case WM_SIZE: |
|
|
|
case WM_SIZE: |
|
|
|
// Let go of the mouse if the window is being minimized
|
|
|
|
// Let go of the mouse if the window is being minimized
|
|
|
@ -663,38 +675,23 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
|
|
if (gClient) |
|
|
|
if (gClient) |
|
|
|
gClient->WindowActivate(true); |
|
|
|
gClient->WindowActivate(true); |
|
|
|
} |
|
|
|
} |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case WM_CLOSE: |
|
|
|
case WM_CLOSE: |
|
|
|
gClient->SetDone(TRUE); |
|
|
|
gClient->SetDone(TRUE); |
|
|
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance()) |
|
|
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance()) |
|
|
|
mgr->QueueDisableNet(false, nil); |
|
|
|
mgr->QueueDisableNet(false, nil); |
|
|
|
DestroyWindow(gClient->GetWindowHandle()); |
|
|
|
DestroyWindow(gClient->GetWindowHandle()); |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
case WM_DESTROY: |
|
|
|
case WM_DESTROY: |
|
|
|
gClient->SetDone(TRUE); |
|
|
|
gClient->SetDone(TRUE); |
|
|
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance()) |
|
|
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance()) |
|
|
|
mgr->QueueDisableNet(false, nil); |
|
|
|
mgr->QueueDisableNet(false, nil); |
|
|
|
PostQuitMessage(0); |
|
|
|
PostQuitMessage(0); |
|
|
|
return TRUE; |
|
|
|
break; |
|
|
|
case WM_CREATE: |
|
|
|
|
|
|
|
// Create renderer
|
|
|
|
|
|
|
|
return TRUE; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Messages we registered for manually (no const value)
|
|
|
|
return DefWindowProc(hWnd, message, wParam, lParam); |
|
|
|
if (message == s_WmTaskbarList) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// Grab the Windows 7 taskbar list stuff
|
|
|
|
|
|
|
|
if (gTaskbarList) |
|
|
|
|
|
|
|
gTaskbarList->Release(); |
|
|
|
|
|
|
|
HRESULT result = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&gTaskbarList); |
|
|
|
|
|
|
|
if (FAILED(result)) |
|
|
|
|
|
|
|
gTaskbarList = nil; |
|
|
|
|
|
|
|
return TRUE; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
return DefWindowProc(hWnd, message, wParam, lParam); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PumpMessageQueueProc( void ) |
|
|
|
void PumpMessageQueueProc( void ) |
|
|
|