Форум » GUI » MiniGUI Прозрачная форма » Ответить

MiniGUI Прозрачная форма

SerLog: Может кому надо! Пример формирования прозрачной формы. Работает в 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

Ответов - 26, стр: 1 2 All

Петр: Dima пишет: @ 3, 4 BUTTON oBtn1 PROMPT "TEST" OF oDlg SIZE 40, 12 ; ACTION ( hdc:=odlg:getdc(),SETTRANSPARENT(hdc,255)) Почему getdc(), это наверное возвращает контекст устройства, а не хэндл окна

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

saulius: то есть oDlg:hWnd


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

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

Dima: По ходу еще вопрос ;) Прозрачным становистя все что внутри этого окна в том числе и элементы управления (в моем случае кнопки) Можно ли сделать так что бы прозрачность не затрагивала кнопки или скажем затрагивала только кнопки ? ЗЫ Прошу извинить за возможно тупые вопросы .......на FW не писал , просто пока "балуюсь"



полная версия страницы