Ein Gitternetz darstellen
-
Hallo.
Wie stellt man in den MFC ein Gitternetz dar?
Ich hab mal von einem fremden Programm einen Screenshot gemacht, damit ihr wisst, was ich meine.
In einem Kästchen des Gitternetzes aus dem Screenshots sieht man einen kleinen blauen Kreis mit einem
Fragezeichen.Das hat den folgenden Grund: Jedes einzelne Kästchen in diesem Gitternetz repräsentiert
eine Bitmap (oder sowas in der Art, weiss nicht was es bei diesem Programm tatsächlich ist). Jedenfalls,
wenn man auf eines dieser Kästchen mit dem Mauszeiger klickt, erscheint dort ein Bild, hier der blaue
Kreis mit dem Fragezeichen.Bei dem Programm im Screenshot handelt sich um den "GameMaker", dh. das Fenster mit dem Gitternetz ist
sowas wie ein Karteneditor, mit dem man sich Spielekarten oder sonstwas zusammenklicken kann.Das Problem liegt jezt darin, dass ich nicht die geringste Ahnung hab, wie ich das beim VC++ in einer
MFC-Anwendung lösen soll. Die eingeschränkte Anzahl der Steuerelemente gibt mir keinen besonders
großen Spielraum (was aber auch daran liegen könnte, dass ich nicht mehr als diese Steuerelement-Box
am Anfang kenne).Ist es erstmal überhaupt möglich, sowas unter MFC darstellen zu könenn? Wenn ja, wie? Ich hab's schon
mit normalen Bitmaps versucht, aber das war nicht so das Wahre. Vorallem nicht, wenn es 1000*1000 Bilder
(Kästchen) sein sollen.Danke schon mal im Voraus.
-
du mußt das gitternetz selber von hand malen. wenn deine ansichtsklasse z.b. von CView abgeleitet ist, dann kannst du dort die OnDraw methode überschreiben (falls nicht schon vom mfc-anwendungsassi erledigt) und selber in das fenster malen.
ich bin sicher eine suche nach OnDraw gibt einige treffer in diesem forum die dich weiterbringen. z.b. kann man mit CDC::Rectangle ein rechteck malen. wenn man jetzt zwei schleifen miteinander verschachtelt, dann kann man ein komplettes 3d gitternetz erzeugen lassen.
-
mit CView müsste es sowas in der Art sein :
for (int i=1; i<=10; i++) { pDC->MoveTo (i*1000, 0); pDC->LineTo (i*1000, 10000); pDC->MoveTo (0, i*1000); pDC->LineTo (10000, i*1000); } // for
-
OK, mit der Hilfe eurer Stichwörter und der MSDN hab ich's hingekriegt, danke.
Aber wie mach ich das mit den Bildern? Was ich bis jetzt habe sieht so aus:
extern const int WIDTH, HEIGHT; CDC* pdc=GetDC(); for(UINT i=0;i<m_height;++i) for(UINT j=0;j<m_width;++j) pdc->Rectangle(j*WIDTH,i*HEIGHT,(j+1)*WIDTH,(i+1)*HEIGHT);Es sind bis jetzt nur einfache Rechtecke. Wie sollen die auf einen Mausklick hin Bilder anzeigen?
-
*push*
-
Dioes ist nicht so einfach mit eine paar Zeilen erklärt.
Da fehlen dir viele Grundlagen.Du kannst aber mal die FAQ durchschauen. Dort gibt es eie Klasse um mit Bildern zu arbeiten.
Diese werden im Grunde auch nur gezeichnet.
Die Bilder musst du dann in einer Liset ablegen damit du immer darauf zugreifen kannst. Da in OnPaint immer wieder gezeichnet werden muss solltest du immer nur den Anzeigebereich im Speicherbehalten da sonst dein Prog viel Speicher braucht. Kommt jetzt darauf an wie du es implementierst.
-
Henrie schrieb:
Es sind bis jetzt nur einfache Rechtecke. Wie sollen die auf einen Mausklick hin Bilder anzeigen?
Ich nehme mal an du willst nen Tilemap-Editor programmieren, da ich selber
mal sowas angefangen hab kann ich dir die Sources dazu schicken wenn du willst.
Der Code is nich schön aber selten.
Wirst du allerdings nicht ohne Änderungen kompilieren können da ich ne kommerzielle GUI-Bibliothek verwendet habe. Aber meine DirectDraw7-CScrollView Klasse wird dir bestimmt einiges weiterhelfen für deine Zwecke.