Я разрабатываю многопользовательский VNC-клиент, используя libvncclient (часть libvncserver) и Qt. Это было немного сложно, но, наконец, у меня приложение работает довольно хорошо, за исключением того, что оно не будет отображать изменения формы курсора с сервера. Я хотел бы преодолеть эту проблему, чтобы я мог поделиться этим программным проектом с миром, как я делаю с большинством других моих проектов.
Я попытался это сделать, чтобы libvncclient показать изменения формы курсора:
client->appData.useRemoteCursor = false;
и это не показывает изменения курсора в кадровом буфере. Затем я попытался обработать изменения курсора самостоятельно, используя:
client->appData.useRemoteCursor = true;
client->GotCursorShape = got_cursor_shape_change;
и пока got_cursor_shape_change
обратный вызов будет вызван, когда на сервере произошло изменение формы курсора, буфера для изображения курсора, rcSource
и буфер для маски курсора, rcMask
, не были действительными изображениями.
Я провел поиск в Интернете для помощи по этой проблеме, но ресурсы помимо официальной документации довольно скудны. Я связался с разработчиками по этому вопросу, но они говорят, что то, что я пробовал, должно работать.
РЕДАКТИРОВАТЬ: Кроме того, другие средства просмотра, такие как TightVNC, TigerVNC, gtk-vnc и т. Д., Отображают изменения формы курсора с сервера, поэтому я знаю, что они отправляют изменения правильно.
У кого-нибудь есть какие-либо подсказки относительно того, что я должен попробовать?
Заранее спасибо. 🙂
Это решено.
Проблема заключалась в том, что на удаленной машине, с которой я тестировал, была установлена очень старая версия TightVNC (2.0.x). После обновления (до 2.7.x) курсор удаленного компьютера становится видимым, и изменения формы происходят в моем средстве просмотра. Вот что работает:
client->appData.useRemoteCursor = false;
Других решений пока нет …