2010-10-27 6 views
0

J'ai passé du temps à essayer de créer une fenêtre enfant d'une fenêtre existante en utilisant le code suivant sur JNA (Java Native Access) mais je suppose que c'est à peu près le même avec tous les autres langages de programmation essayant d'utiliser l'API Windows.Comment créer une fenêtre enfant Microsoft Windows en utilisant JNA

Voici ma déclaration de CreateWindowsExA:

public int CreateWindowExA(int i, String string, String string0, int i0, int i1, int i2, int i3, int i4, int ninja, Object object, Object object0, int i5); 

Et voici comment je l'appelle:

int childLabel = user32.CreateWindowExA 
(
    0, //sets style to default 
    "STATIC", //window style is label 
    "Show Message", //label text is show Message 
    1342177280, // WS_CHILD + WS_VISIBLE = &H40000000 + &H10000000 
    10,   //x 
    90,   //y 
    100,  //width 
    0,   //height 
    parentWindowHandler, //a valid handler to a window (has been tested and is valid) 
    null, // a handler to a menu    
    null, //A handle to the instance of the module to be associated with the window. (NO IDEA) 
    0  //arguments list (no idea) 
); 

Après un appel à la fonction que je reçois un gestionnaire valide au bouton ... Mais ce n'est pas visible. Un appel à getLastError et un appel ultérieur à TranslateMessage me donnent "La fonction s'est terminée avec succès". De plus, si j'appelle GetAncestor (childButton, 3), je récupère mon handle dans le parentWindowHandler. Je peux aussi appeler GetWindowTextA (childButton..bla) et j'obtiendrai la chaîne Show Message. Donc, évidemment, j'ai créé un enfant de la parentWindow et il est là. Cependant, ce n'est pas visible. La prochaine chose qui vient à l'esprit est que ma fenêtre/étiquette est dans le bas de l'index z de son parent, donc d'autres appels doivent être faits et j'ai l'intention de le faire. Mais si je suis dans la mauvaise direction, je vais perdre un peu de temps.

Comment rendre cet enfant visible ou qu'est-ce que je fais de mal? Vous devriez noter que je n'appelle pas ceci dans un rappel ou n'envoie aucun msg.

Des pointeurs?

Répondre

0

Oui, c'était juste ce que je pensais, mais légèrement différent. Un message WM_PAINT doit être envoyé à la fenêtre parente pour qu'il soit actualisé.

Questions connexes