📄 gwme.c
字号:
/******************************************************
Copyright(c) 版权所有,1998-2005微逻辑。保留所有权利。
******************************************************/
/*****************************************************
文件说明:GWME主入口,负责窗口,图形,事件的初始化
版本号:3.0.0
开发时期:1999
作者:李林
修改记录:
******************************************************/
#include <eframe.h>
#include <bheap.h>
#include <edevice.h>
#include <eassert.h>
#include <eapisrv.h>
#include <epwin.h>
#include <gwmeobj.h>
#include <winsrv.h>
#include <gdisrv.h>
#include <touch.h>
#include "touchcal.h"
extern BOOL _InitialGdiObjMgr( void );
extern BOOL _InitialGdiIconCursorMgr( void );
extern void _DeInitialGdiIconCursorMgr( void );
extern void _DeInitialGdiObjMgr( void );
extern BOOL DeleteGdiObject( HANDLE hOwner );
extern BOOL DeleteDCObject( HANDLE hOwner );
extern void FreeInstanceCursor( HANDLE hOwner );
extern void FreeInstanceIcon( HANDLE hOwner );
extern BOOL _DeInitWindowManager( void );
extern void _DeInitialWndClassMgr( void );
extern void _DeInitialPaintRgn( void );
extern void _DeInitialRgn( void );
extern BOOL __InitialEventDriver(void);
extern BOOL _InitialRgn( void );
extern BOOL _InitiFont( void );
extern BOOL _InitScreen( void );
extern BOOL _ExitGraphic( void );
extern void _ReleaseEventDriver(void);
extern BOOL _InitStockObject( void );
extern BOOL _InitSysSetting( void );
extern BOOL _InitialGdi( void );
extern BOOL _InitialWndClassMgr( void );
extern BOOL _InitialPaintRgn( void );
extern BOOL _InitWindowManager( HINSTANCE hInst );
extern BOOL InstallMouseDevice( void );
extern BOOL _InitSysQueue( void );
extern BOOL _InitCaret( void );
extern void _DeInitialCaret( void );
extern void _DeInitialGdi( void );
extern void _DeInitSysColorBrush( void );
extern void _DeinitCalibration( void );
extern void _InitCalibration( void );
extern void InstallGwmeServer( void );
extern VOID FASTCALL _ClearProcessTimer( HANDLE hProcess );
//定义系统资源
/*
HANDLE hbmpClose; //标题栏上的关闭方框
HANDLE hbmpHelp; //标题栏上的帮助方框
HANDLE hbmpOk; //标题栏上的确认方框
HANDLE hbmpGrayClose; //标题栏上的灰关闭方框
HANDLE hbmpGrayHelp; //标题栏上的灰帮助方框
HANDLE hbmpGrayOk;//标题栏上的灰确认方框
HICON hicoSysMenu;//标题栏上的系统方框
HICON hicoGraySysMenu;//标题栏上的灰系统方框
*/
//
HANDLE hgwmeBlockHeap;//块堆
HANDLE hgwmeEvent = NULL;
HINSTANCE hgwmeInstance = NULL;
HANDLE hgwmeProcess = NULL;
//定义默认的显示面
_BITMAPDATA * lpDisplayBitmap;
HBITMAP hbmpDisplayBitmap;
//定义默认的显示驱动程序
_DISPLAYDRV * lpDrvDisplayDefault;
//定义默认的图形显示驱动界面入口-显示设备
_LPGWDI_ENTER lpGwdiDisplayEnter = NULL;
//定义默认的图形显示驱动界面入口-点设备
// pos driver , like mouse, touch...
_LPGWDI_ENTER lpGwdiPosEnter = NULL;
//定义默认的图形显示驱动界面入口-按键设备
// key driver
_LPGWDI_ENTER lpGwdiKeyEnter = NULL;
//
DWORD dwActiveTimerCount; //最新的输入事件时间,被KEY Event and Mouse Event update
// **************************************************
// 声明:static BOOL InitGwmeBlockHeap( void )
// 参数:
// 无
// 返回值:
// 进入成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 初始化块堆
// 引用:
//
// ************************************************
#define DEBUG_InitGwmeBlockHeap 0
static BOOL InitGwmeBlockHeap( void )
{
UINT blockSize[] = { sizeof( _REGCLASS ), sizeof(_PROCESS_CLASS),
sizeof(_WINDATA), sizeof(_MSGQUEUE), sizeof(GWEDATA), sizeof(_RECTNODE),
sizeof(_RGNDATA), sizeof(_BITMAPDATA), sizeof(_BITMAP_DIB), sizeof(_FONT),
sizeof(_ICONDATA), sizeof(_BRUSHDATA), sizeof(_PENDATA), sizeof(_LINEDATA),
sizeof(_PIXELDATA), sizeof(_BLKBITBLT), sizeof(_DISPLAYDRV), sizeof(_FONTDRV),
128, 256, 512, 1024, 1024+128, 1024+256, 1024+512, 2048, 4096 // for 可变的字串和位图准备
};
hgwmeBlockHeap = BlockHeap_Create( blockSize, sizeof( blockSize ) / sizeof( UINT ) );
if( hgwmeBlockHeap == NULL )
{
ERRORMSG( DEBUG_InitGwmeBlockHeap, ( "error in InitGwmeBlockHeap: __Init GWME BlockHeap failure!.\r\n" ) );
return FALSE;
}
return TRUE;
}
// **************************************************
// 声明:static BOOL InstallGwmeObject( HINSTANCE hInst )
// 参数:
// IN hInst - 实例句柄
// 返回值:
// 进入成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 初始化图形对象管理器
// 引用:
//
// ************************************************
#define DEBUG_InstallGwmeObject 0
static BOOL InstallGwmeObject( HINSTANCE hInst )
{
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitialGdiObjMgr.\r\n" ) );
if( _InitialGdiObjMgr() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitialGdiIconCursorMgr.\r\n" ) );
if( _InitialGdiIconCursorMgr() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitStockObject\r\n" ) );
if( _InitStockObject() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitialGdi\r\n" ) );
if( _InitialGdi() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitSysSetting\r\n" ) );
if( _InitSysSetting() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "__InitialRgn\r\n" ) );
if( _InitialRgn() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitialPaintRgn\r\n" ) );
if( _InitialPaintRgn() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitialWndClassMgr\r\n" ) );
if( _InitialWndClassMgr() == FALSE )
return FALSE;
//if( _InitialSystemWindowClass(hInst) == FALSE )
//return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitWindowManager.\r\n" ) );
if( _InitWindowManager( hInst ) == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitSysQueue.\r\n" ) );
if( _InitSysQueue() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "_InitCaret.\r\n" ) );
if( _InitCaret() == FALSE )
return FALSE;
DEBUGMSG( DEBUG_InstallGwmeObject, ( "InstallGWMEObject Finish\r\n" ) );
return TRUE;
}
// **************************************************
// 声明:static BOOL InstallGwmeDevice( HINSTANCE hInst )
// 参数:
// IN hInst - 实例句柄
// 返回值:
// 进入成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 初始化图形设备界面
// 引用:
//
// ************************************************
extern BOOL CALLBACK HandlePosEvent( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, DWORD dwExtraInfo );
#define DEBUG_InstallGwmeDevice 0
static BOOL InstallGwmeDevice( HINSTANCE hInst )
{
_InitDefaultGwdi(); //调用arch层的初始化函数
if( lpGwdiDisplayEnter ) //是否有默认的显示设备 ?
{ //是
DEBUGMSG( DEBUG_InstallGwmeDevice, ( "Init Display...\r\n" ) );
if( lpGwdiDisplayEnter( GWDI_CREATE, 0, 0 ) ) //初始化成功?
{ //是
//得到默认的显示面
lpGwdiDisplayEnter( GWDI_GET_BITMAP_PTR, 0, &lpDisplayBitmap );
if( lpDisplayBitmap )
hbmpDisplayBitmap = PTR_TO_HANDLE(lpDisplayBitmap);
else
hbmpDisplayBitmap = NULL;
//得到默认的显示驱动程序
lpGwdiDisplayEnter( GWDI_GET_DISPLAY_PTR, 0, &lpDrvDisplayDefault );
}
else
return FALSE;
}
if( lpGwdiPosEnter ) //是否有默认的点定位设备 ?
{ //有
DEBUGMSG( DEBUG_InstallGwmeDevice, ("Init Pos device...\r\n" ) );
if( !lpGwdiPosEnter( GWDI_CREATE, 0, (LPVOID)HandlePosEvent ) )
return FALSE;
}
if( lpGwdiKeyEnter ) //是否有默认的键盘设备 ?
{ //是
DEBUGMSG( DEBUG_InstallGwmeDevice, ( "Init key device...\r\n" ) );
if( !lpGwdiKeyEnter( GWDI_CREATE, 0, 0 ) )
return FALSE;
}
return TRUE;
}
// **************************************************
// 声明:BOOL OpenGwmeDevice( void )
// 参数:
// 无
// 返回值:
// 进入成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 打开图形设备
// 引用:
//
// ************************************************
#define DEBUG_OpenGwmeDevice 0
BOOL OpenGwmeDevice( void )
{
DEBUGMSG( DEBUG_OpenGwmeDevice, ( "OpenGwmeDevice entry.\r\n" ) );
DEBUGMSG( DEBUG_OpenGwmeDevice, ( "OpenGwmeDevice open dislplay device.\r\n" ) );
if( lpGwdiDisplayEnter ) //是否有默认的点定位设备 ?
lpGwdiDisplayEnter( GWDI_OPEN, 0, 0 ); // 打开
DEBUGMSG( DEBUG_OpenGwmeDevice, ( "OpenGwmeDevice open pos device.\r\n" ) );
if( lpGwdiPosEnter ) //是否有默认的点定位设备 ?
lpGwdiPosEnter( GWDI_OPEN, 0, 0 );
DEBUGMSG( DEBUG_OpenGwmeDevice, ( "OpenGwmeDevice open key device.\r\n" ) );
if( lpGwdiKeyEnter ) //是否有默认的键盘设备 ?
lpGwdiKeyEnter( GWDI_OPEN, 0, 0 );//打开
DEBUGMSG( DEBUG_OpenGwmeDevice, ( "OpenGwmeDevice leave.\r\n" ) );
return TRUE;
}
// **************************************************
// 声明:static void ReleaseGwme( void )
// 参数:
// 无
// 返回值:
// 无
// 功能描述:
// 卸下gwme
// 引用:
//
// ************************************************
static void ReleaseGwme( void )
{
_DeinitCalibration();
_DeInitialCaret();
_DeInitialGdi();
_DeInitSysColorBrush();
_DeInitialRgn();
_DeInitialPaintRgn();
_DeInitialWndClassMgr();
_DeInitWindowManager();
if( lpGwdiDisplayEnter )
{
lpGwdiDisplayEnter( GWDI_CLOSE, 0, 0 );
lpGwdiDisplayEnter( GWDI_DESTROY, 0, 0 );
}
if( lpGwdiPosEnter )
{
lpGwdiPosEnter( GWDI_CLOSE, 0, 0 );
lpGwdiPosEnter( GWDI_DESTROY, 0, 0 );
}
if( lpGwdiKeyEnter )
{
lpGwdiKeyEnter( GWDI_CLOSE, 0, 0 );
lpGwdiKeyEnter( GWDI_DESTROY, 0, 0 );
}
_DeInitialGdiIconCursorMgr();
_DeInitialGdiObjMgr();
}
// **************************************************
// 声明:void WINAPI WinSys_CloseObject( HANDLE hProcess )
// 参数:
// IN hProcess - 进程句柄
// 返回值:
// 无
// 功能描述:
// 释放所有属于进程hProcess的资源
// 引用:
//
// ************************************************
void WINAPI WinSys_CloseObject( HANDLE hProcess )
{
if( !API_IsReady( API_GWE ) )
return;
DeleteDCObject( hProcess );
FreeInstanceIcon( hProcess );
FreeInstanceCursor( hProcess );
DeleteGdiObject( hProcess );
//FreeInstanceMenu( hProcess );
}
static HWND hWndCalibrate = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -