Loading a bitmap from a dll

BlitzPlus Forums/BlitzPlus Programming/Loading a bitmap from a dll

okee(Posted 2003) [#1]
I've just been messing around with Blitz+ and Qcards32.dll (something similar to ms cards.dll)

I managed to get a card displayed on screen as follows

.lib "Qcard32.dll"

InitializeDeck% (hWnd%)
DrawCard% (hWnd%, nCard%, nxLoc%, nyLoc%)


; some of the example code
Global Canvas = CreateCanvas(0,0,500,500,winMain)
SetBuffer CanvasBuffer(Canvas)
Global t% = InitializeDeck (QueryObject(Canvas,1))
.......

Cls
DrawCard (QueryObject(Canvas,1),6,200,y)
FlipCanvas Canvas


Using this code the card displays but very flickery
if I set the value to (QueryObject(winMain,1),6,200,200) it displays in the window.
I'm just wondering how blitz handles images loaded through a function in a dll, is the card being drawn within a canvas or something ?


Todd(Posted 2003) [#2]
I'm not sure, but I don't think that this actually draws the card onto the canvas's buffer. You can test this out by doing a SaveBuffer() on your canvas after drawing the card, using DrawCard(). I really have no idea what Qcard32.dll is, but it's probably just using it's own drawing function, not DirectX like Blitz does. Then again I might be wrong, but I don't have any way to test it, because I don't have that Dll anywhere on my system. If it is actually drawing onto the buffer, then I don't know whats wrong with it, without seeing more of the code.


okee(Posted 2003) [#3]
Hi Todd

Just tried savebuffer but the card does not appear but a normal image that i displayed in the canvas does.
THe Qcard32.dll is similar to the microsoft cards.dll

Here is the test app

; Card test

Global winMain = CreateWindow("Card Test",100,100,500,500,0,13)
Global Canvas = CreateCanvas(0,0,500,500,winMain)
Global img = LoadImage("image.png")
SetBuffer CanvasBuffer(Canvas)

; create the timer
Global timer = CreateTimer(60)
Global timerframes
Global t% = InitializeDeck (QueryObject(Canvas,1))


If t = 0 Then 
	Notify("Could not initialize qcards32.dll. Result: " + t%)
EndIf	

; main loop
Repeat
	
	 WaitEvent()
	
		Select EventID()
	
			Case $803
				End
			
			Case $4001 ; Timer tick
        		totalticks = EventData()    ; get the total amount of ticks
                                    		; that the timer has passed
        		For tck = timerframes To totalticks
            		timeframes=timerframes+1
            		
        		Next
        		
				draw()
				
		End Select

Forever

; draw graphics to screen
Function draw()
	
	Cls
		DrawCard (QueryObject(Canvas,1),6,200,y)
		DrawImage(img,100,200)
	FlipCanvas Canvas
	
End Function


the decls file contains

.lib "Qcard32.dll"

InitializeDeck% (hWnd%)
DrawCard% (hWnd%, nCard%, nxLoc%, nyLoc%)



the functions are described in the docs as:

BOOL InitializeDeck(hWnd)
DrawCard (hWnd, nCard, nxLoc, nyLoc)

THe dll is here http://www.telusplanet.net/public/stevem/

Thanks for your help


okee(Posted 2003) [#4]
The dll's don't seem to use DirectX.
I can draw them straight to a window ok, but doing anything with them like moving a card or deleting a card works but I somehow need to get the window to refresh to show the change. I can't see any command for this though

okee


Kanati(Posted 2003) [#5]
It's not going to work... or rather it's not going to work well. You have basically two programs fighting for the same screen-space. Just create your own card images and use those.

Kanati


Litobyte(Posted 2003) [#6]
Or just code it in C+ or VB :P