Qt setParent (WinAPI) |
Здравствуйте, гость ( Вход | Регистрация )
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
|
Гости |
В винде есть такой прикол (случай из MFC, но он тем более показателен, так как тут классы, в отличие от чистого Си в АПИ) - в конструкторе класса окна хендл ещё не создан, поэтому дочерние окна оказываются в свободном полёте. Выхода два: 1) создавать дочерние после конструктора (WM_INITDIALOG или MFC::CView::OnInitDialog, или MFC::CDialog::OnInitialUpdate , либо в любой другой удобный момент) 2) после создания хендла окна задать родителя дочерям заново (в том же WM_INITDIALOG ) PS Конечно же, если использовался чистый WinAPI, то всё это неактуально, разве что был передан нулевой хендл в качестве родителя Для встройки в MFC использовался чистый winapi уже в созданное окно с известным хендлом. делалось по нажатию на кнопку например. И встроилось все корректно и события qt работали корректно, единственное была проблма только с мышью.... Пост выше. Проблема решилась, но мне интересна суть проблемы, точнее что именно решило проблему. Ну и видимо можно сразу сказать что извне qt приложения его окно встроитть нормально не получиться. А жаль, на многих других приложениях все это работает на ура... |
|
|
Текстовая версия | Сейчас: 28.12.2024, 16:03 |