SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) | WS_CHILD);//Стиль дочернего окна
SetWindowLong(Handle, GWL_HWNDPARENT, ParentHandle);//Впринципе можно и SetParet()
Как сделать окно дочерним?
У меня такой ворос : Как сделать окно созданое в C# (class MyDialog : Form) дочерним к окну созданого проекта на С++ (Win32)??
Есть HWND окна Win32 и она MyDialog в C#! Пробывал WinAPI функцию SetParent, но ничего не получилось : запустив приложение оба окна не доступны (отображаются но никаких действий нельзя с ними делать).
Юзаю COM в С++. Тоесть что я хочу - Что бы окно написаное на шарпе было дочерним по сравнению в моему окну написаному на WinAPI C++(не выходило за область родительського например!). Сейчас когда я запускаю окно (в шарпе ShowDialog() или Show() - оно у меня как диалоговое вызывается).
Код:
Впринцыпе так как и было (когда запускаеш приложение то дочернее окно типа не актовное). Но когда начинаеш его тягать то оказывается что оно как модальное - выходит за область родителя например.
Код:
ShowWindow(Handle, SW_SHOW)
я делал двумя путями и как ты говориш и вызывал функцию COM-обьэкта, где запускал окно с шарпа! Работает одинаково!
Единственное скажу, то что ты хочешь сделать называется MDI. И там используется не простое окно и не простой родитель.
Код:
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.