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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
'-----------------------------------------------------------------------------
' Minimal Image viewer using DevIL
' DevIL Sample program using Powerbasic.
'
' by Peter Scheutz, Scheutz & Clementsen Design
' Web: http://www.scheutz.dk
' e-mail: sourcecode@scheutz.dk
'
' Last modified: 06/22/2002
' Based on DevIL Ver. 1.6.1 PB incs
' Filename: imgview.bas
'
' Released under the GNU Lesser General Public License:
' http://www.gnu.org/copyleft/lesser.html
'
' For information on use and download of DevIL goto: http://openil.sourceforge.net/
' (Get docs and "End User Package")
'
' Report errors in the Powerbasic includes to e-mail above.
'
' For general help on Powerbasic and DevIL, try the forums at:
' http://www.powerbasic.com
'-----------------------------------------------------------------------------
#Register None
#Compile Exe "imgview.exe"
Option Explicit
#Include "win32api.inc"
#Include "il.inc"
#Include "ilu.inc"
#Include "ilut.inc"
Global hDCBmp As Long
Global pic As BITMAP
CallBack Function mainCallback()
Local ps As PAINTSTRUCT
Local hDC As Long
Select Case CbMsg
Case %WM_PAINT
hDC = BeginPaint( CbHndl, ps )
If hDCBmp<>0 Then
BitBlt hDC, 0, 0, pic.bmWidth, pic.bmHeight , hDCBmp, 0, 0, %SRCCOPY
End If
Call EndPaint( CbHndl, ps )
End Select
End Function
Sub SetWindowClientSize (ByVal hWnd As Long,ByVal PixX As Long,ByVal PixY As Long)
' set window by client size in pixels
' centers window and clips to screen
Local cRect As RECT
Local diffX As Long
Local diffY As Long
GetWindowRect hWnd,cRect
diffX=cRect.nRight-cRect.nLeft
diffY=cRect.nBottom-cRect.nTop
GetClientRect hWnd,cRect
diffX=diffX-(cRect.nRight-cRect.nLeft)
diffY=diffY-(cRect.nBottom-cRect.nTop)
PixX=PixX+diffX
PixY=PixY+diffY
If PixX> GetSystemMetrics(%SM_CXSCREEN) Then PixX = GetSystemMetrics(%SM_CXSCREEN)
If PixY> GetSystemMetrics(%SM_CYSCREEN) Then PixY = GetSystemMetrics(%SM_CYSCREEN)
SetWindowPos hWnd, 0, (GetSystemMetrics(%SM_CXSCREEN) - PixX) / 2, _
(GetSystemMetrics(%SM_CYSCREEN) - PixY) / 2, PixX, PixY, 0
End Sub
Function PbMain() As Long
Local ILErr As Dword
Local hBmp As Long
Local hWnd As Long
Local hDC As Long
Local hBmpOld As Long
Local errString As Asciiz*1024
If Len(Command$)=0 Then
MsgBox "Usage: imgview.exe filename"
Exit Function
End If
ilInit
ilEnable %IL_FORMAT_SET
ilEnable %IL_ORIGIN_SET
ilEnable %IL_TYPE_SET
ilFormatFunc %IL_RGB
ilOriginFunc %IL_ORIGIN_LOWER_LEFT
ilTypeFunc %IL_UNSIGNED_BYTE
ilEnable %IL_CONV_PAL
Do
ILErr = ilGetError()
If ILErr <>0 Then
errString = iluErrorString(ILErr)
MsgBox "Error in Set or enable:" & $CRLF & errString
End If
Loop While (ILErr <> 0)
Dialog New 0, "DevIL Mini imageviewer in PB " & Command$, , , 100, 100 , %WS_SYSMENU Or %WS_CAPTION To hWnd
hDC = getDC (hWnd)
If hDC<>0 Then
hBmp = ilutWinLoadImage (Command$,getDC (hWnd) )
ILErr=ilGetError()
If ILErr<>0 Then
errString = iluErrorString(ILErr)
MsgBox "Error in ilutWinLoadImage:" & $CRLF & errString
Exit Function
Else
GetObject hBmp, SizeOf( pic ), pic
SetWindowClientSize hWnd ,pic.bmWidth, pic.bmHeight
hDCBmp = CreateCompatibleDC( hDC )
hBmpOld = SelectObject( hDCBmp, hBmp )
Dialog Show Modal hWnd Call mainCallback
End If
End If
If hBmp < > 0 Then
SelectObject hDCBmp, hBmpOld
DeleteObject hBmp
hBmp = 0
End If
End Function
|