On-line: Dr. Oldwarez, гостей 1. Всего: 2 [подробнее..]
АвторСообщение



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 06.12.06 09:37. Заголовок: MiniGUI Прозрачная форма


Может кому надо!

Пример формирования прозрачной формы.
Работает в Windows 2000 и выше. В Windows 98 обычная форма.
Сделано на основе статьи
http://ufps.chukotka.ru/~jm/gamedev.chat.ru/articles/a0036.html

#include "minigui.ch"
Function Main()
nTra:=100
DEFINE WINDOW WinTr AT 0,0 WIDTH 300 HEIGHT 300 TITLE 'Прозрачное окно' ;
MAIN NOSIZE NOMAXIMIZE
@ 200,100 BUTTON But1 CAPTION "Нажми" HEIGHT 35 WIDTH 100;
ACTION (IIF(nTra=100,nTra:=255,ntra:=100) , SetTransparent(hWnd,nTra) )
END WINDOW
WinTR.Center
hWnd=GetFormHandle('WinTR')
SetTransparent(hWnd,nTra)
ACTIVATE WINDOW WinTR
RETURN

#pragma BEGINDUMP

#define _WIN32_IE 0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400
#define WS_EX_LAYERED 0x80000
#define LWA_ALPHA 0x02
#define GWL_EXSTYLE (-20)

#include <windows.h>
#include "hbapi.h"
#include<stdio.h>
#include<string.h>
#include<shellapi.h>


HB_FUNC( SETTRANSPARENT)

{

typedef BOOL (__stdcall *PFN_SETLAYEREDWINDOWATTRIBUTES)(HWND,COLORREF,BYTE,DWORD);

PFN_SETLAYEREDWINDOWATTRIBUTES pfnSetLayeredWindowAttributes = NULL;

HINSTANCE hLib = LoadLibrary("user32.dll");

if (hLib != NULL)
{
pfnSetLayeredWindowAttributes = (PFN_SETLAYEREDWINDOWATTRIBUTES)GetProcAddress(hLib,"SetLayeredWindowAttributes");
}

if (pfnSetLayeredWindowAttributes)
{
SetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE,GetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE) | WS_EX_LAYERED);
pfnSetLayeredWindowAttributes((HWND) hb_parnl (1), 0, hb_parni (2), LWA_ALPHA);
}

if (!hLib)
{
FreeLibrary(hLib);
}

}

#pragma ENDDUMP


Спасибо: 0 
Цитата Ответить
Ответов - 26 , стр: 1 2 All [только новые]


постоянный участник


Пост N: 85
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.01.07 15:24. Заголовок: Re:


Dima пишет:

 цитата:
@ 3, 4 BUTTON oBtn1 PROMPT "TEST" OF oDlg SIZE 40, 12 ;
ACTION ( hdc:=odlg:getdc(),SETTRANSPARENT(hdc,255))



Почему getdc(), это наверное возвращает контекст устройства, а не хэндл окна

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 30
Зарегистрирован: 27.04.06
ссылка на сообщение  Отправлено: 05.01.07 15:25. Заголовок: Re:


ACTION ( hdc:=odlg:getdc(),SETTRANSPARENT(hdc,255)) :
hdc заменяем oDlg

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 31
Зарегистрирован: 27.04.06
ссылка на сообщение  Отправлено: 05.01.07 15:28. Заголовок: Re:


то есть oDlg:hWnd

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 86
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.01.07 15:29. Заголовок: Re:


И еще SETTRANSPARENT(hdc,255) - при значении Alpha :=255 тяжело будет увидеть прозрачность

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 578
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.01.07 15:35. Заголовок: Re:


Виноват, все работает.
Переделал кусок
@ 3, 4 BUTTON oBtn1 PROMPT "TEST" OF oDlg SIZE 40, 12 ;
ACTION ( chdc:=GetActiveWindow(),SETTRANSPARENT(chdc,125))


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 579
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.01.07 15:46. Заголовок: Re:


По ходу еще вопрос ;)
Прозрачным становистя все что внутри этого окна в том числе и элементы управления (в моем случае кнопки)
Можно ли сделать так что бы прозрачность не затрагивала кнопки или скажем затрагивала только кнопки ?

ЗЫ
Прошу извинить за возможно тупые вопросы .......на FW не писал , просто пока "балуюсь"

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 26 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 76
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет