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

Ваш аккаунт

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

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

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

Функция BringWindowToTop() наоборот или как поместить окно на задний план

1.9K
26 августа 2003 года
DarkSide
41 / / 14.03.2003
В WыньАПИ есть фунуции BringWindowToTop() и SetForegroundWindow(), которые помещают окно на передний план. Есть ли фунция которая делает обратное - т.е. помецает окно на задний план, причем так, чтобы даже при активации этого окна (мышкой, ALT+TAB) оно не активировалось? Т.е. нужно написать что-то типа своего шела вместо стандартного Explorer.exe
293
26 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Ради имнтереса - для чего
Ты хочешь применять ко всем окнам или только к окнам своей программы
1.9K
26 августа 2003 года
DarkSide
41 / / 14.03.2003
Цитата:
Originally posted by SEDEGOFF
Ради имнтереса - для чего
Ты хочешь применять ко всем окнам или только к окнам своей программы



Нет, только к своей программе (в том то и дело, что только к ней). Грубо говоря, нужно, чтобы при активации окна оно не активировалось :) и не вылезало на передний план... Прям как с десктопом (ведь когда мы кликаем на нем оно у нас не вылазиет поверх всех!)

293
27 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Если MDI - то ничего не получиться, иначе
отлавливай сообщение WM_ACTIVATE и если его славливает окно которое должно стоять и недергаться, то в обработке сообщения отдавай фокус главному окну
1.9K
28 августа 2003 года
DarkSide
41 / / 14.03.2003
Цитата:
Originally posted by SEDEGOFF
Если MDI - то ничего не получиться, иначе
отлавливай сообщение WM_ACTIVATE и если его славливает окно которое должно стоять и недергаться, то в обработке сообщения отдавай фокус главному окну



Пробовал. WM_ACTIVATE возвращает хэндл 0. Отлавливал через WindowProc, т.к. Application->OnMessage не ловит это сообщение. Есть другие варианты?

293
28 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Чуть позже выложу пример
293
29 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Вот тебе рабочий пример - работает как ты хотел. Builder 6
293
29 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Вот тебе пример - работает как ты хотел. Builder6
1.9K
29 августа 2003 года
DarkSide
41 / / 14.03.2003
Цитата:
Originally posted by SEDEGOFF
Вот тебе пример - работает как ты хотел. Builder6



Спасибо за пример, но это не то, что надо... Всеравно при клике на заблокированной форме оно выползает поверх остальных. Может нужно отлавливать не WM_ACTIVATE, а что-то, что отвечает за перенос окна на самый верх Z-order'а?

293
31 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Да нет, заблокированая форма моргнет а потом падае за главную форму. Другое дело что она перекрывает другие формы. А не проще ли сделать форму Hide и не мучиться. Зачем пользователю видеть окно к котороему он не может получить доступ?
1.9K
01 сентября 2003 года
DarkSide
41 / / 14.03.2003
Цитата:
Originally posted by SEDEGOFF
Да нет, заблокированая форма моргнет а потом падае за главную форму. Другое дело что она перекрывает другие формы. А не проще ли сделать форму Hide и не мучиться. Зачем пользователю видеть окно к котороему он не может получить доступ?



Нет. Метод hide тут совсем не подойдет. Нужно создать свой "робочий стол". В WinAPI нашел ф-цию CreateDesktop и остальный зависимымые ф-ции. Может её стоит юзать?

293
02 сентября 2003 года
SEDEGOFF
586 / / 06.10.2002
На счет этой функции не знаю. Но я делал нечто подобное, но не даделал
Идея следующая
FormStyle=StayOnTop
BorderStyle=bsNone
При запуске растягивал эту форму на весь экран и все - получалось некоторое подобие DeskTop. Осталось только отловить нажание Alt+Tab, Скрыть из Ctrl+Alt+Del И спратать меню "ПУСК". Как это сделать очень хорошо расказано в инете
1.9K
03 сентября 2003 года
DarkSide
41 / / 14.03.2003
Нет. StayOnTop здесь как раз вообще не подходит потому что форма должна быть наоборот ниже всех (как и рабочий стол)... Это я делаю спомощью SetWindowPos(Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); Но все равно при клике на этой форме она вылазиет поверх других приложений.
293
03 сентября 2003 года
SEDEGOFF
586 / / 06.10.2002
Так ты все остальные формы твоего приложения делай MDIChild - и они всегда будут над твоим главным окном
1.9K
03 сентября 2003 года
DarkSide
41 / / 14.03.2003
Опять вы меня не поняли... ;-)
Я работаю с окнами разных приложений!
И мое приложение состоит только из одного окна.... Вот его то и нужно сделать ниже всех и убрать его активизацию, чтобы оно не вылазило поверх остальных ПРИЛОЖЕНИЙ ЗАПУЩЕННЫХ В СИСТЕМЕ! :-) Вот в чем вопрос!
295
03 сентября 2003 года
gray_k
356 / / 20.12.1999
Функция SetWindowPos(Handle/*твоего окна*/,HWND_BOTTOM, ....);
1.9K
03 сентября 2003 года
DarkSide
41 / / 14.03.2003
2 gray_k:
читайте предыдущие посты внимательней. Эта ф-ция уже обсуждалась и она не дает требуемого результата
293
04 сентября 2003 года
SEDEGOFF
586 / / 06.10.2002
сразу говорю плотно не копал но всетаки
http://www.delphiworld.narod.ru/desktop.html

Ну и из Helpa


[COLOR=darkblue]Функция BringWindowToTop помещает указанное окно в вершину Z-последовательности. Если окно является окном верхнего уровня – оно активизируется. Если окно представляет собой дочернее окно – активизируется родительское окно верхнего уровня.

BOOL BringWindowToTop(

HWND hWnd // дескриптор окна
);


Параметры

hWnd – идентифицирует окно, помещаемое в вершину Z-последовательности.

Возвращаемые значения

В случае успеха возвращается ненулевое значение.

В случае неудачи возвращается нуль. Для получения дополнительной информации вызовите функцию GetLastError.

Комментарии

Используйте функцию BringWindowToTop для вывода окна, частично или полностью закрытого другими окнами, на передний план.

Результат вызова этой функции похож на результат вызова SetWindowPos для изменения позиции окна в Z-последовательности, но вызов BringWindowToTop не делает указанное окно окном верхнего уровня.

Если приложение не находится на переднем плане, и необходимо сделать его приложением переднего плана, вызовите функцию SetForegroundWindow.

См. также

SetWindowPos, SetActiveWindow, SetForegroundWindow.[/COLOR]



Ну и еще
[COLOR=orangered]Функция SetForegroundWindow помещает поток, создавший указанное окно на передний план и активизирует окно. Ввод с клавиатуры направляется в окно.

BOOL SetForegroundWindow(

HWND hWnd // дескриптор окна, помещаемого на передний план
);


Параметры

hWnd – идентифицирует окно, которое должно быть активизировано и помещено на передний план.

Возвращаемые значения

В случае успеха возвращается ненулевое значение.

В случае неудачи возвращается нуль. Для дополнительной информации об ошибке вызовите функцию GetLastError.

Комментарии

Окном переднего плана является окно, находящееся в вершине Z-последовательности. Это окно, с которым пользователь работает в настоящий момент. В среде с вытесняющей многозадачностью вы должны позволять пользователю самому распоряжаться, какое окно является активным. Тем не менее, приложение может вызвать SetForegroundWindow, если ему необходимо поместить себя на передний план для отображения критической ошибки или информации, которая требует немедленного рассмотрения пользователем. Хорошим примером является отладчик, когда он попадает на точку останова.

Система предоставляет потоку, создавшему окно переднего плана несколько более высокий приоритет, чем другим потокам.

См. также

GetForegroundWindow.[/COLOR]

Ну и еще

[COLOR=indigo]Функция ShowWindow устанавливает режим отображения заданного окна.

BOOL ShowWindow(

HWND hWnd, // дескриптор окна
int nCmdShow // режим отображения окна
);


Параметры

hWnd – идентифицирует окно.

nCmdShow – определяет, как будет отображаться окно. Этот параметр не учитывается, если приложение первый раз вызывает функцию ShowWindow, а программа, запустившая данное приложение, предоставила структуру типа STARTUPINFO. В других случаях, когда функция ShowWindow вызывается первый раз, значение параметра nCmdShow должно быть равно значению, переданному функции WinMain ее параметром nCmdShow. В последующих вызовах ShowWindow, параметр nCmdShow может принимать одно из следующих значений:

Значение Пояснение
SW_HIDE Скрывает заданное окно и активизирует другое окно.
SW_MAXIMIZE Максимизирует окно.
SW_MINIMIZE Минимизирует заданное окно и активизирует следующее окно верхнего уровня в Z-упорядоченности.
SW_RESTORE Активизирует и отображает окно. Если окно минимизировано или максимизировано, то Windows восстанавливает его первоначальные размеры и положение. Приложение должно задать этот флаг, восстанавливая минимизируемое окно.
SW_SHOW Активизирует окно и отображает его в соответствии с текущим положением и размерами.
SW_SHOWDEFAULT Устанавливает режим отображения в соответствии с флагом SW_, определенном в структуре типа STARTUPINFO, переданной функции CreateProcess программой, запустившей данное приложение.
SW_SHOWMAXIMIZED Активизирует окно и отображает его максимизированным.
SW_SHOWMINIMIZED Активизирует окно и отображает его минимизированным.
SW_SHOWMINNOACTIVE Минимизирует окно. Активное окно остается активным.
SW_SHOWNA Отображает окно в его текущем состоянии. Активное окно остается активным.
SW_SHOWNOACTIVATE Отображает окно в соответствии с его последними размерами и положением. Активное окно остается активным.
SW_SHOWNORMAL Активизирует и отображает окно. Если окно минимизировано или максимизировано, Windows восстанавливает его начальные размеры и положение. Приложение должно задать этот флаг, отображая окно в первый раз.
Возвращаемые значения

Если окно перед вызовом функции было видимым, то возвращается ненулевое значение.
Если окно перед вызовом функции было скрытым, то возвращается нуль.

Комментарии

Первый раз, когда приложение вызывает функцию ShowWindow, оно использует параметр nCmdShow функции WinMain в качестве параметра nCmdShow функции ShowWindow. Последующие вызовы ShowWindow должны использовать одно из значений из приведенного выше списка вместо значения параметра nCmdShow функции WinMain.
Значение nCmdShow не учитывается при первом вызове функции ShowWindow, если программа, запустившая данное приложение, задала информацию для запуска в структуре типа STARTUPINFO. В этом случае, ShowWindow для отображения окна использует информацию из этой структуры. При последующих вызовах приложение должно вызывать ShowWindow со значением параметра nCmdShow, установленным в SW_SHOWDEFAULT для использования информации для запуска, предоставленной программой, запустившей данной приложение. Например, Диспетчер Программ (Program Manager) определяет, что приложения запускаются с минимизированным главным окном. Такое поведение предназначено для следующих ситуаций:

Приложения создают свое собственное главное окно, вызывая функцию CreateWindow с установленным флагом WS_VISIBLE.
Приложения создают свое собственное главное окно, вызывая функцию CreateWindow с неустановленным флагом WS_VISIBLE, вызывая впоследствии ShowWindow с флагом установленным SW_SHOW.

См. также

CreateProcess, CreateWindow, ShowOwnedPopups, STARTUPINFO, WinMain.[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог