Sample: MenuItems.cpp
//------------------------------------------------------------------------------ // // SimConnect Menu Items Sample // // Description: // Add one menu item, after it has been selected four times // replace it with another menu item //------------------------------------------------------------------------------ #include <windows.h> #include <tchar.h> #include <stdio.h> #include <strsafe.h> #include "SimConnect.h" int quit = 0; HANDLE hSimConnect = NULL; static enum GROUP_ID { GROUP_MENU }; static enum EVENT_ID { EVENT_MENU_ONE, EVENT_MENU_TWO, }; static int menuUseCount = 0; void CALLBACK MyDispatchProcMI(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext) { HRESULT hr; switch(pData->dwID) { case SIMCONNECT_RECV_ID_EVENT: { SIMCONNECT_RECV_EVENT *evt = (SIMCONNECT_RECV_EVENT*)pData; switch(evt->uEventID) { case EVENT_MENU_ONE: printf("\nMenu item one selected %d", evt->dwData); ++menuUseCount; // Selected four times, so replace item one with item two if (menuUseCount == 4) { hr = SimConnect_MenuDeleteItem(hSimConnect, EVENT_MENU_ONE); hr = SimConnect_RemoveClientEvent(hSimConnect, GROUP_MENU, EVENT_MENU_ONE); hr = SimConnect_MenuAddItem(hSimConnect, "Menu Item Two", EVENT_MENU_TWO, 54321); hr = SimConnect_AddClientEventToNotificationGroup(hSimConnect, GROUP_MENU, EVENT_MENU_TWO); } break; case EVENT_MENU_TWO: ++menuUseCount; printf("\nMenu item two selected %d", evt->dwData); if (menuUseCount == 6) quit = 1; break; default: printf("\nReceived unknown event: %d",evt->uEventID); break; } break; } case SIMCONNECT_RECV_ID_QUIT: { quit = 1; break; } default: printf("Received ID: %d", pData->dwID); break; } } void testMenuItems() { HRESULT hr; if (SUCCEEDED(SimConnect_Open(&hSimConnect;, "Menu Items", NULL, 0, 0, 0))) { printf("\nConnected...!"); // Create some private events hr = SimConnect_MapClientEventToSimEvent(hSimConnect, EVENT_MENU_ONE); hr = SimConnect_MapClientEventToSimEvent(hSimConnect, EVENT_MENU_TWO); // Add one menu item hr = SimConnect_MenuAddItem(hSimConnect, "Menu Item One", EVENT_MENU_ONE, 12345); // Sign up for the notifications hr = SimConnect_AddClientEventToNotificationGroup(hSimConnect, GROUP_MENU, EVENT_MENU_ONE); hr = SimConnect_SetNotificationGroupPriority(hSimConnect, GROUP_MENU, SIMCONNECT_GROUP_PRIORITY_HIGHEST); while( 0 == quit ) { SimConnect_CallDispatch(hSimConnect, MyDispatchProcMI, NULL); Sleep(1); } // Clean up before exiting if (menuUseCount < 4) hr = SimConnect_MenuDeleteItem(hSimConnect, EVENT_MENU_ONE); else hr = SimConnect_MenuDeleteItem(hSimConnect, EVENT_MENU_TWO); hr = SimConnect_Close(hSimConnect); } } int __cdecl _tmain(int argc, _TCHAR* argv[]) { testMenuItems(); return 0; } // End of sample |