Avatar billede danielhep Nybegynder
10. januar 2002 - 10:20 Der er 3 kommentarer og
1 løsning

StrechtBlt

Hvad er det lige at dette \"StrechtBlt\" API gør?

Og hvordan bruger jeg det?????

Avatar billede puppetmaster Nybegynder
10. januar 2002 - 10:22 #1
Det skulle vel ikke være:
Copies a bitmap from a source rectangle into a destination rectangle (sizeable).

Tag et kig på:
http://www.gironet.nl/home/gtgkup/vb/stretchblt.html
Avatar billede tjacob Juniormester
11. januar 2002 - 12:43 #2
Du skal have et bitmap med en DC (DeviceContext), DVS f.eks i en picturebox eller form (der har en property der hedder HasDC). Du kan også gøre det med bitmaps du selv har lavet, eller bitmaps fra filer, men så involverer det flere API-kald. Lad os gøre det nemt, og antage at du har en form med en knap og 2 pictureboxe: PB1 og PB2 (prøv at gøre den større end PB1). I PB1 indsætter du et bitmap.

Øverst i formens kode eller i et modul indsætter du:
Declare Function StretchBlt Lib \"gdi32\" _
    (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
    ByVal nWidth As Long, ByVal nHeight As Long, _
    ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, _
    ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, _
    ByVal dwRop As Long) As Long

Her kan du også indsætte en række konstanter til den sidste parameter dwrop (fylder for meget her).

I knappens Click-event indsætter du:

\'alle parametre initialiseres:
Dim RetVal as Long    \'til returværdi
Dim hdc, x, y, nWidth, nHeight, hSrcDc, xSrc, ySrc, nSrcWidth, nSrcHeight, dwRop

hdc = PB2.hdc  \'modtagerens DC
x = 0    \'startpunkt i modtager
y = 0
nWidth = PB2.Width    \'bredde af bitmap i modtager
nHeight = PB2.Height
hSrcDc = PB1.hdc    \'kildes DC
xSrc = 0    \'kildes startpunkt
ySrc = 0
nSrcWidth = PB1.Width    \'Kildes bredde
nSrcHeight = PB1.Height
dwRop = vbSrcCopy    \'konstant -du kan finde dem i API-vieweren

Så kalder du funktionen:

RetVal = StretchBlt (hdc, x,y ,nWidth ,nHeight ,hSrcDC ,xSrc ,ySrc ,nSrcWidth ,nSrcHeight ,dwRop)

Dette ser måske meget kompliceret ud for at kopiere et billede fra en PicBox til en anden, men det er jo heller ikke her den skal anvendes. Du kan bruge hDc og hSrcDc til f.eks. at tegne direkte på skærmen (Den har også en DC).

Håber dette bringer lidt klarhed over sagen.

MVH tjacob
Avatar billede danielhep Nybegynder
14. januar 2002 - 13:15 #3
Tjacob>>

Klarhed eller sorthed er nok spm. men jo jeg kan godt forstå koden, men at kopier et billede fra en picturebox til en anden er jo ikke svært..Men er det ikke andet man kan gøre med den??
Avatar billede tjacob Juniormester
14. januar 2002 - 14:02 #4
Jo, du kan netop tegne hvadsomhelst hvorsomhelst med StretchBlt (og BitBlt).

VB bruger selv StretchBlt i baggrunden, f.eks. i forbindelse med Image-kontrollens Stretch-property.

Som jeg skrev kan du f.eks. tegne direkte på skærmen (altså uden for din VB-form), og i forbindelse med noget timer, kunne du f.eks. få en figur til at vandre tværs henover skærmen, ovenpå alle åbnede vinduer!

Men, som jeg også skrev, at hvis du vil bruge StretchBlt i mere avancerede sammenhænge, så skal der anvendes flere API-kald, f.eks. til at finde DC\'ere, og til at styre skærmopdatering m.m.
Det bliver hurtigt meget kompliceret!

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester