| |
VB & Windows APIRegion erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen | | | Autor: Jack | Datum: 03.07.11 12:06 |
| Hallo Forum!
Ich hoffe ich kann meine Frage richtig erklären.
Ich habe eine Polygone Region, welche ziemlich groß ist - sagen wir z.B. 5000 x 5000 (Pixel, oder was auch immer).
Da meine Form aber nur 500 x 500 groß ist, möchte ich nun einen Teil dieser Region ausschneiden und in der Form anzeigen lassen. Dies habe ich mittlerweile auch geschafft. Weiß allerdings nicht, ob es hier nicht eine einfacher Methode gibt - habe meine "normale" Region mit einer anderen Region mit der Größe "500 x 500" kombiniert mit "RNG_AND" - das Ergebnis hat dann gepasst.
Gibt es hier für evtl. eine einfachere Lösung?
Und nun zu meinem eigentlichen Problem - wenn ich nun meine ausgeschnittene Region in der Form anzeige, dann ... wie erklär ich das ... dann wird die Füllung nicht mit ausgeschnitten und somit nicht an der Stelle, wo sie eigentlich sein sollte.
http://www.xtreme-simpsons.de/jack/beispiel.jpg
Ich hoffe aus dem Bild kann man ersehen, wo mein Problem liegt.
Kann man bei dem Brush evtl...sowas wie nen Offset setzen oder sowas?
Wäre schön, wenn jemand mein Problem versteht und mir helfen könnte.
Danke
Unkraut vergeht nicht | |
Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen | | | Autor: Jack | Datum: 03.07.11 14:43 |
| Das hab ich leider befürchtet, dass ich mein Problem nicht richtig beschreiben kann.
http://www.xtreme-simpsons.de/jack/beispiel2.jpg
Auf diesem Bild sieht man oben meine gesamte Region - soll eine Berglandschaft darstellen.
Der rotumrandete Teil, soll ausgeschnitten und in meiner Form dargestellt werden.
Das Ergebnis wäre richtig, wenn das dick rotumrandete Bild rauskäme (wie gesagt, der ausgeschnittene Teil der Region passt). Leider kommt als Ergebnis meines Codes aber das duck blauumrandete raus.
Die "Textur" stimmt nicht, die wird nicht mit ausgeschnitten.
Code habe ich folgenden Verwendet. Ich hoffe, es ist nachvollziehbar was ich hier mache. Übersicht ist nicht gerade meine Stärke. Ich hab die Declarationen der Funktionen weggelassen, da ich sonst hier die Obergrenze des Textes überschritten hätte.
Private screenshow_region As Long
Private screensize_region As Long
Private hintergrund_region As Long
Private hBrush As Long
Private camera_x As Single
Private camera_y As Single
Private Sub Form_Load()
Dim hBitmap As Long
Dim Retval As Long
Me.AutoRedraw = True
camera_x = 100
camera_y = 250
'Hintergrundmuster erstellen
hBitmap = LoadImage(App.hInstance, "C:\hintergrund.bmp", 0, 300, 300, &H10)
hBrush = CreatePatternBrush(hBitmap)
hintergrund_region = CreateRectRgn(0, 0, 0, 0)
screensize_region = CreateRectRgn(0, 0, 250, 250)
screenshow_region = CreateRectRgn(0, 0, 0, 0)
Dim figure(23) As POINTAPI
figure(0).x = 0
figure(0).y = 456
figure(1).x = 67
figure(1).y = 411
figure(2).x = 129
figure(2).y = 414
figure(3).x = 138
figure(3).y = 372
figure(4).x = 198
figure(4).y = 364
figure(5).x = 264
figure(5).y = 351
figure(6).x = 321
figure(6).y = 326
figure(7).x = 348
figure(7).y = 294
figure(8).x = 415
figure(8).y = 294
figure(9).x = 468
figure(9).y = 321
figure(10).x = 511
figure(10).y = 350
figure(11).x = 557
figure(11).y = 351
figure(12).x = 616
figure(12).y = 351
figure(13).x = 671
figure(13).y = 308
figure(14).x = 694
figure(14).y = 250
figure(15).x = 727
figure(15).y = 246
figure(16).x = 742
figure(16).y = 202
figure(17).x = 774
figure(17).y = 202
figure(18).x = 816
figure(18).y = 143
figure(19).x = 854
figure(19).y = 141
figure(20).x = 885
figure(20).y = 105
figure(21).x = 912
figure(21).y = 82
figure(22).x = 1511
figure(22).y = 520
figure(23).x = 3
figure(23).y = 519
hintergrund_region = CreatePolygonRgn(figure(0), 24, 1)
show_hintergrund
End Sub
Private Sub show_hintergrund()
Me.Cls
screensize_region = CreateRectRgn(0, 0, 250, 250)
screenshow_region = CreateRectRgn(0, 0, 0, 0)
hOldBrush = SelectObject(Me.hdc, hBrush)
Call OffsetRgn(screensize_region, camera_x, camera_y)
CombineRgn screenshow_region, hintergrund_region, screensize_region, 1
Call OffsetRgn(screenshow_region, -camera_x, -camera_y)
Call PaintRgn(Me.hdc, screenshow_region)
End Sub Unkraut vergeht nicht | |
Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen | | | Autor: Jack | Datum: 03.07.11 14:45 |
| Hallo Zardoz, sorry, deine Antwort und meine Antwort von 14:43 Uhr haben sich überschnitten
Die Funktion OffsetRgn ist mir bekannt und verwende ich auch.
Mir gehts es rein um die "Textur", dass die nicht passt.
Unkraut vergeht nicht | |
Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen | | | Autor: Zardoz | Datum: 03.07.11 15:34 |
| Hallo Jack,
die Startposition des Brushs wird mit SetBrushOrgEx gesetzt:
http://msdn.microsoft.com/en-us/library/dd162967(v=VS.85).aspx
Übrigens, jeder Brush und jede Region muss wieder mit DeleteObjekt
gelöscht werden, sonst wird der Speicher zugemüllt.
Gruss,
Zardoz | |
Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen | | | Autor: Jack | Datum: 03.07.11 16:43 |
| Nun, leider bin ich bei DX noch ein ziemlicher Noob. Und für meine weiteren Pläne sind nun mal Regionen wie geschaffen, da ich meinen Hintergrund im besten "Worms" Stil durch Explosionen etc. verändern lassen möchte. Ob bzw. wie das unter DX möglich ist, ist mir völlig unbekannt.
Unkraut vergeht nicht | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere Infos
|