Freigeben über


_OnSelection( ), API-Bibliotheksroutine

Gibt eine Routine an, die ausgeführt werden soll, wenn Benutzer das angegebene Menü und den angegebenen Eintrag auswählen.

void _OnSelection(MENUID menuid, ITEMID itemid, FPFI routine)
MENUID menuid;            /* Menu identifier. */
ITEMID itemid;            /* Item identifier. */
FPFI routine;               /* Routine to execute. */

Hinweise

Wenn Sie für die Eintrag-ID itemid den Wert -1 angeben, wird die Routine ausgeführt, sobald Benutzer einen Eintrag aus dem Menü wählen. Eine Routine, die einem einzelnen Eintrag zugeordnet ist, hat Vorrang vor einer Routine, die dem gesamten Menü zugeordnet ist. Sie können eine Auswahlroutine für ein angegebenes Menü und einen angegebenen Eintrag abbrechen, indem Sie (FPFI) 0 als routine-Parameter übergeben.

Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.

Beispiel

Im folgenden Beispiel wird ein Menü mit drei Ereignissen erstellt. _OnSelection( ) wird mit dem Wert -1 für den ITEMID-Parameter aufgerufen, wodurch angezeigt wird, dass die Funktion USERCHOICE( )****aufgerufen werden soll, wenn Benutzer einen Eintrag aus diesem Menü wählen.

Visual FoxPro-Code

SET LIBRARY TO ONSELECT

C-Code

#include <pro_ext.h>

void putLong(long n)
{
   Value val;

   val.ev_type = 'I';
   val.ev_long = n;
   val.ev_width = 10;

   _PutValue(&val);
}

FAR onSelection(long menuId, long itemId)
{
   _PutStr("\nitemId = "); putLong(itemId);
   _DisposeMenu(menuId);
}

FAR activateMenu(ParamBlk FAR *parm)
{
   MENUID menuId;
   ITEMID itemId;
   Point loc;

   menuId = _GetNewMenuId();
   _NewMenu(MPOPUP, menuId);

   itemId = _GetNewItemId(menuId);
   _NewItem(menuId, itemId, -2, "\\<1st item");

   itemId = _GetNewItemId(menuId);
   _NewItem(menuId, itemId, -2, "\\<2nd item");

   itemId = _GetNewItemId(menuId);
   _NewItem(menuId, itemId, -2, "\\<3rd item");

   loc.v = 10; loc.h = 20;
   _SetMenuPoint(menuId, loc);

   _ActivateMenu(menuId);
   _OnSelection(menuId, -1, onSelection);
}

FoxInfo myFoxInfo[] = {
   {"ONLOAD", (FPFI) activateMenu, CALLONLOAD, ""},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Siehe auch

Zugreifen auf die Visual FoxPro-API | _ActivateMenu( ), API-Bibliotheksroutine | _MenuInteract( ), API-Bibliotheksroutine