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

📄 testfiveway.c

📁 palm编程
💻 C
📖 第 1 页 / 共 2 页
字号:
	////////////////////////////////////////////////////////////
	
	// Right
	fieldP = FrmGetPtr(frmP, MainRightField);
	if( keyCode & navBitRight ) {
		if( keyCode & navChangeRight )
			SetFieldTextFromStr(fieldP, keyState[0], true);	// Press
		else
			SetFieldTextFromStr(fieldP, keyState[1], true);	// Repeat
	} else {
		if( keyCode & navChangeRight )
			SetFieldTextFromStr(fieldP, keyState[2], true);	// Released
		else
			SetFieldTextFromStr(fieldP, keyState[3], true);	// Not Pressed
	}
		
    ////////////////////////////////////////////////////////////
	// Other Way, but doesn't handle multiple keys correctly
	////////////////////////////////////////////////////////////
	//
	//	if( chr == vchrNavChange && (keyCode & navBitRight)) {
	//		if( modifiers & autoRepeatKeyMask )
	//			SetFieldTextFromStr(fieldP, keyState[1], true);
	//		else
	//			SetFieldTextFromStr(fieldP, keyState[0], true);
	//	} else {
	//		SetFieldTextFromStr(fieldP, keyState[2], true);
	//	}
	////////////////////////////////////////////////////////////
    
    // Select
    fieldP = FrmGetPtr(frmP, MainSelectField);
    if( keyCode & navBitSelect ) {
		if( keyCode & navChangeSelect )
			SetFieldTextFromStr(fieldP, keyState[0], true);	// Press
		else
			SetFieldTextFromStr(fieldP, keyState[1], true);	// Repeat
	} else {
		if( keyCode & navChangeSelect )
			SetFieldTextFromStr(fieldP, keyState[2], true);	// Released
		else
			SetFieldTextFromStr(fieldP, keyState[3], true);	// Not Pressed
	}
		
    ////////////////////////////////////////////////////////////
	// Other Way, but doesn't handle multiple keys correctly
	////////////////////////////////////////////////////////////
	//
	//	if( chr == vchrNavChange && (keyCode & navBitSelect)) {
	//		if( modifiers & autoRepeatKeyMask )
	//			SetFieldTextFromStr(fieldP, keyState[1], true);
	//		else
	//			SetFieldTextFromStr(fieldP, keyState[0], true);
	//	} else {
	//		SetFieldTextFromStr(fieldP, keyState[2], true);
	//	}
	////////////////////////////////////////////////////////////
    
    
    // Draw a line for the select button
    WinDrawLine(76, 49, 105, 34);
    
    return true;
}

/**
 * @brief MainFormDoCommand
 *	This routine performs the menu command specified.
 *
 *
 * @param command	menu item id
 * @retval true if the event was handled and should not be passed to
 *     FrmHandleEvent
 *
 **/

Boolean MainFormDoCommand(UInt16 command)
{
	Boolean handled = false;

	UInt16  cardNo;
	LocalID dbID;
	DmSearchStateType searchState;

	DmGetNextDatabaseByTypeCreator(true, &searchState, sysFileTApplication,
									 appFileCreator, true, &cardNo, &dbID);

	switch (command)
	{
		case OptionsAbout:
			MenuEraseStatus(0);
			HsAboutHandspringApp(cardNo, dbID, "2006", "Palm DTS Team");
			handled = true;
		break;
	}

	return handled;
}

/***********************************************************************
 *
 * FUNCTION:    MainFormHandleEvent
 *
 * DESCRIPTION: Form event handler.
 *
 * PARAMETERS:	eventP		- Pointer to an event
 *
 * RETURNED:	True if event was handled.
 *
 ***********************************************************************/

static Boolean MainFormHandleEvent(EventType *eventP)
{
	Boolean handled = false;
	FormType *frmP = FrmGetActiveForm();
	
	EventType cleanEvent;
	cleanEvent.eType = keyDownEvent;
	cleanEvent.data.keyDown.chr = 0;
	cleanEvent.data.keyDown.keyCode = 0;
	cleanEvent.data.keyDown.modifiers = 0;

	
	switch(eventP->eType)
	{
		case menuEvent:
			return MainFormDoCommand(eventP->data.menu.itemID);

		case frmOpenEvent:
			FrmDrawForm(frmP);	
			
			// Refresh the display
			if (OldLibrary)
				OldDisplayKeyState(frmP, &cleanEvent);
			else
				NewDisplayKeyState(frmP, &cleanEvent);
			handled = true;
			break;
		
		case keyUpEvent: if (OldLibrary) break;	
		case keyHoldEvent: if (OldLibrary) break;
		case keyDownEvent:
			if (OldLibrary)
				handled = OldDisplayKeyState(frmP, eventP);
			else
				handled = NewDisplayKeyState(frmP, eventP);
			break;
			
		default:
			break;
	}
	
	return handled;
}

/***********************************************************************
 *
 * FUNCTION:    AppHandleEvent
 *
 * DESCRIPTION: Main application event handler.
 *
 * PARAMETERS:	eventP		- Pointer to an event.
 *
 * RETURNED:	True if event was handled.
 *
 ***********************************************************************/
 
static Boolean AppHandleEvent(EventType *eventP)
{
	UInt16 formId = 0;
	FormType *frmP = NULL;
	
	if(eventP->eType == frmLoadEvent)
	{
		formId = eventP->data.frmLoad.formID;
		frmP = FrmInitForm(formId);
		FrmSetActiveForm(frmP);
		
		switch (formId)
		{
		case MainForm:
			FrmSetEventHandler(frmP, MainFormHandleEvent);
			break;
			
		default:
			break;
		}
		return true;
	}
	
	return false;
}

/***********************************************************************
 *
 * FUNCTION:    ApplEventLoop
 *
 * DESCRIPTION: Main Application event loop.
 *
 * PARAMETERS:	-
 *
 * RETURNED:	-
 *
 ***********************************************************************/
 
static void AppEventLoop(void)
{
	EventType event;
	UInt16 error;
	Boolean err;
	
	do
	{
		EvtGetEvent(&event, evtWaitForever);
		
		if(EvtKeydownIsVirtual(&event) && (event.data.keyDown.chr == vchrNavChange)
			&& ((event.data.keyDown.keyCode & (navChangeBitsAll | navBitsAll)) == (navChangeSelect | navBitSelect))
			&& (event.data.keyDown.modifiers & poweredOnKeyMask) )
		{
			// If you want your application to turn on and not to show the pop-up clock
			// Use the following code:
			// // Simply reset the auto off...
			// EvtResetAutoOffTimer();
			
			// Pop the regular clock dialog
			err = SysHandleEvent(&event);
			// Skip the loop
			continue;
		}
		
		// If the event is a five way event, pass it to the form
		// event handler.
		if(IsFiveWayNavEvent(&event) || !SysHandleEvent(&event))
		{
			if (! MenuHandleEvent (0, &event, &error))
			{			
				if(!AppHandleEvent(&event))
				{
					FrmDispatchEvent(&event);
				}
			}
		}
	} while(event.eType != appStopEvent);
}

/***********************************************************************
 *
 * FUNCTION:    AppStart
 *
 * DESCRIPTION: Called when the application starts
 *
 * PARAMETERS:	-
 *
 * RETURNED:	-
 *
 ***********************************************************************/

static Err AppStart(void)
{
	/*
	// Check for 5 Way
	UInt32 	version = 0;
	Err		err = FtrGet(navFtrCreator, navFtrVersion, &version);
	
	if(err)
		FrmAlert(NotAvailableAlert);
	*/
	
	Err error = errNone;
	
	error = SysLibFind(kPmKeyLibName, &gLibRefNum);
	if (error)
	{
		error = SysLibLoad(sysFileTLibrary, kPmKeyLibCreator, &gLibRefNum);
		
		if (error)
		{
			gLibRefNum = sysInvalidRefNum;
			OldLibrary = true;
			error = errNone;
		}
	}

	return error;
}

/***********************************************************************
 *
 * FUNCTION:    AppStop
 *
 * DESCRIPTION: Called when the application exits
 *
 * PARAMETERS:	-
 *
 * RETURNED:	-
 *
 ***********************************************************************/

static void AppStop(void)
{
	FrmCloseAllForms();
}

/* all code from here to end of file should use no global variables */
#pragma warn_a5_access on

/***********************************************************************
 *
 * FUNCTION:    RomVersionCompatible
 *
 * DESCRIPTION: Check the if the ROM is compatible with the application
 *
 * PARAMETERS:	-
 *
 * RETURNED:	-
 *
 ***********************************************************************/

static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags)
{
    UInt32 romVersion;

    FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
    if (romVersion < requiredVersion)
    {
        if ((launchFlags & 
            (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) ==
            (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp))
        {
            FrmAlert (RomIncompatibleAlert);

             if (romVersion < kPalmOS20Version)
            {
                AppLaunchWithCommand(
                    sysFileCDefaultApp, 
                    sysAppLaunchCmdNormalLaunch, NULL);
            }
        }

        return sysErrRomIncompatible;
    }

    return errNone;
}

/***********************************************************************
 *
 * FUNCTION:    PilotMain
 *
 * DESCRIPTION: Main entry point for the application.
 *
 * PARAMETERS:	-
 *
 * RETURNED:	-
 *
 ***********************************************************************/

UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
    Err error;

    error = RomVersionCompatible (ourMinVersion, launchFlags);
    if (error) return (error);

    switch (cmd)
    {
    case sysAppLaunchCmdNormalLaunch:
        error = AppStart();
        if (error) 
            return error;

        FrmGotoForm(MainForm);
        AppEventLoop();
        
        AppStop();
        break;

    default:
        break;
    }

    return errNone;
}

/* turn a5 warning off to prevent it being set off by C++
 * static initializer code generation */
#pragma warn_a5_access reset

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -