1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| /**
* @brief Envoyer un message a la tache principale
* @param id L'identifiant du message
* @param donnees Pointeur vers les donnees optionnelles
* @param ev L'evenement optionel
*/
void
InterfaceApplication::envoyerMessageTachePrincipale(ulong id, void* donnees, Evenement* ev)
{
#if defined MACOSX
EventRef event;
CreateEvent(0, s_event_class_application, s_event_kind_message, 0, kEventAttributeNone, &event);
SetEventParameter(event, 'Mess', typeUInt32, sizeof(ulong), &id);
SetEventParameter(event, 'Donn', typeUInt32, sizeof(void*), &donnees);
SetEventParameter(event, 'Even', typeUInt32, sizeof(Evenement*), &ev);
PostEventToQueue(GetMainEventQueue(),event,kEventPriorityHigh);
#elif defined WINDOWS
SendNotifyMessage(m_fenetre_menu_hdl,WM_USER + id,(WPARAM)donnees,(LPARAM)ev);
#endif
}
/**
* @brief Callback de fenetre pour le menu (evenements lies aux raccourcis claviers, au menu et point d'entree des messages pour la tache principale)
*/
LRESULT CALLBACK
InterfaceApplication::menuProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
// on recupere un pointeur vers l'objet telecommande grace au handle de la fenetre
InterfaceApplication* iapp = (InterfaceApplication*) GetWindowLongA(hwnd,GWL_USERDATA);
if (message > WM_USER)
{
message -= WM_USER;
iapp->m_application->envoyerMessage(message, (void*)wParam);
Evenement* ev = (Evenement*) lParam;
if (ev) // on signale si demande
ev->signaler();
return 0;
}
(...)
} |
Partager