Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/65: Рейтинг темы: голосов - 65, средняя оценка - 4.98
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
1

Как при помощи WinAPI создать прозрачные окна?

01.08.2011, 19:17. Показов 13485. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как при помощи WinAPI создать прозрачные окна?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.08.2011, 19:17
Ответы с готовыми решениями:

Как избавится от родительского консольного окна при создание WinAPI окна
добрый день. использую DEV-C++, но так понимаю разницы нет, какая у нас IDE. создаём просто файл или пустой проект методом...

Как разобрать emf-файл при помощи WinApi?
Господа, как используя функции winAPI получить информацию о полях Enhanced Metafile(данные о типе функций(типа LineTo(), Ellipse() и т.п. и...

Как избавться от основного окна Microsoft Access при помощи VBA?
Подскажите как избавться от основного окна Microsoft Access при помощи VBA. Хотелось бы чтобы приложение внешне выглядело какбы полностью...

12
 Аватар для bretba
63 / 58 / 13
Регистрация: 24.07.2011
Сообщений: 343
01.08.2011, 20:33 2
http://msdn.microsoft.com/en-u... s.85).aspx

Вот тут смотри,это стили окна.Этот стили являются параметром функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HWND WINAPI CreateWindow(
  LPCTSTR lpClassName,
  LPCTSTR lpWindowName,
  DWORD dwStyle,
  int x,
  int y,
  int nWidth,
  int nHeight,
  HWND hWndParent,
  HMENU hMenu,
  HINSTANCE hInstance,
  LPVOID lpParam
);
DWORD dwStyle вот этот параметр является стилем окна...На том сайте,который я тебе дал,где имеются все стили,ищи нужный тебе,я не помню какой...если английский знаешь то найдешь...
1
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
02.08.2011, 11:29 3
Не, bretba, это не то. Вот, тоже MSDN:

C++
1
2
SetWindowLong (hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes (hWnd, 0, (255*70)/100, LWA_ALPHA);
3
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.08.2011, 10:49 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
BOOL (WINAPI *pSetLayer)(HWND,COLORREF,BYTE,DWORD);
int CTXPDlg::SetWndTransp(HWND hWnd, int transp)
{
    HINSTANCE hMod = LoadLibrary("user32.dll");
//WINSHELLAPI HINSTANCE APIENTRY ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
//WINSHELLAPI HINSTANCE APIENTRY ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd);
//    HWND hWnd = CDialog::m_hWnd;
 // ShellExecute(NULL,"open","notepad.exe",NULL,NULL,SW_SHOWNORMAL);
    if(hMod)
    {
        pSetLayer = (int(__stdcall*)(HWND,COLORREF,BYTE,DWORD))GetProcAddress(hMod,"SetLayeredWindowAttributes");
        if(pSetLayer)
        {
            if(SetWindowLong(hWnd,GWL_EXSTYLE,0x80000))
            {
                if(!pSetLayer(hWnd,0,255-transp*255/100,0x02))
                    MessageBox("Error pSetLayer","Error",MB_OK|MB_ICONSTOP);
            }
            else
                MessageBox("Error SetWindowLong","Error",MB_OK|MB_ICONSTOP);
        }
        else
            MessageBox("Error GetProcAddress","Error",MB_OK|MB_ICONSTOP);
    }
    else
        MessageBox("Error load user32.dll","Error",MB_OK|MB_ICONSTOP);
    if(!FreeLibrary(hMod))
        MessageBox("Error FreeLibrary","Error",MB_OK|MB_ICONSTOP);
    return transp;
}
Миниатюры
Как при помощи WinAPI создать прозрачные окна?  
Вложения
Тип файла: rar tXP.rar (18.7 Кб, 178 просмотров)
3
 Аватар для VadimTagil
54 / 44 / 11
Регистрация: 15.07.2011
Сообщений: 160
04.08.2011, 10:35 5
SetWindowLong(hWnd,GWL_EXSTYLE,0x80000)
Что такое 0x80000 ? Может есть какая-то константа
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.08.2011, 10:45 6
Да есть
WS_EX_LAYERED
http://msdn.microsoft.com/en-u... s.85).aspx
тот проект делал в 6-й версии студии, и эта константа шла как not defined так что просто вбил её значение
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
04.08.2011, 10:59 7
*.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#define _WIN32_WINNT 0x0500
#include <windows.h>
 
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg,
    WPARAM wParam, LPARAM lParam);
 
int main(int argc, char *argv[])
{
    HMODULE hInstance = GetModuleHandle(0);
    DialogBox(hInstance, MAKEINTRESOURCE(100), 0, DialogProc);
}
 
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg,
    WPARAM wParam, LPARAM lParam)
{
    static HBRUSH BgBrush;
    switch (uMsg)
    {
    case WM_INITDIALOG:
        BgBrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
        SetWindowLong(hwndDlg, GWL_EXSTYLE,
            GetWindowLong(hwndDlg, GWL_EXSTYLE) | WS_EX_TRANSPARENT | WS_EX_LAYERED
            );
        SetLayeredWindowAttributes(hwndDlg, 0, 180, LWA_COLORKEY | LWA_ALPHA);
        return TRUE;
    case WM_CTLCOLORDLG:
        return (INT_PTR)BgBrush;
    case WM_CTLCOLORSTATIC:
        SetTextColor((HDC)wParam, 0x00FF00);
        SetBkColor((HDC)wParam, 0x808080);
        return (INT_PTR)BgBrush;
    }
    return FALSE;
}
*.rc
C++
1
2
3
4
5
6
7
8
9
#include <winresrc.h>
 
100 DIALOGEX 0, 0, 150, 8
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_TOPMOST
STYLE WS_VISIBLE | WS_POPUP | DS_CENTER
FONT 30, "Tahoma", 800
{
    CTEXT "Превед!", 101, 0, 0, 150, 8
}
1
Нарушитель
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,913
29.07.2020, 17:44 8
Цитата Сообщение от Digit@ll Посмотреть сообщение
Не, bretba, это не то. Вот, тоже MSDN:

C++
1
2
SetWindowLong (hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes (hWnd, 0, (255*70)/100, LWA_ALPHA);
А какую роль здесь играет SetWindowLong ? Почему SetLayeredWindowAttributes без SetWindowLong - не хочет работать ?
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
29.07.2020, 18:16 9
SetLayeredWindowAttributes() и вторая-как-её-там - работают только для окон имеющих стиль WS_EX_LAYERED.
Через SetWindowLong() помимо прочего можно устанавливать (изменять) стиль окна уже после его создания.
Но если ваше окно уже имеет стиль WS_EX_LAYERED - то SetWindowLong() вам незачем.

Добавлено через 1 минуту
Другой нюанс - если вы хотите например сбросить SetLayeredWindowAttributes() и применить вторую-как-её-там - то для этого надо убрать стиль, а затем снова его добавить.

Добавлено через 2 минуты
Не припомню точно, надо ли сбрасывать при изменении флага SetLayeredWindowAttributes() между LWA_ALPHA и LWA_COLORKEY...
Но это легко проверить на практике, и возможно даже будет быстрее чем доставать доки.
1
Неэпический
 Аватар для Croessmah
18124 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,997
Записей в блоге: 1
29.07.2020, 19:40 10
Цитата Сообщение от GoodWeather Посмотреть сообщение
вторую-как-её-там
UpdateLayeredWindow
1
Нарушитель
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,913
29.07.2020, 21:35 11
Цитата Сообщение от GoodWeather Посмотреть сообщение
SetLayeredWindowAttributes() и вторая-как-её-там - работают только для окон имеющих стиль WS_EX_LAYERED.
Спасибо!

SetLayeredWindowAttributes, как то не много странно работает, если к слою окна применить LWA_ALPHA и поставить значение 0 - то есть полностью прозрачное - окно становится прозрачным, но и окна, как бы не существует, потому что оно сообщения не перехватывает.

А если прозрачность, поставить хотя бы 1(по факту окно тоже не видно), то тут все нормально.
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
29.07.2020, 23:08 12
Окна не "перехватывают" сообщения, они просто "получают" их от ОС. Про какие именно сообщения идёт речь?
Если вы про что-то из разряда WM_MOUSEMOVE - полная прозрачность тождественна невидимому окну.
Невидимые окна разумеется не будут получать сообщения мыши, потому что технически мышь не считается над ними.
1
Нарушитель
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,913
29.07.2020, 23:29 13
Цитата Сообщение от GoodWeather Посмотреть сообщение
Окна не "перехватывают" сообщения, они просто "получают" их от ОС. Про какие именно сообщения идёт речь?
Если вы про что-то из разряда WM_MOUSEMOVE - полная прозрачность тождественна невидимому окну.
Невидимые окна разумеется не будут получать сообщения мыши, потому что технически мышь не считается над ними.
Да имел ввиду что то типа WM_MOUSEMOVE.
Интересно, зачем тогда предусмотрена возможность создания полностью прозрачного окна, где оно может использоваться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2020, 23:29
Помогаю со студенческими работами здесь

Копирование в буфер при помощи WinAPI
Приветствую. пытаюсь скопировать информацию с окна в буфер при помощи ф-ции WINAPI SendMessage. Вот как я ее объявил: Public...

Манифест и winapi (прозрачные checkbox-ы)
Доброго времени суток.... В общем так.. подключил манифест к своей проге , и мне интересно я сделал фон окна серым, и когда создаю...

Вывести при помощи WinAPI картинку в окошко
Здравствуйте. Расскажу вкратце о проблеме: имеется стандартное окошко со своим курсором и иконкой, т.е. код почти минимален. ...

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

Как при помощи средств XmlWriter создать файл XML
как при помощи средств XmlWriter создать подобный файл &lt;rdf:RDF xmlns:xsi=&quot;http&quot; xmlns:rdf=&quot;&quot;&gt; &lt;edu:Direction...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
WebAssembly в Kubernetes
stackOverflow 03.03.2025
В современной экосистеме облачных технологий WebAssembly (Wasm) становится все более значимым компонентом, предлагая уникальный подход к выполнению кода в распределенных системах. Эта технология. . .
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) изменили подход к разработке программного обеспечения, превратив его в бесшовный процесс от написания кода до развертывания в продакшн. GitHub Actions и. . .
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Масштабные проекты с использованием Kubernetes требуют надежной системы тестирования изменений перед их внедрением в продакшн-среду. Традиционный подход с ручной проверкой Pull Request не справляется. . .
Tестирование Pull Request в Kubernetes с помощью vCluster
stackOverflow 03.03.2025
При работе с микросервисной архитектурой критически важно обеспечить качественное тестирование каждого изменения перед его слиянием в основную кодовую базу. Однако тестирование Pull Request в. . .
Использование пакета Context в Golang
bytestream 03.03.2025
Управление параллельными процессами в современных приложениях - сложная задача, особенно когда речь идет о микросервисной архитектуре и распределенных системах. Пакет context в Go - это гибкое. . .
WebAssembly и Go: Работа с DOM и обработка ошибок
bytestream 03.03.2025
WebAssembly представляет собой технологию, позволяющую запускать низкоуровневый код в браузере практически на нативной скорости. Особенно интересные возможности открываются при использовании. . .
WebAssembly и Go: Создание высокопроизводи­­тельных веб-приложений
bytestream 03.03.2025
WebAssembly - это технология, изменившая подход к созданию высокопроизводительных веб-приложений. До появления WebAssembly JavaScript оставался единственным языком программирования, который понимали. . .
Контексты в Go: отмена, тайм-ауты и распространение
bytestream 03.03.2025
В многопоточном программировании существует множество ситуаций, когда необходимо прерывать выполнение горутин или ограничивать время их работы. Отсутствие грамотного управления параллельными. . .
WebSocket в Go: создание масштабируемых real-time приложений
bytestream 03.03.2025
Веб-приложения все чаще требуют обработки данных в режиме реального времени. Традиционный подход с использованием HTTP-запросов имеет существенные ограничения для таких сценариев. При каждом запросе. . .
Как дебажить в Go: Руководство по отладке
bytestream 03.03.2025
Отладка в Go имеет свои особенности, связаные с строгой типизацией, моделью конкурентности и управлением памятью. Go предоставляет богатый набор встроеных средств для отладки, которые дополняются. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru