示例#1
0
LRESULT CALLBACK CHookedWindow::_s_RootWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	CHookedWindow *this_ptr = (CHookedWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
	
	RECT r = {0, 0, 0, 0};

	if (msg == WM_CLOSE && CallWindowProc(this_ptr->_stOldRootWindowProc, hWnd, msg, wParam, lParam) == 0)
	{
		this_ptr->_KillWindow();
		return 0;
	}
	else
	if (msg == WM_DESTROY)
	{
		CallWindowProc(this_ptr->_stOldRootWindowProc, hWnd, msg, wParam, lParam );
		this_ptr->_KillWindow();
		return 0;
	}
	else
	{
		switch(msg)
		{
		case WM_KILLFOCUS:
		case WM_SETFOCUS:
		case WM_KEYUP:
		case WM_KEYDOWN:
		case WM_CHAR:
		case WM_MOUSEWHEEL:
			this_ptr->_pDelMessageProc->Invoke(WinAPIMsgToEngMsg(msg, wParam, lParam));
			break;

		case WM_SIZING:
			GetClientRect(this_ptr->_hWnd, &r);
			this_ptr->_pDelMessageProc->Invoke(WinAPIMsgToEngMsg(WM_SIZING, wParam, (LPARAM)&r));
			break;
		}

		if (this_ptr->_stOldRootWindowProc)
			return CallWindowProc(this_ptr->_stOldRootWindowProc, hWnd, msg, wParam, lParam );
		else
			return DefWindowProc(hWnd, msg, wParam, lParam );
	}
}
示例#2
0
LRESULT CALLBACK CHookedWindow::_s_WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	CHookedWindow *this_ptr = (CHookedWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA);

	if (msg == WM_DESTROY)
	{
		this_ptr->_KillWindow();
		return DefWindowProc(hWnd, msg, wParam, lParam );
	}
	else
		this_ptr->_pDelMessageProc->Invoke(WinAPIMsgToEngMsg(msg, wParam, lParam));

	if(!this_ptr->_stOldWindowProc || (msg == WM_PAINT || msg == WM_SETTEXT || msg == WM_NCPAINT|| msg == WM_ERASEBKGND))
		return DefWindowProc(hWnd, msg, wParam, lParam );
	else
		return CallWindowProc(this_ptr->_stOldWindowProc, hWnd, msg, wParam, lParam);
}
示例#3
0
LRESULT CALLBACK CMainWindow::_s_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	CMainWindow *this_ptr = (CMainWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA);

	if (this_ptr)
	{
		if (message == WM_DESTROY)
			PostQuitMessage(0);

		this_ptr->_pDelMessageProc->Invoke(WinAPIMsgToEngMsg(message, wParam, lParam));

		if ((message == WM_SYSCOMMAND && (wParam == SC_SCREENSAVE || wParam == SC_MONITORPOWER)) || 
			message == WM_CLOSE)
			return 0;
	}

	return DefWindowProc(hWnd, message, wParam, lParam);
}