mirror of
https://github.com/reactos/reactos.git
synced 2025-01-04 21:38:43 +00:00
started an interface to emulate the skygi windowing but actually use win32 apis
svn path=/trunk/; revision=10508
This commit is contained in:
parent
81ace77431
commit
a7d6dcd7c1
4 changed files with 226 additions and 77 deletions
|
@ -191,7 +191,7 @@ typedef struct s_window
|
||||||
unsigned int width;
|
unsigned int width;
|
||||||
unsigned int orgx;
|
unsigned int orgx;
|
||||||
unsigned int orgy;
|
unsigned int orgy;
|
||||||
unsigned long (*win_func)(HANDLE win, s_gi_msg *m);
|
unsigned long (__cdecl *win_func)(HANDLE win, s_gi_msg *m);
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
|
|
||||||
struct s_window *parent;
|
struct s_window *parent;
|
||||||
|
@ -211,10 +211,10 @@ typedef struct s_window
|
||||||
typedef struct sCreateApplication
|
typedef struct sCreateApplication
|
||||||
{
|
{
|
||||||
unsigned char ucApplicationName[255];
|
unsigned char ucApplicationName[255];
|
||||||
unsigned int uiX;
|
unsigned int uiX;
|
||||||
unsigned int uiY;
|
unsigned int uiY;
|
||||||
unsigned int uiWidth;
|
unsigned int uiWidth;
|
||||||
unsigned int uiHeight;
|
unsigned int uiHeight;
|
||||||
|
|
||||||
void *fwndClient;
|
void *fwndClient;
|
||||||
unsigned int uiStyleApplication;
|
unsigned int uiStyleApplication;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $Id: Makefile,v 1.1 2004/08/12 02:50:35 weiden Exp $
|
# $Id: Makefile,v 1.2 2004/08/12 19:27:12 weiden Exp $
|
||||||
|
|
||||||
PATH_TO_TOP = ../../..
|
PATH_TO_TOP = ../../..
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ TARGET_CFLAGS = \
|
||||||
|
|
||||||
TARGET_LFLAGS = -nostartfiles -nostdlib
|
TARGET_LFLAGS = -nostartfiles -nostdlib
|
||||||
|
|
||||||
TARGET_SDKLIBS = ntdll.a kernel32.a
|
TARGET_SDKLIBS = ntdll.a kernel32.a user32.a
|
||||||
|
|
||||||
TARGET_ENTRY = 0x00000000
|
TARGET_ENTRY = 0x00000000
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: libskygi.c,v 1.1 2004/08/12 02:50:35 weiden Exp $
|
/* $Id: libskygi.c,v 1.2 2004/08/12 19:27:12 weiden Exp $
|
||||||
*
|
*
|
||||||
* PROJECT: SkyOS GI library
|
* PROJECT: SkyOS GI library
|
||||||
* FILE: lib/libskygi/libskygi.c
|
* FILE: lib/libskygi/libskygi.c
|
||||||
|
@ -30,5 +30,222 @@
|
||||||
#include "libskygi.h"
|
#include "libskygi.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
s_window Window;
|
||||||
|
MSG LastMsg;
|
||||||
|
HWND hWnd;
|
||||||
|
s_gi_msg DispatchMsg;
|
||||||
|
} SKY_WINDOW, *PSKY_WINDOW;
|
||||||
|
|
||||||
|
static ATOM SkyClassAtom;
|
||||||
|
static BOOL SkyClassRegistered = FALSE;
|
||||||
|
|
||||||
|
LRESULT CALLBACK
|
||||||
|
SkyWndDefaultWin32Proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
PSKY_WINDOW skw = (PSKY_WINDOW)GetWindowLong(hWnd, GWL_USERDATA);
|
||||||
|
|
||||||
|
if(skw != NULL)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_CLOSE:
|
||||||
|
PostQuitMessage(0);
|
||||||
|
break;
|
||||||
|
case WM_NCDESTROY:
|
||||||
|
/* free the SKY_WINDOW structure */
|
||||||
|
HeapFree(GetProcessHeap(), 0, skw);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
ATOM
|
||||||
|
SkyWndRegisterClass(void)
|
||||||
|
{
|
||||||
|
WNDCLASS wc;
|
||||||
|
|
||||||
|
wc.lpszClassName = "ROSkyWindow";
|
||||||
|
wc.lpfnWndProc = SkyWndDefaultWin32Proc;
|
||||||
|
wc.style = CS_VREDRAW | CS_HREDRAW;
|
||||||
|
wc.hInstance = GetModuleHandle(NULL);
|
||||||
|
wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION);
|
||||||
|
wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
|
||||||
|
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
|
||||||
|
wc.lpszMenuName = NULL;
|
||||||
|
wc.cbClsExtra = 0;
|
||||||
|
wc.cbWndExtra = 0;
|
||||||
|
|
||||||
|
return RegisterClass(&wc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
s_window* __cdecl
|
||||||
|
GI_create_app(app_para *p)
|
||||||
|
{
|
||||||
|
PSKY_WINDOW skw;
|
||||||
|
|
||||||
|
DBG("GI_create_app(0x%x)\n", p);
|
||||||
|
|
||||||
|
/* FIXME - lock */
|
||||||
|
if(!SkyClassRegistered)
|
||||||
|
{
|
||||||
|
SkyClassAtom = SkyWndRegisterClass();
|
||||||
|
SkyClassRegistered = SkyClassAtom != 0;
|
||||||
|
|
||||||
|
if(!SkyClassRegistered)
|
||||||
|
{
|
||||||
|
DBG("Unable to register the ROSkyWindow class\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* FIXME - unlock */
|
||||||
|
|
||||||
|
skw = (PSKY_WINDOW)HeapAlloc(GetProcessHeap(),
|
||||||
|
HEAP_ZERO_MEMORY,
|
||||||
|
sizeof(SKY_WINDOW));
|
||||||
|
if(skw == NULL)
|
||||||
|
{
|
||||||
|
DBG("Not enough memory to allocate a SKY_WINDOW structure!\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
skw->hWnd = CreateWindow("ROSkyWindow",
|
||||||
|
(p->cpName[0] != '\0' ? (char*)p->cpName : ""),
|
||||||
|
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,
|
||||||
|
p->ulX,
|
||||||
|
p->ulY,
|
||||||
|
p->ulWidth,
|
||||||
|
p->ulHeight,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
GetModuleHandle(NULL),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if(skw->hWnd == NULL)
|
||||||
|
{
|
||||||
|
DBG("CreateWindow() failed!\n");
|
||||||
|
HeapFree(GetProcessHeap(), 0, skw);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
skw->Window.win_func = p->win_func;
|
||||||
|
/* FIXME - fill the window structure */
|
||||||
|
|
||||||
|
/* save the pointer to the structure so we can access it later when dispatching
|
||||||
|
the win32 messages so we know which sky window it is and dispatch the right
|
||||||
|
messages */
|
||||||
|
SetWindowLong(skw->hWnd, GWL_USERDATA, (LONG)skw);
|
||||||
|
|
||||||
|
DBG("Created Win32 window: 0x%x\n", skw->hWnd);
|
||||||
|
|
||||||
|
return &skw->Window;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
int __cdecl
|
||||||
|
GI_destroy_window(s_window *win)
|
||||||
|
{
|
||||||
|
PSKY_WINDOW skw = (PSKY_WINDOW)win;
|
||||||
|
|
||||||
|
DBG("GI_destroy_window(0x%x)\n", win);
|
||||||
|
|
||||||
|
return (int)DestroyWindow(skw->hWnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
unsigned int __cdecl
|
||||||
|
GI_wait_message(s_gi_msg *m,
|
||||||
|
s_window* w)
|
||||||
|
{
|
||||||
|
MSG Msg;
|
||||||
|
BOOL Ret;
|
||||||
|
HWND hwndFilter;
|
||||||
|
PSKY_WINDOW msgwnd, filterwnd;
|
||||||
|
|
||||||
|
DBG("GI_wait_message(0x%x, 0x%x)\n", m, w);
|
||||||
|
|
||||||
|
filterwnd = (w != NULL ? (PSKY_WINDOW)w : NULL);
|
||||||
|
|
||||||
|
hwndFilter = (w != NULL ? filterwnd->hWnd : NULL);
|
||||||
|
Ret = GetMessage(&Msg, hwndFilter, 0, 0);
|
||||||
|
if(Ret)
|
||||||
|
{
|
||||||
|
if(Msg.hwnd != NULL)
|
||||||
|
{
|
||||||
|
msgwnd = (PSKY_WINDOW)GetWindowLong(Msg.hwnd, GWL_USERDATA);
|
||||||
|
msgwnd->LastMsg = Msg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msgwnd = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlZeroMemory(m, sizeof(s_gi_msg));
|
||||||
|
m->win = (msgwnd != NULL ? &msgwnd->Window : NULL);
|
||||||
|
/* FIXME - fill in the other messags */
|
||||||
|
|
||||||
|
return (int)Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
int __cdecl
|
||||||
|
GI_dispatch_message(s_window *win,
|
||||||
|
s_gi_msg *m)
|
||||||
|
{
|
||||||
|
PSKY_WINDOW skywnd = (PSKY_WINDOW)win;
|
||||||
|
DBG("GI_dispatch_message(0x%x, 0x%x)\n", win, m);
|
||||||
|
|
||||||
|
skywnd->DispatchMsg = *m;
|
||||||
|
DispatchMessage(&skywnd->LastMsg);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
HRESULT __cdecl
|
||||||
|
GI_ShowApplicationWindow(s_window *win)
|
||||||
|
{
|
||||||
|
PSKY_WINDOW skywnd = (PSKY_WINDOW)win;
|
||||||
|
DBG("GI_ShowApplicationWindow(0x%x)\n", win);
|
||||||
|
|
||||||
|
DBG("->0x%x\n", skywnd->hWnd);
|
||||||
|
ShowWindow(skywnd->hWnd, SW_SHOW);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
sCreateApplication* __cdecl
|
||||||
|
GI_CreateApplicationStruct(void)
|
||||||
|
{
|
||||||
|
sCreateApplication *app;
|
||||||
|
|
||||||
|
app = (sCreateApplication*)HeapAlloc(GetProcessHeap(),
|
||||||
|
HEAP_ZERO_MEMORY,
|
||||||
|
sizeof(sCreateApplication));
|
||||||
|
STUB("GI_CreateApplicationStruct() returns 0x%x (allocated structure on the heap)!\n", app);
|
||||||
|
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: stubs.c,v 1.2 2004/08/12 15:41:36 weiden Exp $
|
/* $Id: stubs.c,v 1.3 2004/08/12 19:27:12 weiden Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: SkyOS GI library
|
* PROJECT: SkyOS GI library
|
||||||
|
@ -116,17 +116,6 @@ GC_set_bg_color(GC *gc,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
HRESULT __cdecl
|
|
||||||
GI_ShowApplicationWindow(HANDLE hWnd)
|
|
||||||
{
|
|
||||||
STUB("GI_ShowApplicationWindow(0x%x) returns 0!\n", hWnd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -163,17 +152,6 @@ GI_create_DDB_from_DIB(DIB *dib)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
HANDLE __cdecl
|
|
||||||
GI_create_app(app_para *p)
|
|
||||||
{
|
|
||||||
STUB("GI_create_app(0x%x) returns NULL!\n", p);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -199,29 +177,6 @@ GI_create_menu_item(unsigned char *text,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
int __cdecl
|
|
||||||
GI_destroy_window(s_window *win)
|
|
||||||
{
|
|
||||||
STUB("GI_destroy_window(0x%x) returns 0!\n", win);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
int __cdecl
|
|
||||||
GI_dispatch_message(s_window *win,
|
|
||||||
s_gi_msg *m)
|
|
||||||
{
|
|
||||||
STUB("GI_dispatch_message(0x%x, 0x%x) returns 0!\n", win, m);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -280,18 +235,6 @@ GI_set_high_timer(HANDLE w,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
unsigned int __cdecl
|
|
||||||
GI_wait_message(s_gi_msg *m,
|
|
||||||
s_window* w)
|
|
||||||
{
|
|
||||||
STUB("GI_wait_message(0x%x, 0x%x) returns 0!\n", m, w);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -368,17 +311,6 @@ GC_set_font_param(GC *gc,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
sCreateApplication* __cdecl
|
|
||||||
GI_CreateApplicationStruct(void)
|
|
||||||
{
|
|
||||||
STUB("GI_CreateApplicationStruct() returns NULL!\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue