Avatar billede nicki Nybegynder
13. april 2002 - 12:01 Der er 10 kommentarer og
1 løsning

Transparent vindue

Hejsa!

Jeg har før set (og brugt) kode som kunne gøre vinduer transperante i VB, men nu skal jeg bruge samme (eller noget der ligner) funktion.
Det jeg skal er egentlig at ha' vist en serie af billeder (sprites) ca. 12 gange i sekundet. Jeg prøcede det med VB hvor jeg bare gjorde en form transparent med en stump kode. Det viste sig dog at programmet var meget resursekrævende. Jeg prøver nu at lave noget der ligner, bare i vc++, men jeg har brug for hjælp.
Det jeg hade tænkt mig var som sagt en stump kode som kunne gøre det samme. Jeg tænkte på om det kan lade sig gøre i DX. F.eks. hvad sker der hvis man stiller transparentfarven til baggrundsfarven af min overflade (surface).
Eller er det muligt (uden brug af for mange resurser) at hente pixler fra et billede og så tegne dem på skærmen medmindre de er sorte?
Avatar billede dr.truti Nybegynder
13. april 2002 - 18:44 #1
Den stump kode du har brugt til VB var et API kald.... jeg ved ikke om du ved hvad et API er man hvi ikke kan jeg sige at det er et kald til en DLL fil indbygget i Win32 som kan gøre en spaciel funktion for en uden at man skal sidde og skrive 10.000 linier men der i mod bruge de Microsoft har lavet 1 gang... Det jeg ville gøre hvis jeg var dig var at downlosde en VB Kildekode og se hvad det er det bliver kaldt der efter sletter du VB kildens egenskaber (variabler) der bliver sendt med til DLL filen og laver det om til Visual C++ [MFC]. Det kan man alt sammen få meget mere spacificeret hjælp op i Microsofts MSDN database.....

Jeg håber dette kunne hjælpe selv om det er meget teoretisk... Men man kan lave det på 100 forskellige sjove måder. C/C++ er et sprog med virkelig mange muligheder. Det er derfor det er så fedt.

Truti
Avatar billede jpk Nybegynder
14. april 2002 - 16:51 #2
Skal dine sprites bevæge sig rundt på skærmen?
Skal man samtidig kunne flytte vinduer der ligger bagved?
Avatar billede nicki Nybegynder
14. april 2002 - 18:47 #3
Jeps (ang det med at spritsene skal kunne flyttes) og hvis det er muligt ja, så vil jeg gerne kunne flytte vinduer bagved.... det lyder som om du har et forslag... >:)
Avatar billede nicki Nybegynder
14. april 2002 - 18:52 #4
dr.truti// jo jo jeg er skam klar over hvad et API kald er (man kommer ikke langt uden).

ang. dit forslag, så vil jeg lige undersøge det (det er et stykke tid siden jeg har haft koden mellem hænderne).
Dog foretrækker jeg lidt kode servereret på et sølvfad >:)
Avatar billede jpk Nybegynder
14. april 2002 - 21:27 #5
Jeg har selv lavet det samme på et tidspunkt.
Min fremgangsmåde var følgende:

1) Indlæs bitmaps der skal vises.
2) Generér regions for bitmaps.
3) Lav et vindue der fylder hele skærmen og sæt så dets region svarende til den bitmap du vil vise.

Et vindue har, under Windows, en region der bestemmer hvilke dele der skal opdateres grafisk. Denne region er ikke begrænset til en rektangulær form, som vinduer typisk har.
Du kan lave en funktion der checker hver pixel i dine bitmapdata, hvor du så tilføjer de pixels du vil vise på skærmen, til en region. (Du kan vælge en farve du genkender som transparent, pixels med den farve undlader du så at addere til regionen).
Med funktionen SetWindowRgn, kan du sætte dit vindues region, så det kun er den ønskede del der tegnes.
Det er faktisk den eneste, for mig at se, holdbare metode, når man samtidig skal kunne flytte andre objekter på skærmen.
Avatar billede nicki Nybegynder
20. april 2002 - 18:55 #6
Det lyder fornuftigt.... men hvad med kode >:)

p.s. beklager den lange vente tid (har lidt travlt)
Avatar billede nicki Nybegynder
26. april 2002 - 17:02 #7
Halloooooooo!
Avatar billede jpk Nybegynder
28. april 2002 - 12:06 #8
Bruger du MFC?
Avatar billede nicki Nybegynder
02. maj 2002 - 18:18 #9
Ja undskyld jeg ikke har været her i et par dage nu, men i ved den evigt påtrængende tid var lidt knap.... eller sådan noget...

Nå men nu til det væsentlige istedet for alt mit sludder: Ja jeg bruger MFC....
Avatar billede jpk Nybegynder
02. maj 2002 - 21:45 #10
Okay, men så er det faktisk ikke så svært...

Prøv at kigge på CRgn klassen, den kan du bruge til at oprette en region i den form du vil have dit vindue.

Brug så CWnd's SetWindowRgn med din region, så vinduet får den ønskede form!

Du kan så ændre på regionen og kalde SetWindowRgn efterfølgende, for at "flytte" objektet.
Du skal naturligvis blitte den sprite du vil vise, i vinduet.
Avatar billede nicki Nybegynder
04. maj 2002 - 15:57 #11
Fint der!

Takker!
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