Как создать дочернее окно Microsoft Windows с помощью JNA - PullRequest
0 голосов
/ 27 октября 2010

Я потратил некоторое время, пытаясь создать дочернее окно существующего окна, используя следующий фрагмент кода на JNA (Java Native Access), но я думаю, что это почти то же самое с любым другим языком программирования, пытающимся использовать Windows API.

Вот мое объявление 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);

А вот как я это называю:

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

После вызова функции я получаю действительный обработчик для кнопки ... Но это не видно. Вызов getLastError и последующий вызов TranslateMessage дают мне «Функция успешно выполнена» . Кроме того, если я вызываю GetAncestor (childButton, 3), я возвращаю свой дескриптор parentWindowHandler. Я также могу вызвать GetWindowTextA (childButton..bla) и получить строку Показать сообщение . Итак, очевидно, я создал дочерний элемент parentWindow, и он там. Однако это не видно. Следующее, что приходит на ум, - это то, что мое окно / метка находится внизу z-индекса его родителя, поэтому необходимо выполнить некоторые другие вызовы, и я собираюсь это сделать. Но если я не в том направлении, я просто потрачу немного времени.

Как мне сделать этого ребенка видимым или что я делаю не так. Вы должны отметить, что я не называю это в обратном вызове или отправляю сообщения.

Есть указатели?

1 Ответ

0 голосов
/ 27 октября 2010

Да, это было только то, что я думал, но немного по-другому. Сообщение WM_PAINT необходимо отправить в родительское окно, чтобы оно обновлялось.

...