Как создать дочернее окно, которое не будет лежать на поверхности родительского?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Как создать дочернее окно, которое не будет лежать на поверхности родительского, а сможет перемещаться по всему рабочему столу?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Лично я делаю так: создаю дочернее окно и в качестве родительского указываю ему окно рабочего стола Windows.
Дескриптор окна рабочего стола можно получить с помощью функции GetDesktopWindow();
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

WinMain писал(а):Лично я делаю так: создаю дочернее окно и в качестве родительского указываю ему окно рабочего стола Windows.
Странная метода. Оно же должно быть дочерним не рабочего стола, а одного из окон программы. Просто его не надо ограничивать в перемещениях границами родительского окна. Но при закрытии родительского оно тоже должно закрыться.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Код: Выделить всё

	HWND hParent = ::GetDesktopWindow();
	DWORD dwExStyle = WS_EX_PALETTEWINDOW;
	DWORD dwStyle = WS_SYSMENU | WS_VISIBLE | WS_THICKFRAME;
	::CreateWindowEx(dwExStyle, _T("LISTBOX"), _T("Child window"), 
					dwStyle, 10, 10, 300, 250, hParent, NULL, hInst, NULL);
Создаёшь таким образом дополнительное окно и перемещай его по всему экрану.
Поумнеть несложно, куда труднее от дури избавиться.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Пэрентом должно быть своё окно, весь экран - только для границ перемещения.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Так не получится. Операционная система запрещает перемещения чайлда за границы парента.

А зачем ты вводишь такое требование на парента? Проанализируй это требование. С большой долей вероятности оно надумано.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Дескриптор главного окна приложения можно указать в качестве родительского, но в данном случае разницы не будет никакой. Родительское окно актуально в случае создания модального диалога. Тогда родительское окно блокируется и не обрабатывает входящие сообщения, пока не будет закрыт модальный диалог. Ещё родительское окно можно использовать для отправки ему оконных сообщений из немодального дочернего окна, но это можно делать и другим способом.
Поумнеть несложно, куда труднее от дури избавиться.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Каким таким способом оно может узнать, куда отправлять? А если бы они были, то их же можно юзать и для блокировки одного окна пока не закроется другое.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить