开发者

How to create a Microsoft Windows Child window using JNA

I have spent some time trying to create a child window of an existing window by using the following piece of code on JNA (Java Native Access) but I guess it is pretty much the same with every other programming language trying to use Windows API.

Here is my declaration of 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);

And here is how I call it:

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)
);

After a call to the function I get a valid handler to the button... But it is not visible. A call to getLastError and a subsequent call to TranslateMessage give me "The function completed successfully". Also, if i call GetAncestor(childButton,3) I get my handle back to the parentWindowHandler. I can also call GetWindowTextA(childButton..bla) and will obtain the Show Message string. So, obviously I have created a child of the parentWindow and it is there. However, it is not visible. The next thing that comes in mind is that my window/label is in the bottom of the z-index of its parent, so some other calls have to be made and I intend to do so. But if I am at the wrong direction, I will just waste a bit of time.

How do i make this child visible or what am i doing wrong. You should note that I do not call this in a callback or send any msg's.

Any pointers?


Yep, it was just what I thought, but slightly different. A WM_PAINT message needed to be sent to the parent window so it refreshes.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜