2015-11-08 1 views
0

J'ai une fenêtre standard créée avec xlib qui gère les événements:xlib - print nom de l'événement

while (keep_running){ 
    XNextEvent (display, &event); 
    printf("event\n"); 
} 

Maintenant, il ne semble pas appeler l'événement Expose donc je ne suis pas en mesure de dessiner la fenêtre. Je peux voir dans la déclaration imprimée que certains événements sont déclenchés et j'aimerais savoir quels sont les événements.

Donc, fondamentalement, ma question est, comment puis-je obtenir le nom de l'événement pour l'imprimer?

Je continue d'apprendre le C, donc toute aide est appriciée!

+2

qui tous environ xilb, parce qu'il ya aren » t toutes les classes en C (comme une construction) ... printf() utilise aussi une chaîne de formats et une liste d'arguments, vous pouvez "ajouter" (concat avec l'opérateur addition) des chaînes ensemble –

+0

@GradyPlayer Ah, merci, je ' ll éditer la question –

+1

Je veux dire que vous pouvez _not_ ajouter des chaînes ensemble ... commentant du téléphone UI n'est jamais une bonne idée :) –

Répondre

1

donc je ne suis totalement d'accord avec leur décision de conception, mais il a probablement été fait il y a 30 ans, est maintenant pas le temps pour quarterbacking lundi matin ...

type est une union folle:

typedef union _XEvent { 
    int type; /* must not be changed */ 
    XAnyEvent xany; 
    XKeyEvent xkey; 
    XButtonEvent xbutton; 
    XMotionEvent xmotion; 
    XCrossingEvent xcrossing; 
    XFocusChangeEvent xfocus; 
    XExposeEvent xexpose; 
    XGraphicsExposeEvent xgraphicsexpose; 
    XNoExposeEvent xnoexpose; 
    XVisibilityEvent xvisibility; 
    XCreateWindowEvent xcreatewindow; 
    XDestroyWindowEvent xdestroywindow; 
    XUnmapEvent xunmap; 
    XMapEvent xmap; 
    XMapRequestEvent xmaprequest; 
    XReparentEvent xreparent; 
    XConfigureEvent xconfigure; 
    XGravityEvent xgravity; 
    XResizeRequestEvent xresizerequest; 
    XConfigureRequestEvent xconfigurerequest; 
    XCirculateEvent xcirculate; 
    XCirculateRequestEvent xcirculaterequest; 
    XPropertyEvent xproperty; 
    XSelectionClearEvent xselectionclear; 
    XSelectionRequestEvent xselectionrequest; 
    XSelectionEvent xselection; 
    XColormapEvent xcolormap; 
    XClientMessageEvent xclient; 
    XMappingEvent xmapping; 
    XErrorEvent xerror; 
    XKeymapEvent xkeymap; 
    long pad[24]; 
} Event; 

donc vous devez d'abord utiliser le type pour déterminer quel événement est utilisé:

if(event.type == KeyPress) 
{ 
    printf("keypress\n"); 
    // now you know the type you can use the specific fields from `XKeyEvent xkey`... 
} 

ou vous pouvez simplement vous connecter le type

printf("event type = (%d)\n",event.type); 

les travaux du syndicat parce que chacun des autres éléments possibles a également type que le premier élément, donc ils sont tous alignés sur la même adresse ...

+0

il peut y avoir une fonction pour obtenir le nom du type d'événement int , mais je n'ai pas vu un offert par la documentatio n ... –

+0

Je commence juste ma Virtualbox pour essayer ceci. Voulez-vous me diriger vers où cette documentation est? Je viens de reconstituer SO réponses et des tutoriels de sites aléatoires parce que je ne pouvais pas trouver de documents –

+0

S'il vous plaît ne me dites pas ce sont les docs http://www.x.org/docs/X11/xlib.pdf si elles sont, ils ont besoin d'une mise à niveau mal lol –