Older Version
Newer Version
Alyce
Jul 7, 2011
Another Cards DLL Demo
-Cards DLL Tutorial
'Windows Cards.DLL demo by Stefan Pendl
'based on code by UncleBen, Rod Bird, Alyce Watson and others.
nomainwin
'Indices of cards in deck, numbered 0-51:
clubs = 0 'ace of clubs=0,deuce=4,three=8...king=48
diamonds = 1 'ace of diamonds=1,deuce=5,three=9...king=49
hearts = 2 'ace of hearts=2,deuce=6,three=10...king=50
spades = 3 'ace of spades=3,deuce=7,three=11...king=51
ace=0 'values increment by 4, which is the number of suits
deuce=4
three=8
four=12
five=16
six=20
seven=24
eight=28
nine=32
ten=36
jack=40
queen=44
king=48
'formula for card index: cardValue+cardSuit
'queen of hearts is
queenHearts = queen+hearts
hDLL=LoadLibrary("cards32.dll")
if hDLL<>0 then
dll$="cards32.dll"
else
hDLL=LoadLibrary("cards.dll")
if hDLL<>0 then
dll$="cards.dll"
else
notice "No DLL available."
end
end if
end if
r=FreeLibrary(hDLL)
WindowWidth = 800
WindowHeight = 500
UpperLeftX=1
UpperLeftY=1
open "Cards.DLL" for graphics_nsb as #main
#main "trapclose [quit]"
#main "down ; fill 0 255 0"
'Open the card DLL
open dll$ for dll as #card
'create structs that allow function to return default card sizes
struct cardX, cardwidth as long
struct cardY, cardheight as long
calldll #card,"cdtInit",_ 'initialize DLL
cardX as struct,_ 'will contain card width
cardY as struct,_ 'will contain card height
result as long
cardWide = cardX.cardwidth.struct
cardHigh = cardY.cardheight.struct
hgDC=GetDC(hwnd(#main)) 'device context for graphicbox
col=MakeRGB(0,127,0) 'color matches fill color of graphicbox
for Suit=0 to 3 'card indices 0-51
for Value = 0 to 48 step 4
cardX=int(10 + 20 * Value / 4) 'draw overlapped cards
cardY=int(10 + (10 + cardHigh) * Suit) 'each suit on their own row
nCard = Suit + Value 'calculate card index
nDraw=0 'draw card front
r=DrawCard(hgDC,cardX,cardY,nCard,nDraw,col)
next
next
oldCardX = cardX + cardWide + 10
row = 0
column = 0
for nCard = 53 to 65 'card indices 52-65
cardX=int(oldCardX + (10 + cardWide) * column) 'draw full cards
cardY=int(10 + (10 + cardHigh) * row) 'on three rows
nDraw=1 'draw card
r=DrawCard(hgDC,cardX,cardY,nCard,nDraw,col)
column = column + 1
if column > 4 then
column = 0
row = row + 1
end if
next
column = 3
for nCard = 67 to 68 'card indices 67-68
cardX=int(oldCardX + (10 + cardWide) * column) 'draw full cards
cardY=int(10 + (10 + cardHigh) * 3) 'on last row
nDraw=1 'draw card
r=DrawCard(hgDC,cardX,cardY,nCard,nDraw,col)
column = column + 1
next
wait
[quit]
'terminate DLL and call FreeLibrary
calldll #card,"cdtTerm",result as void
close #main
close #card
end
Function DrawCard(hDC,x,y,iCard,iDraw,clr)
calldll #card,"cdtDraw",_
hDC as ulong,_ 'graphics device context
x as long,_ 'desired x location
y as long,_ 'desired y location
iCard as long,_ '0-51=deck, 52-68=specials
iDraw as long,_ '0=front, 1=back, 2=invert for active
clr as long,_ 'background color
result as long
end function
Function GetDC(hWnd)
CallDLL #user32, "GetDC",_
hWnd As Ulong,_ 'window or control handle
GetDC As Ulong 'returns device context
End Function
Function LoadLibrary(file$)
Calldll #kernel32, "LoadLibraryA", file$ As Ptr, LoadLibrary As Ulong
End Function
Function FreeLibrary(hDLL)
Calldll #kernel32, "FreeLibrary", hDLL As Ulong, FreeLibrary As Long
End Function
function MakeRGB(red,green,blue)
if red<0 then red=0
if red>255 then red=255
if green<0 then green=0
if green>255 then green=255
if blue<0 then blue=0
if blue>255 then blue=255
MakeRGB=(blue*256*256)+(green*256)+red
end function
Another Cards DLL Demo