Blame winpr/libwinpr/wnd/wnd.c

Packit 1fb8d4
/**
Packit 1fb8d4
 * WinPR: Windows Portable Runtime
Packit 1fb8d4
 * Window Notification System
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifdef HAVE_CONFIG_H
Packit 1fb8d4
#include "config.h"
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/crt.h>
Packit 1fb8d4
#include <winpr/collections.h>
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/wnd.h>
Packit 1fb8d4
Packit 1fb8d4
#ifndef _WIN32
Packit 1fb8d4
Packit 1fb8d4
#include "wnd.h"
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * Custom Functions
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
static wArrayList* g_WindowClasses = NULL;
Packit 1fb8d4
Packit Service 5a9772
static BOOL InitializeWindowClasses(void)
Packit 1fb8d4
{
Packit 1fb8d4
	if (g_WindowClasses)
Packit 1fb8d4
		return TRUE;
Packit 1fb8d4
Packit 1fb8d4
	g_WindowClasses = ArrayList_New(TRUE);
Packit 1fb8d4
	return g_WindowClasses != NULL;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
static WNDCLASSEXA* CloneWindowClass(CONST WNDCLASSEXA* lpwcx)
Packit 1fb8d4
{
Packit 1fb8d4
	WNDCLASSEXA* _lpwcx = NULL;
Packit 1fb8d4
Packit 1fb8d4
	_lpwcx = malloc(sizeof(WNDCLASSEXA));
Packit 1fb8d4
Packit 1fb8d4
	if (!_lpwcx)
Packit 1fb8d4
		return NULL;
Packit 1fb8d4
Packit 1fb8d4
	CopyMemory(_lpwcx, lpwcx, sizeof(WNDCLASSEXA));
Packit 1fb8d4
Packit 1fb8d4
	_lpwcx->lpszClassName = _strdup(lpwcx->lpszClassName);
Packit 1fb8d4
	_lpwcx->lpszMenuName = _strdup(lpwcx->lpszMenuName);
Packit 1fb8d4
	if (!_lpwcx->lpszClassName || !_lpwcx->lpszMenuName)
Packit 1fb8d4
	{
Packit 1fb8d4
		free((LPSTR)_lpwcx->lpszClassName);
Packit 1fb8d4
		free((LPSTR)_lpwcx->lpszMenuName);
Packit 1fb8d4
		free(_lpwcx);
Packit 1fb8d4
		return NULL;
Packit 1fb8d4
	}
Packit 1fb8d4
Packit 1fb8d4
	return _lpwcx;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
static WNDCLASSEXA* FindWindowClass(LPCSTR lpClassName)
Packit 1fb8d4
{
Packit 1fb8d4
	int index;
Packit 1fb8d4
	int count;
Packit 1fb8d4
	BOOL found = FALSE;
Packit 1fb8d4
	WNDCLASSEXA* lpwcx = NULL;
Packit 1fb8d4
Packit 1fb8d4
	ArrayList_Lock(g_WindowClasses);
Packit 1fb8d4
Packit 1fb8d4
	count = ArrayList_Count(g_WindowClasses);
Packit 1fb8d4
Packit 1fb8d4
	for (index = 0; index < count; index++)
Packit 1fb8d4
	{
Packit Service 5a9772
		lpwcx = (WNDCLASSEXA*)ArrayList_GetItem(g_WindowClasses, index);
Packit 1fb8d4
Packit 1fb8d4
		if (strcmp(lpClassName, lpwcx->lpszClassName) == 0)
Packit 1fb8d4
		{
Packit 1fb8d4
			found = TRUE;
Packit 1fb8d4
			break;
Packit 1fb8d4
		}
Packit 1fb8d4
	}
Packit 1fb8d4
Packit 1fb8d4
	ArrayList_Unlock(g_WindowClasses);
Packit 1fb8d4
Packit 1fb8d4
	return (found) ? lpwcx : NULL;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * Standard Functions
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
WORD WINAPI GetWindowWord(HWND hWnd, int nIndex)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
WORD WINAPI SetWindowWord(HWND hWnd, int nIndex, WORD wNewWord)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG WINAPI GetWindowLongA(HWND hWnd, int nIndex)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG WINAPI GetWindowLongW(HWND hWnd, int nIndex)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG WINAPI SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG WINAPI SetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG_PTR WINAPI GetWindowLongPtrA(HWND hWnd, int nIndex)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG_PTR WINAPI GetWindowLongPtrW(HWND hWnd, int nIndex)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG_PTR WINAPI SetWindowLongPtrA(HWND hWnd, int nIndex, LONG_PTR dwNewLong)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG_PTR WINAPI SetWindowLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI DestroyWindow(HWND hWnd)
Packit 1fb8d4
{
Packit 1fb8d4
	WINPR_WND* pWnd;
Packit 1fb8d4
Packit Service 5a9772
	pWnd = (WINPR_WND*)hWnd;
Packit 1fb8d4
Packit 1fb8d4
	if (!pWnd)
Packit 1fb8d4
		return FALSE;
Packit 1fb8d4
Packit 1fb8d4
	free(pWnd->lpClassName);
Packit 1fb8d4
Packit 1fb8d4
	free(pWnd->lpWindowName);
Packit 1fb8d4
Packit 1fb8d4
	free(pWnd);
Packit 1fb8d4
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
VOID WINAPI PostQuitMessage(int nExitCode)
Packit 1fb8d4
{
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
ATOM WINAPI RegisterClassA(CONST WNDCLASSA* lpWndClass)
Packit 1fb8d4
{
Packit 1fb8d4
	return 1;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
ATOM WINAPI RegisterClassW(CONST WNDCLASSW* lpWndClass)
Packit 1fb8d4
{
Packit 1fb8d4
	return 1;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
ATOM WINAPI RegisterClassExA(CONST WNDCLASSEXA* lpwcx)
Packit 1fb8d4
{
Packit 1fb8d4
	WNDCLASSEXA* _lpwcx;
Packit 1fb8d4
Packit 1fb8d4
	if (!InitializeWindowClasses())
Packit 1fb8d4
		return 0;
Packit 1fb8d4
Packit 1fb8d4
	_lpwcx = CloneWindowClass(lpwcx);
Packit 1fb8d4
Packit Service 5a9772
	return ArrayList_Add(g_WindowClasses, (void*)_lpwcx) >= 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
ATOM WINAPI RegisterClassExW(CONST WNDCLASSEXW* lpwcx)
Packit 1fb8d4
{
Packit 1fb8d4
	return 1;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI UnregisterClassA(LPCSTR lpClassName, HINSTANCE hInstance)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI UnregisterClassW(LPCWSTR lpClassName, HINSTANCE hInstance)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
HWND WINAPI CreateWindowExA(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle,
Packit Service 5a9772
                            int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu,
Packit Service 5a9772
                            HINSTANCE hInstance, LPVOID lpParam)
Packit 1fb8d4
{
Packit 1fb8d4
	HWND hWnd;
Packit 1fb8d4
	WINPR_WND* pWnd;
Packit 1fb8d4
	WNDCLASSEXA* lpwcx;
Packit 1fb8d4
Packit 1fb8d4
	InitializeWindowClasses();
Packit 1fb8d4
Packit 1fb8d4
	if (!lpClassName)
Packit 1fb8d4
		return NULL;
Packit 1fb8d4
Packit 1fb8d4
	lpwcx = FindWindowClass(lpClassName);
Packit 1fb8d4
Packit 1fb8d4
	if (!lpwcx)
Packit 1fb8d4
		return NULL;
Packit 1fb8d4
Packit Service 5a9772
	pWnd = (WINPR_WND*)calloc(1, sizeof(WINPR_WND));
Packit 1fb8d4
Packit 1fb8d4
	if (!pWnd)
Packit 1fb8d4
		return NULL;
Packit 1fb8d4
Packit Service 5a9772
	hWnd = (HWND)pWnd;
Packit 1fb8d4
Packit 1fb8d4
	pWnd->X = X;
Packit 1fb8d4
	pWnd->Y = Y;
Packit 1fb8d4
	pWnd->nWidth = nWidth;
Packit 1fb8d4
	pWnd->nHeight = nHeight;
Packit 1fb8d4
	pWnd->lpClassName = _strdup(lpClassName);
Packit 1fb8d4
	if (!pWnd->lpClassName)
Packit 1fb8d4
		goto out_fail;
Packit 1fb8d4
Packit 1fb8d4
	if (lpWindowName)
Packit 1fb8d4
	{
Packit 1fb8d4
		pWnd->lpWindowName = _strdup(lpWindowName);
Packit 1fb8d4
		if (!pWnd->lpWindowName)
Packit 1fb8d4
			goto out_fail;
Packit 1fb8d4
	}
Packit 1fb8d4
Packit 1fb8d4
	pWnd->hWndParent = hWndParent;
Packit 1fb8d4
	pWnd->hMenu = hMenu;
Packit 1fb8d4
	pWnd->hInstance = hInstance;
Packit 1fb8d4
	pWnd->lpParam = lpParam;
Packit 1fb8d4
	pWnd->lpwcx = lpwcx;
Packit 1fb8d4
Packit 1fb8d4
	return hWnd;
Packit 1fb8d4
Packit 1fb8d4
out_fail:
Packit 1fb8d4
	free(pWnd->lpClassName);
Packit 1fb8d4
	free(pWnd->lpWindowName);
Packit 1fb8d4
	free(pWnd);
Packit 1fb8d4
	return NULL;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
HWND WINAPI CreateWindowExW(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName,
Packit Service 5a9772
                            DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent,
Packit Service 5a9772
                            HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return NULL;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
HWND WINAPI FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName)
Packit 1fb8d4
{
Packit 1fb8d4
	return NULL;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
HWND WINAPI FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName)
Packit 1fb8d4
{
Packit 1fb8d4
	return NULL;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
HWND WINAPI FindWindowExA(HWND hWndParent, HWND hWndChildAfter, LPCSTR lpszClass, LPCSTR lpszWindow)
Packit 1fb8d4
{
Packit 1fb8d4
	return NULL;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
HWND WINAPI FindWindowExW(HWND hWndParent, HWND hWndChildAfter, LPCWSTR lpszClass,
Packit Service 5a9772
                          LPCWSTR lpszWindow)
Packit 1fb8d4
{
Packit 1fb8d4
	return NULL;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI GetMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI GetMessageW(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
DWORD WINAPI GetMessagePos(VOID)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LONG WINAPI GetMessageTime(VOID)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LPARAM WINAPI GetMessageExtraInfo(VOID)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LPARAM WINAPI SetMessageExtraInfo(LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI SetMessageQueue(int cMessagesMax)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LRESULT WINAPI SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	LRESULT status;
Packit 1fb8d4
	WINPR_WND* pWnd;
Packit 1fb8d4
	WNDPROC lpfnWndProc;
Packit 1fb8d4
Packit Service 5a9772
	pWnd = (WINPR_WND*)hWnd;
Packit 1fb8d4
Packit 1fb8d4
	if (!pWnd)
Packit 1fb8d4
		return 0;
Packit 1fb8d4
Packit 1fb8d4
	lpfnWndProc = pWnd->lpwcx->lpfnWndProc;
Packit 1fb8d4
Packit 1fb8d4
	if (!lpfnWndProc)
Packit 1fb8d4
		return 0;
Packit 1fb8d4
Packit 1fb8d4
	status = lpfnWndProc(hWnd, Msg, wParam, lParam);
Packit 1fb8d4
Packit 1fb8d4
	return status;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LRESULT WINAPI SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
LRESULT WINAPI SendMessageTimeoutA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT fuFlags,
Packit Service 5a9772
                                   UINT uTimeout, PDWORD_PTR lpdwResult)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
LRESULT WINAPI SendMessageTimeoutW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT fuFlags,
Packit Service 5a9772
                                   UINT uTimeout, PDWORD_PTR lpdwResult)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI SendNotifyMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI SendNotifyMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI SendMessageCallbackA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam,
Packit Service 5a9772
                                 SENDASYNCPROC lpResultCallBack, ULONG_PTR dwData)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI SendMessageCallbackW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam,
Packit Service 5a9772
                                 SENDASYNCPROC lpResultCallBack, ULONG_PTR dwData)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI TranslateMessage(CONST MSG* lpMsg)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LRESULT WINAPI DispatchMessageA(CONST MSG* lpMsg)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LRESULT WINAPI DispatchMessageW(CONST MSG* lpMsg)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
BOOL WINAPI PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax,
Packit Service 5a9772
                         UINT wRemoveMsg)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
BOOL WINAPI PeekMessageW(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax,
Packit Service 5a9772
                         UINT wRemoveMsg)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI ReplyMessage(LRESULT lResult)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
BOOL WINAPI WaitMessage(VOID)
Packit 1fb8d4
{
Packit 1fb8d4
	return TRUE;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
LRESULT WINAPI CallWindowProcA(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam,
Packit Service 5a9772
                               LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
LRESULT WINAPI CallWindowProcW(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam,
Packit Service 5a9772
                               LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LRESULT WINAPI DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
LRESULT WINAPI DefWindowProcW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Packit 1fb8d4
{
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
#endif