⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winmain.cpp

📁 windows ce 下的3D桌面
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//------------------------------------------------------------------------------
//
//  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 + -