crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Qt setParent (WinAPI)
Гость_Andrey_*
сообщение 24.11.2010, 1:09
Сообщение #1





Гости








    


Есть такая проблема. Внедрил main form qt приложения в vcl mdi форму сишного приложения средствами Win API. Все отлично внедрилось, отрисовка работает, клавиатурные события обрабатываются, но мышь...
Вобщем qt форма продолжает использовать глобальные координаты вместо локальных. При этом весьма странное дело, какие то виджеты используют локальные координаты и ведут себя нормально, а какие глобальные и гонят...
Че токо не пробовал со стороны сишного приложения чтобы исправить дело (средствами winapi), но ниче не помогает.
Видимо придется менять в qt части (код доступен), вот только с чего начать не знаю.
Какие будут предложения коллеги :)

Забегая вперед скажу что пенести все в одну среду пока не вариант. Каждая составляющая 10000яч строк кода и написана разными людьми, так что пока нет возможности собрать все в кучу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 24.11.2010, 11:55
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


В винде есть такой прикол (случай из MFC, но он тем более показателен, так как тут классы, в отличие от чистого Си в АПИ) - в конструкторе класса окна хендл ещё не создан, поэтому дочерние окна оказываются в свободном полёте. Выхода два:

1) создавать дочерние после конструктора (WM_INITDIALOG или MFC::CView::OnInitDialog, или MFC::CDialog::OnInitialUpdate , либо в любой другой удобный момент)
2) после создания хендла окна задать родителя дочерям заново (в том же WM_INITDIALOG )

PS Конечно же, если использовался чистый WinAPI, то всё это неактуально, разве что был передан нулевой хендл в качестве родителя

Сообщение отредактировал Алексей1153 - 24.11.2010, 13:27
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Andrey_*
сообщение 24.11.2010, 20:08
Сообщение #3





Гости








    


Цитата(Алексей1153 @ 24.11.2010, 11:55) *
В винде есть такой прикол (случай из MFC, но он тем более показателен, так как тут классы, в отличие от чистого Си в АПИ) - в конструкторе класса окна хендл ещё не создан, поэтому дочерние окна оказываются в свободном полёте. Выхода два:

1) создавать дочерние после конструктора (WM_INITDIALOG или MFC::CView::OnInitDialog, или MFC::CDialog::OnInitialUpdate , либо в любой другой удобный момент)
2) после создания хендла окна задать родителя дочерям заново (в том же WM_INITDIALOG )

PS Конечно же, если использовался чистый WinAPI, то всё это неактуально, разве что был передан нулевой хендл в качестве родителя


Для встройки в MFC использовался чистый winapi уже в созданное окно с известным хендлом. делалось по нажатию на кнопку например. И встроилось все корректно и события qt работали корректно, единственное была проблма только с мышью....

Пост выше. Проблема решилась, но мне интересна суть проблемы, точнее что именно решило проблему. Ну и видимо можно сразу сказать что извне qt приложения его окно встроитть нормально не получиться. А жаль, на многих других приложениях все это работает на ура...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.12.2024, 16:03