LINUX.ORG.RU

MACOSX и окна


0

0

Есть окно(свтшное) и его хендл шела этого окна Далее этот хендл передаётся нативной либе которая должнаю по идее сделать его полупрозрачным но ничего не происходит/ В ч>м может быть проблема? Юзается JNI код SetTransparency SetTransparency(jint handle){ WindowRef wnd=(WindowRef) handle; OSStatus status; status=SetWindowAlpha(handle,0,5); return status; }

Код простой, весь кусок писать не стал не интересно(у меня даже такой не работает) Заранее спасибо!

anonymous

А вы уверены, что хендл окна, получаемый в свт, это WindowRef? А не указатель на NSWindow например, или еще более того, -- указательно на свой обьект-враппер?

fmjs
()
Ответ на: комментарий от anonymous

в данный метод передаётся всего лишь jint который и есть хендл окна тоесть это просто число как из него мне вытащить виндоуреф

anonymous
()
Ответ на: комментарий от anonymous

> в данный метод передаётся всего лишь jint который и есть хендл окна тоесть это просто число как из него мне вытащить виндоуреф

Если это число -- какой-либо низкоуровневый идентификатор окна, уровня WindowServer-а, -- то никак, WindowRef это указатель на некую закрытую структуру данных, и имея Quartz-идентификатор окна, этот указатель не получить, т.к. это API полность закрыто. Если это число, какой-то внутренний идентификатор jint (а так скорее всего и есть), то нужно в обратную сторону -- используя API jint постараться его вытащить :)

fmjs
()
Ответ на: комментарий от anonymous

> А как тогда имея этот хендл сделать окно с этим хэндлом прозрачным?

Для начала: роль хендла окна на маке обычно играет WindowRef либо ссылка на NSWindow (котоая есть обертка вокруг WindowRef подобного интерфейса). То, что находиться ниже WindowRef нигде не документировано, и об API используемом для общения непосредственно с WindowServer-ом и Quartz Core, известно мало.

Такого понятия как хендл окна на маке нет.

То, что вам передает jint - это хз что, и хз-что с ним делать ;)

fmjs
()
Ответ на: комментарий от fmjs

JNIEXPORT jint JNICALL OS_NATIVE(CreateNewWindow) (JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2, jintArray arg3) { Rect _arg2, *lparg2=NULL; jint *lparg3=NULL; jint rc = 0; OS_NATIVE_ENTER(env, that, CreateNewWindow_FUNC); if (arg2) if ((lparg2 = getRectFields(env, arg2, &_arg2)) == NULL) goto fail; if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail; rc = (jint)CreateNewWindow((WindowClass)arg0, (WindowAttributes)arg1, (const Rect *)lparg2, (WindowRef *)lparg3); fail: if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0); if (arg2 && lparg2) setRectFields(env, arg2, lparg2); OS_NATIVE_EXIT(env, that, CreateNewWindow_FUNC); return rc; } ЭТО СВТШНАЯ функция создания шела(окна) а в arg3[0] поместится какрастаки хёндл созданного шела.

anonymous
()
Ответ на: комментарий от anonymous

JNIEXPORT jint JNICALL OS_NATIVE(CreateNewWindow)
	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2, jintArray arg3)
{
	Rect _arg2, *lparg2=NULL;
	jint *lparg3=NULL;
	jint rc = 0;
	OS_NATIVE_ENTER(env, that, CreateNewWindow_FUNC);
	if (arg2) if ((lparg2 = getRectFields(env, arg2, &_arg2)) == NULL) goto fail;
	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
	rc = (jint)CreateNewWindow((WindowClass)arg0, (WindowAttributes)arg1, (const Rect *)lparg2, (WindowRef *)lparg3);
fail:
	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
	if (arg2 && lparg2) setRectFields(env, arg2, lparg2);
	OS_NATIVE_EXIT(env, that, CreateNewWindow_FUNC);
	return rc;
}

anonymous
()
Ответ на: комментарий от fmjs

Этот хендл отдаёт мне СВТ, а далее я уже по верх СВТ начинаю мутить и вот уже делаю прозрачность и ничего не выходит

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.