⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 illusion.bas

📁 Powerbasic 对GDI 的操作 很漂亮的代码!
💻 BAS
📖 第 1 页 / 共 3 页
字号:
DECLARE FUNCTION SetBkMode LIB "GDI32.DLL" ALIAS "SetBkMode" (BYVAL hdc AS DWORD, BYVAL nBkMode AS LONG) AS LONG
DECLARE FUNCTION SetTextColor LIB "GDI32.DLL" ALIAS "SetTextColor" (BYVAL hdc AS DWORD, BYVAL crColor AS DWORD) AS DWORD
DECLARE FUNCTION CreateFontIndirect LIB "GDI32.DLL" ALIAS "CreateFontIndirectA" (lpLogFont AS LOGFONT) AS DWORD
DECLARE FUNCTION SetBkMode LIB "GDI32.DLL" ALIAS "SetBkMode" (BYVAL hdc AS DWORD, BYVAL nBkMode AS LONG) AS LONG
DECLARE FUNCTION GetDlgCtrlID LIB "USER32.DLL" ALIAS "GetDlgCtrlID" (BYVAL hWnd AS DWORD) AS LONG
DECLARE FUNCTION RoundRect LIB "GDI32.DLL" ALIAS "RoundRect" (BYVAL hdc AS DWORD, BYVAL X1 AS LONG, BYVAL Y1 AS LONG, BYVAL X2 AS LONG, BYVAL Y2 AS LONG, BYVAL X3 AS LONG, BYVAL Y3 AS LONG) AS LONG
DECLARE FUNCTION CreatePen LIB "GDI32.DLL" ALIAS "CreatePen" (BYVAL nPenStyle AS LONG, BYVAL nWidth AS LONG, BYVAL crColor AS DWORD) AS DWORD

'-----------------------------------------------------------------
' Declared Subs:  17
'-----------------------------------------------------------------
DECLARE SUB glBegin LIB "opengl32.dll" ALIAS "glBegin" (BYVAL mode AS DWORD)
DECLARE SUB glBindTexture LIB "opengl32.dll" ALIAS "glBindTexture" (BYVAL ntarget AS DWORD, BYVAL texture AS DWORD)
DECLARE SUB glBlendFunc LIB "opengl32.dll" ALIAS "glBlendFunc" (BYVAL sfactor AS DWORD, BYVAL dfactor AS DWORD)
DECLARE SUB glClear LIB "opengl32.dll" ALIAS "glClear" (BYVAL mask AS DWORD)
DECLARE SUB glEnable LIB "opengl32.dll" ALIAS "glEnable" (BYVAL cap AS DWORD)
DECLARE SUB glEnd LIB "opengl32.dll" ALIAS "glEnd" ()
DECLARE SUB glGenTextures LIB "opengl32.dll" ALIAS "glGenTextures" (BYVAL n&, textures AS ANY)
DECLARE SUB glLoadIdentity LIB "opengl32.dll" ALIAS "glLoadIdentity" ()
DECLARE SUB glRotatef LIB "opengl32.dll" ALIAS "glRotatef" (BYVAL angle AS SINGLE, BYVAL x AS SINGLE, BYVAL y AS SINGLE, BYVAL z AS SINGLE)
DECLARE SUB glTexCoord2f LIB "opengl32.dll" ALIAS "glTexCoord2f" (BYVAL s AS SINGLE, BYVAL t AS SINGLE)
DECLARE SUB glTexImage2D LIB "opengl32.dll" ALIAS "glTexImage2D" (BYVAL ntarget AS DWORD, BYVAL level&, BYVAL internalformat&, BYVAL nwidth&, BYVAL height&, BYVAL border&, BYVAL format AS DWORD, BYVAL ntype AS DWORD, npixels AS ANY)
DECLARE SUB glTexParameteri LIB "opengl32.dll" ALIAS "glTexParameteri" (BYVAL ntarget AS DWORD, BYVAL pname AS DWORD, BYVAL param&)
DECLARE SUB glTranslatef LIB "opengl32.dll" ALIAS "glTranslatef" (BYVAL x AS SINGLE, BYVAL y AS SINGLE, BYVAL z AS SINGLE)
DECLARE SUB glVertex3f LIB "opengl32.dll" ALIAS "glVertex3f" (BYVAL x AS SINGLE, BYVAL y AS SINGLE, BYVAL z AS SINGLE)
DECLARE SUB InitCommonControls LIB "COMCTL32.DLL" ALIAS "InitCommonControls" ()
DECLARE SUB PostQuitMessage LIB "USER32.DLL" ALIAS "PostQuitMessage" (BYVAL nExitCode AS LONG)
DECLARE SUB glClearDepth LIB "opengl32.dll" ALIAS "glClearDepth" (BYVAL depth AS DOUBLE)
DECLARE SUB glClearColor LIB "opengl32.dll" ALIAS "glClearColor" (BYVAL red AS SINGLE, BYVAL green AS SINGLE, BYVAL blue AS SINGLE, BYVAL alpha AS SINGLE)
DECLARE SUB glDepthFunc LIB "opengl32.dll" ALIAS "glDepthFunc" (BYVAL func AS DWORD)
DECLARE SUB glDepthMask LIB "opengl32.dll" ALIAS "glDepthMask" (BYVAL flag AS BYTE)
DECLARE SUB glShadeModel LIB "opengl32.dll" ALIAS "glShadeModel" (BYVAL mode AS DWORD)
DECLARE SUB glMatrixMode LIB "opengl32.dll" ALIAS "glMatrixMode" (BYVAL mode AS DWORD)
DECLARE SUB glDeleteTextures LIB "opengl32.dll" ALIAS "glDeleteTextures" (BYVAL n&, textures AS ANY)
DECLARE SUB glDisable LIB "opengl32.dll" ALIAS "glDisable" (BYVAL cap AS DWORD)

'------------------------------------------------------------------------------------------
#RESOURCE "eye.pbr"
'------------------------------------------------------------------------------------------
#INCLUDE "gdimage.inc"
'------------------------------------------------------------------------------------------

%ID_CTRL         = 101
%ID_START_SHOW   = 102
%ID_STOP_SHOW    = 103
%ID_NEW_IMAGE    = 104
%ID_STA_Help     = 105
%ID_BTN_CHECK    = 106

' WinXP Theme support declares (if applicable)
DECLARE FUNCTION EnableDialogTheme(BYVAL hDlg AS DWORD, BYVAL dwStyle AS DWORD) AS LONG
DECLARE FUNCTION IsThemeActive() AS LONG

GLOBAL Animate AS LONG, glWnd AS LONG
GLOBAL mt() AS ZGLTEXTURE

FUNCTION zDefaultFont() AS LONG
    STATIC hDefault&
    IF hDefault& = 0 THEN hDefault& = GetStockObject(%ANSI_VAR_FONT)
    FUNCTION = hDefault&
END FUNCTION

SUB zSetCTLFont(BYVAL hC&, BYVAL hFont&)
    CALL SendMessage(hC&, %WM_SETFONT, hFont&, 0)
END SUB

FUNCTION zCaptionFont() AS LONG
    DIM LF AS LogFont
    STATIC CaptionFont&
    IF CaptionFont& = 0 THEN
       LF.lfHeight = 8 ' -FontHeight&
       LF.lfWidth = 0
       LF.lfCharSet = %DEFAULT_CHARSET
       LF.lfOutPrecision = %OUT_DEFAULT_PRECIS
       LF.lfClipPrecision = %OUT_DEFAULT_PRECIS
       LF.lfQuality = %DEFAULT_QUALITY
       LF.lfPitchAndFamily = %DEFAULT_PITCH OR %FF_DONTCARE
       LF.lfWeight = 700
       LF.lfFaceName = "MS Sans Serif"
       CaptionFont& = CreateFontIndirect(LF)
    END IF
    FUNCTION = CaptionFont&
END FUNCTION

SUB zDeleteObject(hObject AS LONG)
    IF hObject THEN CALL DeleteObject(hObject): hObject = 0
END SUB

'FUNCTION zStaticCenter(BYVAL Label$, BYVAL x&, BYVAL y&, BYVAL w&, BYVAL h&, BYVAL hParent&, BYVAL ID&) AS LONG
'    hCtl& = CreateWindowEx(0, "STATIC", (Label$), %WS_CHILD OR %WS_VISIBLE OR %SS_SUNKEN OR %SS_CENTER, _
'                           x&, y&, w&, h&, hParent&, ID&, zInstance, BYVAL %NULL)
'    CALL zSetCTLFont(hCtl&, zDefaultFont)
'    FUNCTION = hCtl&
'END FUNCTION

'FUNCTION zGetCTLText(BYVAL hC&) AS STRING
'    LOCAL szText AS ASCIIZ * 4096
'    Length& = GetWindowText(hC&, szText, SIZEOF(szText))
'    IF Length& THEN FUNCTION = LEFT$(szText, Length&)
'END FUNCTION

'FUNCTION zReportError(BYVAL Message$) AS LONG
'    REPLACE $zLim WITH $CR IN Message$
'    FUNCTION = MessageBox(0, (Message$), ("GDImage version " + ZI_Version), %MB_ICONHAND)
'END FUNCTION

FUNCTION WINMAIN (BYVAL hInstance     AS LONG, _
                  BYVAL hPrevInstance AS LONG, _
                  BYVAL lpCmdLine     AS ASCIIZ PTR, _
                  BYVAL iCmdShow      AS LONG) AS LONG

    LOCAL Msg         AS tagMsg
    LOCAL wc          AS WndClassEx
    LOCAL zClass      AS ASCIIZ * 80
    LOCAL dwExStyle   AS DWORD
    LOCAL dwStyle     AS DWORD
    LOCAL rc          AS RECT
    LOCAL x           AS LONG
    LOCAL y           AS LONG
    LOCAL hMutex      AS DWORD
    LOCAL hFound      AS DWORD
    LOCAL hMain       AS LONG
'
    LOCAL hWinXP_Lib           AS LONG ' Handle to WinXP Theme DLL
    LOCAL hWinXP_IsThemeActive AS LONG ' Handle to WinXP's IsThemeActive function
'
    zClass = "ZILLUSION"
'
    hMutex = CreateMutex(BYVAL %Null, 0, zClass)
    IF hMutex THEN
       IF GetLastError = %ERROR_ALREADY_EXISTS THEN
          DO
             hFound = FindWindow(zClass, ""): IF hFound THEN EXIT DO
             WHILE PeekMessage(Msg, %NULL, %NULL, %NULL, %PM_REMOVE): WEND
          LOOP
          IF IsIconic(hFound) THEN CALL ShowWindow(hFound, %SW_RESTORE)
          CALL SetForeGroundWindow(hFound)
          FUNCTION = 0
          EXIT FUNCTION
       END IF
    END IF
'
    IsInitialized& = GetClassInfoEx(zInstance, zClass, wc)
    IF IsInitialized&   = 0 THEN
       wc.cbSize        = SIZEOF(wc)
       wc.style         = %CS_HREDRAW OR %CS_VREDRAW
       wc.lpfnWndProc   = CODEPTR(WndProc)
       wc.cbClsExtra    = 0
       wc.cbWndExtra    = 0
       wc.hInstance     = zInstance
       wc.hIcon         = LoadIcon(wc.hInstance, "PROGRAM")
       wc.hCursor       = LoadCursor(%NULL, BYVAL %IDC_ARROW)
       wc.hbrBackground = %NULL
       wc.lpszMenuName  = %NULL
       wc.lpszClassName = VARPTR(zClass)
       wc.hIconSm       = wc.hIcon
       IF RegisterClassEx(wc) THEN IsInitialized& = %TRUE
    END IF
'
    IF IsInitialized& THEN

     '************************************************************************************
     ' Load the GDImage.dll
       IF RegisterGDImageClass() = 0 THEN
          FUNCTION = 99:  EXIT FUNCTION ' If it fails to register then return ERROR = 99
       END IF
     '************************************************************************************

     ' Load the WinXP Theme support (if applicable)
       hWinXP_Lib = LoadLibrary("UxTheme.dll")
       IF hWinXP_Lib THEN
          hWinXP_IsThemeActive = GetProcAddress(hWinXP_Lib, "IsThemeActive")
       END IF
'
       CALL InitCommonControls
'
     ' Window Extended Style
       dwExStyle = %WS_EX_APPWINDOW OR %WS_EX_WINDOWEDGE
     ' Windows Style
       dwStyle = %WS_OVERLAPPEDWINDOW
       CALL SetRect(rc, 0, 0, 668, 532)
       CALL AdjustWindowRectEx(rc, dwStyle, %FALSE, dwExStyle)  ' Adjust Window To True Requested Size
'
       x = MAX&((GetSystemMetrics(%SM_CXSCREEN) - rc.nRight - rc.nLeft) \ 2, 0)
       y = MAX&((GetSystemMetrics(%SM_CYSCREEN) - rc.nBottom - rc.nTop) \ 2, 0)
'
     ' Create The Window
       MyTitle$ = "GDImage control " + ZI_Version + " - ""Illusion"" OpenGL demo"
       hMain = CreateWindowEx(dwExStyle, _           ' Extended Style For The Window
                             zClass, _               ' Class Name
                             (MyTitle$), _           ' Window Title
                             dwStyle OR _            ' Defined Window Style
                             %WS_CLIPSIBLINGS OR _   ' Required Window Style
                             %WS_CLIPCHILDREN, _     ' Required Window Style
                             x, y, _                 ' Window Position
                             rc.nRight - rc.nLeft, _ ' Calculate Window Width
                             rc.nBottom - rc.nTop, _ ' Calculate Window Height
                             %NULL, _                ' No Parent Window
                             %NULL, _                ' No Menu
                             wc.hInstance, _         ' Instance
                             BYVAL %NULL)            ' Dont Pass Anything To WM_CREATE
'
       IF hMain THEN
'
        ' Apply WinXP Theme support
          LOCAL lRes AS LONG, pProc AS DWORD
          IF hWinXP_IsThemeActive THEN
             CALL DWORD hWinXP_IsThemeActive USING IsThemeActive TO lRes
             IF lRes  THEN pProc = GetProcAddress(lRes, "EnableThemeDialogTexture")
             IF pProc THEN CALL DWORD pProc USING EnableDialogTheme(hMain, &H01 OR &H02 OR &H04 OR &H06)
          END IF
'
        ' Create button "START"
          CALL CreateWindowEx(0, "BUTTON", "START", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP, _
                           672 - (7 + 120 + 8), 10, 120, 22, hMain, %ID_START_SHOW, zInstance, BYVAL %NULL)
          CALL zSetCTLFont(GetDlgItem(hMain, %ID_START_SHOW), zDefaultFont)
          CALL ZI_SetAnchorMode(GetDlgItem(hMain, %ID_START_SHOW), %ANCHOR_RIGHT)

        ' Create button "STOP"
          CALL CreateWindowEx(0, "BUTTON", "STOP", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP, _
                           672 - (7 + 120 + 8), 10 + (22 + 5) * 1, 120, 22, hMain, %ID_STOP_SHOW, zInstance, BYVAL %NULL)
          CALL zSetCTLFont(GetDlgItem(hMain, %ID_STOP_SHOW), zDefaultFont)
          CALL ZI_SetAnchorMode(GetDlgItem(hMain, %ID_STOP_SHOW), %ANCHOR_RIGHT)

        ' Create button "LOAD Image"
          CALL CreateWindowEx(0, "BUTTON", "LOAD Image", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP, _
                           672 - (7 + 120 + 8), 10 + (22 + 5) * 2, 120, 22, hMain, %ID_NEW_IMAGE, zInstance, BYVAL %NULL)
          CALL zSetCTLFont(GetDlgItem(hMain, %ID_NEW_IMAGE), zDefaultFont)
          CALL ZI_SetAnchorMode(GetDlgItem(hMain, %ID_NEW_IMAGE), %ANCHOR_RIGHT)
          
        ' Create static help comment
          Label$ = $CR + $CR + "Transparence:" + $CR + $CR + "Load PNG file" + $CR + "using a name begining with ""il"" they use variable opacity."
                   
          CALL CreateWindowEx(0, "STATIC", (Label$), %WS_CHILD OR %WS_VISIBLE OR %SS_CENTER, _
                           672 - (7 + 120 + 8), 10 + (22 + 6) * 3, 120, 150, hMain, %ID_STA_Help, zInstance, BYVAL 0)
          CALL zSetCTLFont(GetDlgItem(hMain, %ID_STA_Help), zCaptionFont)
        ' Set the correct anchor property
          CALL ZI_SetAnchorMode(GetDlgItem(hMain, %ID_STA_Help), %ANCHOR_RIGHT)

        ' Create check button
          CALL CreateWindowEx(0, "Button", "Use GL depth test", _
                                 %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR _         ' window styles
                                 %BS_AUTOCHECKBOX OR %BS_LEFT OR %BS_VCENTER, _       ' class styles
                                 672 - (7 + 120 + 8), 502, _                          ' left, top
                                 120, 22, _                                           ' width, height
                                 hMain, %ID_BTN_CHECK, _                              ' handle of parent, control ID
                                 zInstance, BYVAL %NULL)                              ' handle of instance, creation parameters
          CALL zSetCTLFont(GetDlgItem(hMain, %ID_BTN_CHECK), zDefaultFont)
        ' Set the correct anchor property
          CALL ZI_SetAnchorMode(GetDlgItem(hMain, %ID_BTN_CHECK), %ANCHOR_BOTTOM_RIGHT)


        ' *******************************************************************************
        ' Alternate methode to create a GDImage OpenGL control
        ' Note: when GDImage is active the OpenGL $GLImageClassName is already registered
        ' -------------------------------------------------------------------------------
          ClientXsize& = 512: ClientYsize& = 512

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -