Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сделать окно дочерним?

6.2K
25 августа 2008 года
abdyla_v
40 / / 02.02.2006
Всем привет!
У меня такой ворос : Как сделать окно созданое в C# (class MyDialog : Form) дочерним к окну созданого проекта на С++ (Win32)??
Есть HWND окна Win32 и она MyDialog в C#! Пробывал WinAPI функцию SetParent, но ничего не получилось : запустив приложение оба окна не доступны (отображаются но никаких действий нельзя с ними делать).
Юзаю COM в С++. Тоесть что я хочу - Что бы окно написаное на шарпе было дочерним по сравнению в моему окну написаному на WinAPI C++(не выходило за область родительського например!). Сейчас когда я запускаю окно (в шарпе ShowDialog() или Show() - оно у меня как диалоговое вызывается).
3.7K
25 августа 2008 года
0nni
326 / / 24.06.2008
Попробуй сделать следующее
 
Код:
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) | WS_CHILD);//Стиль дочернего окна
SetWindowLong(Handle, GWL_HWNDPARENT, ParentHandle);//Впринципе можно и SetParet()
6.2K
25 августа 2008 года
abdyla_v
40 / / 02.02.2006
Впринцыпе так как и было (когда запускаеш приложение то дочернее окно типа не актовное). Но когда начинаеш его тягать то оказывается что оно как модальное - выходит за область родителя например.
3.7K
25 августа 2008 года
0nni
326 / / 24.06.2008
Я так понял Show() это метод формы, попробуй вместо этого использовать
 
Код:
ShowWindow(Handle, SW_SHOW)
6.2K
25 августа 2008 года
abdyla_v
40 / / 02.02.2006
я делал двумя путями и как ты говориш и вызывал функцию COM-обьэкта, где запускал окно с шарпа! Работает одинаково!
3.7K
26 августа 2008 года
0nni
326 / / 24.06.2008
Я не знаком с C# поэтому чем еще помочь не знаю. :(
Единственное скажу, то что ты хочешь сделать называется MDI. И там используется не простое окно и не простой родитель.
6.2K
29 августа 2008 года
abdyla_v
40 / / 02.02.2006
Заработало! Нужно было еще добавить код :
 
Код:
SetWindowPos(Handle,0, 0, 0, 0, 0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_FRAMECHANGED);


Цитата (msdn)
Цитата:

If you have changed certain window data using SetWindowLong, you must call SetWindowPos to have the changes take effect. Use the following combination for uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог