Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Создание "сквозной" формы средствами WinAPI

Ответить
Настройки темы
Win32 API - Создание "сквозной" формы средствами WinAPI

Новый участник


Сообщения: 21
Благодарности: 1

Профиль | Отправить PM | Цитировать


Под сквозным понимаю пропускающее сквозь себя сообщения мыши и драгндропа в любой области, независимо от цвета заполнения. Никто не подскажет как можно подобное осуществить?
Предполагается, что окно будет полупрозрачным и будет осуществлять функцию вывода текстовой и графической информации.

Отправлено: 17:51, 26-04-2009

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


garkin123 самое простое это найти перед запуском программы выделенное окно с помощью функции GetForegroundWindow(), а на события мыши и Драг & Дропа (в некоторой русскоязычной литературе данный термин заменяют одним словом - "Буксирования", подразумевая что мышь буксир выделенного объекта) выделять с помощью функции SetForegroundWindow() то окно по хендлу, таким образом сообщения будут на сквозь проходить.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:00, 27-04-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 21
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Admiral:
а на события мыши и Драг & Дропа »
То есть само окно должно получать эти события, смещая по ним фокус на SetForegroundWindow? И будет ли этот способ работать, если "сквозное" окно находится над несколькими другими, разрешая доступ к ним всем, учитывая так же что они будут иногда сменять друг друга?

И вопрос, что из себя представляют события "буксировки" и как их перехватывать средствами WinAPI, просто максимум, что я знаю об этом это то, что эти процессы осуществляются при помощи OLE.

И правильно ли я понял, что не существует способа задать окну такой стиль, чтобы оно перестало учавствовать/мешать в итерациях пользователя с компьютером, при этом отображаясь на экране?

Отправлено: 14:23, 27-04-2009 | #3


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


garkin123, да, такая идея. В этом случаи нужно будет искать хендл окна, которое перекрыто, опираясь на показания Z-Ordera. Что бы учитывать, что перекрытых окон может быть несколько, нужно будет оперировать координатами.

События буксировки такие же как и остальные события (если быть точным, окно получает зажатую и опушенную клавишу мыши в момент передачи объекта), нужно будет сделать своё окно буксиро-приёмным и получать на себя объекты, а потом отправить его другому окну.
Абсолютно верно, достаточно подробно данный вопрос описан в книге Inside OLE by Kraig Brockschmidt (на русском не встречал). Есть уже и 2я редакция.
Вкратце на данную тему есть туториал, правда тоже на английском языке OLE Drag and Drop

Если кто знает такой, то пусть отпишется, буду благодарен.
P.S.
Есть WS_DISABLED, но он клики на себя берёт, но в отличии от других "ENABLED" стилей по заголовку окна не видна передача событий мыши.

Последний раз редактировалось Admiral, 27-04-2009 в 19:56.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:45, 27-04-2009 | #4


Новый участник


Сообщения: 21
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

WS_EX_TRANSPARENT:=0x20
&&
WS_EX_LAYERED := 0x80000
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:50, 28-04-2009 | #5


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


garkin123,
P.S. Для полной прозрачности можно добавить ещё и WS_EX_TOPMOST, что б само окно при прохождении событий не терялось из виду.
Без WS_EX_LAYERED не получилась бы визуальная прозрачность выставляемая функцией SetLayeredWindowAttributes()
Можно отметить тему решённой
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:27, 29-04-2009 | #6


Аватара для hackroute

Пользователь


Сообщения: 62
Благодарности: 11

Профиль | Отправить PM | Цитировать


так все таки тема нерешена? или garkin123 все же сделал что хотел и если сделал то опиши как)

-------
HackRoute


Отправлено: 22:59, 14-11-2009 | #7


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


hackroute, тема действительно решена. WS_EX_TRANSPARENT это расширенный стиль окна, который нужно задавать в первый параметр функции CreateWindowEx - в результате будет создано сквозное окно.
Если трудности с построением WIN32 приложения, то каркас можно посмотреть в этой теме.

Отправлено: 23:41, 14-11-2009 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Создание "сквозной" формы средствами WinAPI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Создание "Прогресса" на время работы "InetGetSize" sashadeg AutoIt 24 30-09-2009 15:26
Отправка формы без кнопки "Submit" CTEPBA Вебмастеру 3 15-09-2006 14:21
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29
Delphi - Delphi | создание окна и его элементов средствами WinAPI Savant Программирование и базы данных 14 18-01-2005 14:15
method="post" формы и передача переменных в PHP Prisoner Вебмастеру 5 26-04-2003 18:01




 
Переход