📄 winmain.cpp
字号:
//------------------------------------------------------------------------------
//
// Copyright (C) 2003 MagicEyes Digital Co., Ltd All Rights Reserved
// MagicEyes Digital Co. Proprietary & Confidential
//
// MAGICEYES INFORMS THAT THIS CODE AND INFORMATION IS PROVIDED "AS IS" BASE AND
// WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
//
// Module :
// File : WinMain.cpp
// Description:
// Author : Gamza(nik@mesdigital.com)
// Export :
// History :
// 2007/11/20 Gamza first implementation
//------------------------------------------------------------------------------
#pragma warning(push,3)
#include <windows.h>
#pragma warning(pop)
#pragma warning(disable:4514)
#include "miscellaneousness.h"
#include "mes_ui.h"
#include "GLES/gl.h"
#include "GLES/egl.h"
#include "mes_launcher_utils.h"
#include <altcecrt.h>
#include "system_pollux.h"
extern LRESULT WINAPI MainMessageProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
//-----------------------------------------------------------------------------
//
// WinMain()
//
//-----------------------------------------------------------------------------
INT WinMain( HINSTANCE /*hInst*/, HINSTANCE, LPTSTR lpCmdLine, INT /*nparam*/ )
{
// prevent application duplicating
if( IsThisApplicationDuplicated() ) { return 0; }
// Create the application's window
WNDCLASS wc = { CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, MainMessageProc,
0,0, GetModuleHandle(NULL),NULL, LoadCursor( NULL,IDC_ARROW ),
(HBRUSH)CreateSolidBrush( RGB(0,0,0) ), NULL,
_T("MesApplicationLauncher") };
RegisterClass( &wc );
HWND hwnd = CreateWindow( wc.lpszClassName, _T("MesApplicationLauncher window"),
WS_VISIBLE | WS_POPUP,
//(WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_VISIBLE|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX),
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, wc.hInstance, NULL );
if( ! hwnd ) { return 0; }
ShowWindow( hwnd, SW_SHOW );//WS_VISIBLE | WS_POPUP
// Message loop
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
SignalStarted(_wtol(lpCmdLine));
while( msg.message!=WM_QUIT )
{
GetMessage( &msg, NULL, 0U, 0U );
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return 0;
}
//-----------------------------------------------------------------------------
//
// Local
//
//-----------------------------------------------------------------------------
namespace
{
//-------------------------------------------------------------------------
// FSM
//-------------------------------------------------------------------------
MESUISTATE g_CurrentState = MESUISTATE_MENU;
MESUISTATE MessageProc_MENU ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
MESUISTATE MessageProc_WAITAPP ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
MESUISTATE MessageProc_APP ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
MESUISTATE MessageProc_USBSTORAGE ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
MESUISTATE MessageProc_UNLOCKQUERY ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
MESUISTATE MessageProc_POWERDOWNQUERY( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
//-------------------------------------------------------------------------
//
//-------------------------------------------------------------------------
int g_CurrentApp = -1;
MESUISTATE g_PowerDownQueryState = MESUISTATE_MENU;
HANDLE g_VolumeDisplayTimeOutMessage = 0;
//-------------------------------------------------------------------------
// Local events
//-------------------------------------------------------------------------
enum LOCALEVENT {
LOCALEVENT_APPACTIVATE = SYSTEMEVENT_END,
LOCALEVENT_APPEXIT ,
LOCALEVENT_TIMEOUT_VOLUMEOSD ,
LOCALEVENT_TIMEOUT_BATTERYCHECK ,
};
#define ANIMATION_INTERVAL 25//13 // ms
//-------------------------------------------------------------------------
// for GL
//-------------------------------------------------------------------------
EGLDisplay glesDisplay; // EGL display
EGLSurface glesSurface; // EGL rendering surface
EGLContext glesContext; // EGL rendering context
HWND g_hWnd=0; // A handle to the window we will create
HDC g_hDC ; // A handle to the device context of the window. Needed to
bool InitOpenGLES ( HWND hWnd );
void CloseOpenGLES( void );
void TaskBar_OnTop( BOOL bOnTop );
};
//-----------------------------------------------------------------------------
//
//
//
//-----------------------------------------------------------------------------
LRESULT WINAPI MainMessageProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
static BOOL bCreateWin = FALSE;
switch( Msg )
{
case WM_CREATE:
{;
TaskBar_OnTop( FALSE );
MoveWindow( hWnd, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), FALSE );
InitOpenGLES ( hWnd );
MESUI_LoadSkin( "skin\\dice_800x480", "menuscript_cn0.scr" );
MESUI_InitializeGLState();
SetTimer( hWnd, 1, ANIMATION_INTERVAL, NULL ); // run animation timer
MESUI_ChangeScenePowerOn();
bCreateWin = TRUE;
}
break;
case WM_DESTROY:
{
HWND hDesk = GetDesktopWindow();
SetForegroundWindow( hDesk );
KillTimer( hWnd, 1 );
MESUI_UnloadSkin();
CloseOpenGLES();
//TaskBar_OnTop( TRUE );
PostQuitMessage( 0 );
}
return 0;
case MESUIMSG_EXIT: // from MESUI_MessageProc(...)
DestroyWindow( hWnd );
return 0;
}
MESUISTATE nextstate = g_CurrentState;
switch( g_CurrentState )
{
case MESUISTATE_MENU :
{
nextstate = MessageProc_MENU ( hWnd, Msg, wParam, lParam );
if(bCreateWin)
{
MESUI_MessageProc( MESUISTATE_MENU, hWnd, Msg, wParam, lParam );
}
break;
}
case MESUISTATE_WAITAPP : nextstate = MessageProc_WAITAPP ( hWnd, Msg, wParam, lParam ); break;
case MESUISTATE_APP : nextstate = MessageProc_APP ( hWnd, Msg, wParam, lParam ); break;
case MESUISTATE_UNLOCKQUERY : nextstate = MessageProc_UNLOCKQUERY ( hWnd, Msg, wParam, lParam ); break;
case MESUISTATE_POWERDOWNQUERY: nextstate = MessageProc_POWERDOWNQUERY( hWnd, Msg, wParam, lParam ); break;
}
//MESUI_MessageProc( g_CurrentState, hWnd, Msg, wParam, lParam );
g_CurrentState = nextstate;
return DefWindowProc( hWnd, Msg, wParam, lParam );
}
namespace
{
//-----------------------------------------------------------------------------
// MESUISTATE_MENU
//-----------------------------------------------------------------------------
MESUISTATE MessageProc_MENU ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
switch( Msg )
{
// button event
case MESUIMSG_ONBUTTONCLICK : // on button clik : wParam(ButtonID) lParam(MessageString)
MESUI_ChangeSceneFromMenuToWait();
{
int AppIndex = (int)wParam;
const char* MessageString = (const char*)lParam;
TCHAR window_title[256];
mbstowcs( window_title, MessageString, strlen(MessageString) + 1 );
HWND hAppWnd = FindWindow( NULL, window_title );
if( NULL == hAppWnd )
{
char executable_path[256];
GetAbsolutePath( (const char*)MessageString, executable_path, sizeof(executable_path) );
TCHAR wcs_executable_path [128];
PROCESS_INFORMATION processinfo;
BOOL active;
mbstowcs( wcs_executable_path, executable_path, strlen(executable_path) + 1 );
ZeroMemory(&processinfo, sizeof(processinfo));
active = CreateProcess( wcs_executable_path, L"", NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, NULL, &processinfo );
if( active )
{
::ResumeThread(processinfo.hThread);
PostDelayedMessage( 300, hWnd, LOCALEVENT_APPACTIVATE, 0, 0, TRUE );
WatchProcessExit( processinfo.hProcess, hWnd, LOCALEVENT_APPEXIT, AppIndex, 0 );
g_CurrentApp = AppIndex;
return MESUISTATE_WAITAPP;
}
else
{
MESUI_ChangeSceneFromWaitToMenu();
}
}
else
{
ShowWindow( hAppWnd, SW_SHOW );
SetForegroundWindow( hAppWnd );
SetActiveWindow( hAppWnd );
PostDelayedMessage( 300, hWnd, LOCALEVENT_APPACTIVATE, 0, 0, TRUE );
g_CurrentApp = AppIndex;
return MESUISTATE_WAITAPP;
}
}
break;
case SYSTEMEVENT_USBISCONNECTED:
MESUI_ChangeSceneFromMenuToUSBStorage();
//System_ConnectUSBStorage();
return MESUISTATE_USBSTORAGE;
case SYSTEMEVENT_KEYDOWN_POWER:
g_PowerDownQueryState = MESUISTATE_MENU;
MESUI_ChangeSceneToPowerDownQuery( true );
return MESUISTATE_POWERDOWNQUERY;
case WM_TIMER:
if(1 == wParam)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -