Я потратил некоторое время, пытаясь создать дочернее окно существующего окна, используя следующий фрагмент кода на 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-индекса его родителя, поэтому необходимо выполнить некоторые другие вызовы, и я собираюсь это сделать. Но если я не в том направлении, я просто потрачу немного времени.
Как мне сделать этого ребенка видимым или что я делаю не так.
Вы должны отметить, что я не называю это в обратном вызове или отправляю сообщения.
Есть указатели?