|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Создание "сквозной" формы средствами WinAPI |
|
Win32 API - Создание "сквозной" формы средствами WinAPI
|
Новый участник Сообщения: 21 |
Профиль | Отправить PM | Цитировать Под сквозным понимаю пропускающее сквозь себя сообщения мыши и драгндропа в любой области, независимо от цвета заполнения. Никто не подскажет как можно подобное осуществить?
Предполагается, что окно будет полупрозрачным и будет осуществлять функцию вывода текстовой и графической информации. |
|
Отправлено: 17:51, 26-04-2009 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать garkin123 самое простое это найти перед запуском программы выделенное окно с помощью функции GetForegroundWindow(), а на события мыши и Драг & Дропа (в некоторой русскоязычной литературе данный термин заменяют одним словом - "Буксирования", подразумевая что мышь буксир выделенного объекта) выделять с помощью функции SetForegroundWindow() то окно по хендлу, таким образом сообщения будут на сквозь проходить.
|
Отправлено: 02:00, 27-04-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Цитата Admiral:
И вопрос, что из себя представляют события "буксировки" и как их перехватывать средствами WinAPI, просто максимум, что я знаю об этом это то, что эти процессы осуществляются при помощи OLE. И правильно ли я понял, что не существует способа задать окну такой стиль, чтобы оно перестало учавствовать/мешать в итерациях пользователя с компьютером, при этом отображаясь на экране? |
|
Отправлено: 14:23, 27-04-2009 | #3 |
Ветеран Сообщения: 3320
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать В общем, как и многие вещи в нашей жизни, после долгих поисков и уже было начавшегося процесса написания функции для вывода через рисование в контекст экрана и во время поиска информации для оного, обнаружились две строчки кода, в корне меняющие все и делающие бесполезной всю выполненную работу.
WS_EX_TRANSPARENT:=0x20 && WS_EX_LAYERED := 0x80000 |
|
Отправлено: 17:50, 28-04-2009 | #5 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать garkin123,
P.S. Для полной прозрачности можно добавить ещё и WS_EX_TOPMOST, что б само окно при прохождении событий не терялось из виду. Без WS_EX_LAYERED не получилась бы визуальная прозрачность выставляемая функцией SetLayeredWindowAttributes() Можно отметить тему решённой |
Отправлено: 03:27, 29-04-2009 | #6 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать так все таки тема нерешена? или garkin123 все же сделал что хотел и если сделал то опиши как)
|
------- Отправлено: 22:59, 14-11-2009 | #7 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать hackroute, тема действительно решена. WS_EX_TRANSPARENT это расширенный стиль окна, который нужно задавать в первый параметр функции CreateWindowEx - в результате будет создано сквозное окно.
Если трудности с построением WIN32 приложения, то каркас можно посмотреть в этой теме. |
Отправлено: 23:41, 14-11-2009 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Создание "Прогресса" на время работы "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 |
|