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

📄 hello.c

📁 CD_PALM程序设计入门
💻 C
字号:
#include <Pilot.h>
#include "hello.h"
// #include "Callback.h"

#define kNumTextColumns     3
#define kNumRows            8
VoidHand  gHandles[kNumTextColumns][kNumRows];
static Boolean StartApplication(void)
{
   int  i;
   int  j;

   for (i=0;i<kNumTextColumns;i++)
   {
       for (j=0;j<kNumRows;j++)
       {
           CharPtr  s;
           gHandles[i][j]=MemHandleNew(1);
           if (!gHandles[i][j])
              return false;

           s=MemHandleLock(gHandles[i][j]);
           *s='\0';
           MemHandleUnlock(gHandles[i][j]);
       }
   }

	FrmGotoForm(formID_hello);

   return true;
}

static int WhichTextColumn(int column)
{
    if (column==0)
       return 0;
    else if (column==5)
       return 1;
    else   // column==7
       return 2;
}

static Err CustomLoadItem(VoidPtr table, Word row, Word column,
    Boolean editable, VoidHand *dataH, WordPtr dataOffset,
    WordPtr dataSize, FieldPtr fld)
{

// #ifdef __GNUC__
//    CALLBACK_PROLOGUE
// #endif

    *dataH=gHandles[WhichTextColumn(column)][row];
    *dataOffset=0;
    *dataSize=MemHandleSize(*dataH);

// #ifdef __GNUC__
//     CALLBACK_EPILOGUE
// #endif

    return 0;

}

static Boolean CustomSaveItem(VoidPtr table, Word row, Word column)
{
    int textColumn;
    Boolean result=false;

    textColumn=WhichTextColumn(column);
    // the handle that we provided in CustomLoadItem has been modified
    // We could edit that (if we wanted).
    // If it's been edited, let's make the first row
    // convert to lower-case and redraw
    if ( row==0 && textColumn==1 )
    {
       FieldPtr field=TblGetCurrentField(table);
       if (field && FldDirty(field))
       {
          VoidHand h=gHandles[textColumn][row];
          CharPtr  s;
          int      i;

          s = MemHandleLock(h);
          for (i=0;s[i]!='\0';i++)
            if (s[i]>='A' && s[i]<='Z')
               s[i]+='a'-'A';
          MemHandleUnlock(h);
          TblMarkRowInvalid(table, row);
          result=true;

       }
    }

    return result;   // should the table be redrawn

}

// draws either \,|,/,or -
static void CustomDrawItem(VoidPtr table, Word row, Word column,
    RectanglePtr bounds)
{
    UInt fromx, fromy, tox, toy ;
    
    switch (TblGetItemInt(table, row, column))
    {

        case 0:
           fromx=bounds->topLeft.x;
           fromy=bounds->topLeft.y;
           tox=fromx+bounds->extent.x;
           toy=fromy+bounds->extent.y;
           break;
        case 1:
           fromx=bounds->topLeft.x + bounds->extent.x / 2 ;
           fromy=bounds->topLeft.y;
           tox=fromx;
           toy=fromy+bounds->extent.y;
           break;
        case 2:
           fromx=bounds->topLeft.x+bounds->extent.x;
           fromy=bounds->topLeft.y;
           tox=bounds->topLeft.x;
           toy=fromy+bounds->extent.y;
           break;
        case 3:
           fromx=bounds->topLeft.x;
           fromy=bounds->topLeft.y+bounds->extent.y / 2;
           tox=fromx+bounds->extent.x;
           toy=fromy;
           break;
        default:
           fromx=tox=bounds->topLeft.x;
           fromy=toy=bounds->topLeft.y;
           break;

    }
    WinDrawLine(fromx, fromy, tox, toy);
}

void MainViewInit(void)
{
     FormPtr    frm;
     TablePtr   tableP;
     UInt       numRows;
     UInt       kNumColumns=9;
     UInt       i;
     static char * labels[]={"0","1","2","3","4","5","6","7"};
     DateType   dates[10];
     ListPtr    list;

     // we'll have a missing date, and then some dates before and
     // after the current date
     * ((IntPtr) &dates[0])=noTime;
     for (i=1;i<sizeof(dates)/sizeof(*dates);i++)
     {
         dates[i].year=1994+i-1904;  // offset from 1904
         dates[i].month=8;
         dates[i].day=29;
     }
     // Get a pointer to the main form.
     frm=FrmGetActiveForm();

     tableP=FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,cmdTable));
     list=FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,cmdList));
     
     numRows=TblGetNumberOfRows(tableP);
     for (i=0;i<numRows;i++)
     {
         TblSetItemStyle(tableP , i , 0 , textWithNoteTableItem);
         
         
         TblSetItemStyle(tableP , i , 1 , numericTableItem);
         TblSetItemInt(tableP , i , 1 , i );

         TblSetItemStyle(tableP , i , 2 , checkboxTableItem);
         TblSetItemInt(tableP , i , 2 , i % 2 );

         TblSetItemStyle(tableP , i , 3 , labelTableItem);
         TblSetItemPtr(tableP , i , 3 , labels[i] );
      
         TblSetItemStyle(tableP , i , 4 , dateTableItem);
         TblSetItemInt(tableP , i , 4 , DateToInt(dates[i]) );

         TblSetItemStyle(tableP , i , 5 , textTableItem);
         
         TblSetItemStyle(tableP , i , 6 , popupTriggerTableItem);
         TblSetItemInt(tableP , i , 6 , i % 5 );
         TblSetItemPtr(tableP , i , 6 , list );

         TblSetItemStyle(tableP , i , 7 , narrowTextTableItem);
         TblSetItemInt(tableP , i , 7 , i * 2 );

         TblSetItemStyle(tableP , i , 8 , customTableItem);
         TblSetItemInt(tableP , i , 8 , i % 4 );

     }
     
     TblSetRowUsable(tableP, 0, false);  // just to see what happens

      for (i=0;i<kNumColumns;i++)
          TblSetColumnUsable(tableP, i, true);

      //TblSetLoadDataProcedure(tableP, 0, CustomLoadItem);
   //  TblSetLoadDataProcedure(tableP, 5, CustomLoadItem);
     // TblSetSaveDataProcedure(tableP, 5, CustomSaveItem);
     // TblSetLoadDataProcedure(tableP, 7, CustomLoadItem);

     TblSetCustomDrawProcedure(tableP, 8, CustomDrawItem);

     // Draw the form.
     FrmDrawForm(frm);

}


static Boolean HelloFormEventHandler(EventPtr event)
{
	Boolean handled = false;

	switch (event->eType) {

      case ctlSelectEvent:
        FrmCustomAlert(cmdButton, "aa", "bb", NULL);
        handled=true;
        break;

		case frmOpenEvent:
         MainViewInit();
			FrmDrawForm(FrmGetActiveForm());
			handled = true;
			break;

      case menuEvent:
         if(event->data.menu.itemID==cmdMenu_1)
             SndPlaySystemSound(sndInfo);
         else
             SndPlaySystemSound(sndStartUp);
         handled=true;
         break;

      case tblSelectEvent:
         // handle successful tap on a cell
         // for a checkbox or popup, tblExitEvent will be
         // called instead of tblSelectEvent
         // if the user cancels the control
         break;

      case tblEnterEvent:
         {
            UInt  row=event->data.tblEnter.row;
            UInt  column=event->data.tblEnter.column;

            if (column==8)
            {
               TablePtr table=event->data.tblEnter.pTable;
               int      oldValue=TblGetItemInt(table, row, column);
               
               TblSetItemInt(table, row, column, (oldValue+1)%4);
               TblMarkRowInvalid(table, row);
               TblRedrawTable(table);
               handled=true;

            }
         }
         break;

	}

	return (handled);
}

static Boolean ApplicationHandleEvent(EventPtr event)
{
	FormPtr form;
	Word    formID;
	Boolean handled = false;

	if (event->eType == frmLoadEvent) {
		formID = event->data.frmLoad.formID;
		form   = FrmInitForm(formID);

		FrmSetActiveForm(form);

		switch (formID)  {
			case formID_hello:
            // MainViewInit();
				FrmSetEventHandler(form, HelloFormEventHandler);
				break;
		}

		handled = true;
	}

	return (handled);
}

// static void StartApplication()
// {
//	FrmGotoForm(formID_hello);
// }

static void EventLoop(void)
{
	short			err;
	int			formID;
	FormPtr		form;
	EventType		event;

	do {
		EvtGetEvent(&event, evtWaitForever);

		if (SysHandleEvent(&event)) continue;

		if (MenuHandleEvent(NULL, &event, &err))	continue;

		if (ApplicationHandleEvent(&event)) continue;

		FrmDispatchEvent(&event);

	} while (event.eType != appStopEvent);
}

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

DWord PilotMain (Word cmd, Ptr cmdPBP, Word launchFlags)
{
	if (cmd ==  sysAppLaunchCmdNormalLaunch) {
		StartApplication();
		EventLoop();
		StopApplication();
	}

	return (0);
}

⌨️ 快捷键说明

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