跳轉到內容

Palm OS/C/Menus 程式設計

來自華夏公益教科書,開放的書籍,面向開放的世界

將所有這些檔案放在工作目錄中,呼叫

make -f MenusMakefile

.. 這將建立Menus.prc在工作目錄中,準備好安裝到 Palm 上。


此檔案在一個地方定義了由Menus.rcpMenus.c.

#define  MainForm            1000
#define  MainMenu            1000
#define  MainMenuRecordNew   1011
#define  MainMenuRecordOpen  1012
#define  MainMenuHelpAbout   1020

[編輯 | 編輯原始碼]
#include "Menus.h"

MENU ID MainMenu
BEGIN
  PULLDOWN "Record"
  BEGIN
    MENUITEM "New" ID MainMenuRecordNew "N"
    MENUITEM SEPARATOR
    MENUITEM "Open" ID MainMenuRecordOpen "O"
  END
  PULLDOWN "Help"
  BEGIN
    MENUITEM "About" ID MainMenuHelpAbout "A"
  END
END

FORM ID MainForm AT (0 0 160 160)
USABLE
MENUID MainMenu
BEGIN
END


#include <PalmOS.h>
#include <unix_stdarg.h>
#include "Menus.h"


void showMessage( char *format, ...)
{
  va_list  args;
  char     msg[99];

  va_start( args, format);
  StrVPrintF( msg, format, args);
  va_end( args);

  WinDrawChars( msg, StrLen(msg), 0, 80);
}


Boolean appHandleEvent( EventPtr event)
{
  Boolean  handled;
  FormPtr  form;

  handled = true;

  if ( frmLoadEvent == event->eType)
  {
    form = FrmInitForm( event->data.frmLoad.formID);
    FrmSetActiveForm( form);
  }
  else if ( menuEvent == event->eType)
  {
    showMessage( "selected resource %i", event->data.menu.itemID);
  }
  else {
    handled = false;
  }

  return handled;
}


UInt32 PilotMain( UInt16 cmd, void *cmdPBP, UInt16 launchFlags)
{
  EventType  event;
  UInt16     error;

  if ( sysAppLaunchCmdNormalLaunch == cmd)
  {
    FrmGotoForm( MainForm);

    showMessage( "open the menu");

    do {
      EvtGetEvent( &event, evtWaitForever);

      if ( ! SysHandleEvent( &event))
      if ( ! MenuHandleEvent( 0, &event, &error))
      appHandleEvent( &event);

    } while (event.eType != appStopEvent);

    FrmCloseAllForms();
  }

  return 0;
}


[編輯 | 編輯原始碼]
PROJECT=Menus
CREATOR_ID=Anon

.SILENT:

all: $(PROJECT).prc

$(PROJECT).prc: $(PROJECT).c $(PROJECT).h $(PROJECT).rcp
	m68k-palmos-gcc $(PROJECT).c -o $(PROJECT)
	m68k-palmos-obj-res $(PROJECT)
	pilrc -q $(PROJECT).rcp
	build-prc $(PROJECT).prc "$(PROJECT)" $(CREATOR_ID) *.$(PROJECT).grc *.bin
	rm *.$(PROJECT).grc *.bin $(PROJECT)

clean:
	rm -f $(PROJECT).prc

華夏公益教科書