13. april 2002 - 12:01Der 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?
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.
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... >:)
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 >:)
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.
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.
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.