Forum: PC-Programmierung MFC SDI / Herangehensweise an spezielles Projekt / Elemente einbindbar?


von A. R. (redegle)


Lesenswert?

Hallo,

ich würde gerne ein Projekt in MFC angehen. Da ich hiermit noch nicht 
viel Erfahrung gesammelt habe, möchte ich zuerst grundlegend Fragen wie 
Ihr an ein solches Projekt herangehen würdet. Z. B. ob man externe 
Elemente einbinden kann/sollte und darum, wie man in MFC das 
Anwendungsfenster der SDI verwendet. Aber zu Beginn möchte ich erst 
einmal beschrieben was ich vorhabe. Dann wird euch bestimmt vieles 
Einfallen an das ich noch gar nicht denke.

Es existieren mehrere Ordner auf denen sich etwa 200 Files befinden. Bei 
den Files handelt es sich um Binärdateien auf denen zweidimensionale 
Charts gespeichert sind.

Dem Programm möchte ich später einen Speicherpfad übermitteln, wo die 
Ordner gespeichert sind und es sollen alle Files in einer Art "List 
Control" dargestellt werden. Das sieht dann später wie folgt aus:

ID        Filename       Ordner       Pfad                Extra Spalten
0         File1          Ordner 1     C:/.../Ordner1/File1
1         File2          Ordner 2     C:/.../Ordner1/File2
2         ...
3
4

Hierbei sollte es möglich sein, die Tabelle dynamisch zu verändern. Also 
weitere Spalten einfügen, Text verändern, Spalten verschieben und 
Sortierungen vorzunehmen.
Die Feinheiten werden dann später in C programmiert ich bräuchte nur 
eine GUI-Anwendung, die die grafischen Elemente übernimmt. Also die mir 
mitteilt, wenn ein Element angewählt wird, wenn ein Text geändert wurde 
etc..

Wenn das fertig ist benötige ich später einen Chart, der die Werte in 
den Files ausgeben kann.

Mittlerweile habe ich herausgefunden, dass es in der MFC Dialogfenster 
gibt in die man z. B. ein "List Control" einfügen kann. Es lassen sich 
auch externe ActiveX Elemente einfügen. Wenn man dies getan hat lässt 
sich die restliche Bearbeitung mit normalen C/C++ Kenntnissen übernehmen 
und sollte somit kein Problem sein.

In der SDI kann man so weit ich weiß keine Elemente wie ActiveX oder 
Sachen wie Buttons, List Control etc. einfügen. Hier kann man jedoch 
einzelne Linien ziehen und somit Geometrien zeichnen. Es lassen sich 
auch Dialogfenster aufrufen. Diese werden dann jedoch in externen 
Fenstern geöffnet und müssen beendet werden, bevor man zurück auf das 
Hauptfenster kommt.

Die Fragen sind nun folgende:
Kann man auf dem SDI Hauptfenster auch Elemente für Dialogfenster 
(Buttons etc.) oder externe Elemente (ActiveX etc.) einbinden?
Wenn ja, kennt Ihr mehr oder weniger fertige GUI-Elemente die man 
Sinnvoll für meine Anwendung verwenden kann?
Wenn nein, macht es Sinn einen Chart komplett durch zeichnen einzelner 
Linien zu programmieren. Das ist theoretisch nicht weiter aufwendig, da 
man nur die Datenpunkte mit Linien verbinden und das ganze noch auf die 
Größe des Charts skalieren muss. Aufwendig wird es dann nur wenn die 
ganzen Feinheiten dazukommen wie Zoomen, Skalieren der Skalen etc.. Von 
daher währe mir eine fertige integrierbare Lösung lieber.

Vielen Dank für alle Anregungen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

A. R. schrieb:
> In der SDI kann man so weit ich weiß keine Elemente wie ActiveX oder
> Sachen wie Buttons, List Control etc. einfügen.

O doch, das geht sehr wohl. Nutze CFormView als grundlegende Viewklasse, 
und Du kannst alle Elemente verwenden, die Du auch in CDialog verwenden 
kannst.

CListCtrl ist schon ganz brauchbar für Deine Anwendung, allerdings gibt 
es auch fertige Klassenbibliotheken, die das um einiges mehr an 
Funktionalität erweitern, die Du dann nicht "von Hand" nachbauen musst.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nachtrag:

Definitiv lohnend ist 
http://www.codeproject.com/KB/MFC/UltimateGrid.aspx

von A. R. (redegle)


Lesenswert?

Vielen Dank für die Hilfe.

>O doch, das geht sehr wohl. Nutze CFormView als grundlegende Viewklasse,
>und Du kannst alle Elemente verwenden, die Du auch in CDialog verwenden
>kannst.

Das wusste ich noch nicht. Super Hinweis. Ich habe jedoch schon mehrere 
Beispiele gesehen, wo Elemente ohne die Klasse CFormView eingebunden 
worden sind. Bin aber bis jetzt aus dem Quellcode nie wirklich schlau 
geworden. Weißt du vielleicht, wo man nachlesen kann, wie so etwas 
gemacht wird?

Alle Quellen, die ich online gefunden habe erklären nur wie man eine 
Dialogbox aufbaut und wie man in einer SDI direkt zeichnen kann.


UltimateGrid werde ich mir auf jeden Fall einmal anschauen das sieht 
sehr vielversprechend aus.

Hat jemand noch Vorschläge, wie man ein Diagramm realisieren könnte?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

A. R. schrieb:
> Ich habe jedoch schon mehrere
> Beispiele gesehen, wo Elemente ohne die Klasse CFormView eingebunden
> worden sind.

Definiere "Elemente". Dialogelemente können selbstverständlich auch in 
Dialogen verwendet werden, dafür sind sie sogar da. Die MFC kennt auch 
dialogbasierte Applikationen, aber die folgen dann halt nicht dem 
Document/View-Konzept.

Wenn Du Diagramme anzeigen möchtest, bist Du allerdings mit Dialogen und 
auch CFormView nicht auf dem richtigen Pfad.

Solche Ausgaben erfolgen in normalen von CView oder CScrollView 
abgeleiteten eigenen Viewklassen, auf der von mir verlinkten Seite (wo 
UltimateGrid zu finden ist), sind auch sehr viele andere 
MFC-Codebeispiele zu finden.

Um aber das Grundkonzept wenigstens etwas nachvollziehen zu können, 
solltest Du das Scribble-Tutorial von Microsoft durcharbeiten.

von A. R. (redegle)


Lesenswert?

>Definiere "Elemente". Dialogelemente können selbstverständlich auch in
>Dialogen verwendet werden, dafür sind sie sogar da. Die MFC kennt auch
>dialogbasierte Applikationen, aber die folgen dann halt nicht dem
>Document/View-Konzept.

Mit Elementen meinte ich Steuerelemente also Buttons, Static Text etc. 
Mittlerweile habe ich jedoch herausgefunden, wie ich solche in der SDI 
(Klasse CView oder CFrameWndEx) einbinden kann.

>Wenn Du Diagramme anzeigen möchtest, bist Du allerdings mit Dialogen und
>auch CFormView nicht auf dem richtigen Pfad.

Richtig.
Ich werde versuchen folgende Bibliothek zu verwenden:
http://www.codeproject.com/KB/miscctrl/pgllib.aspx

Das Scribble Tutorial werde ich ggf. dem nächst noch durcharbeiten.
http://msdn.microsoft.com/en-us/library/aa232164%28v=VS.60%29.aspx

von Karl H. (kbuchegg)


Lesenswert?

A. R. schrieb:


> Richtig.
> Ich werde versuchen folgende Bibliothek zu verwenden:
> http://www.codeproject.com/KB/miscctrl/pgllib.aspx

Schöne Funktionalität.
Achte bei solchen Dingen auch darauf, dass du die Charts leicht auf 
Papier (Drucker) und ins Clipboard kriegen kannst. Im einfachsten Fall 
genügt es, wenn die Lib dir die Ausgabe in eine Bitmap rendern kann.

von Sven P. (Gast)


Lesenswert?

A. R. schrieb:
> Hallo,
>
> ich würde gerne ein Projekt in MFC angehen. Da ich hiermit noch nicht
> viel Erfahrung gesammelt habe, möchte ich zuerst grundlegend Fragen wie
> Ihr an ein solches Projekt herangehen würdet.
Nun, wenn ich noch nicht viel Erfahrung mit MFC hätte, dann würde ich 
den Schrotthaufen ganz schnell wieder vergessen und auf Qt bauen.

> Dem Programm möchte ich später einen Speicherpfad übermitteln, wo die
> Ordner gespeichert sind und es sollen alle Files in einer Art "List
> Control" dargestellt werden. Das sieht dann später wie folgt aus:
Qt abstrahiert das Dateisystem, sodass du vom lausigen Win-API 
wegkommst. Bäume gehen mit QTreeWidget sehr komfortabel.

> Hierbei sollte es möglich sein, die Tabelle dynamisch zu verändern. Also
> weitere Spalten einfügen, Text verändern, Spalten verschieben und
> Sortierungen vorzunehmen.
Wenn es dynamisch wird, drängen sich die Model-View-Architektur und die 
QTreeView und QTableView-Komponenten auf.

> Wenn das fertig ist benötige ich später einen Chart, der die Werte in
> den Files ausgeben kann.
Dafür nehme ich sehr gerne die Qwt-Bibliothek. Damit erübrigt sich in 
den allermeisten Fällen jegliches händische Gemale. Im Zweifelsfall aber 
kann man sich in die Qwt-Architektur einklinken und selbst Markierungen 
vornehmen. Drucken und Rendern in Bilddateien geht natürlich, das 
abstrahiert Qt wiederum.

http://qwt.sourceforge.net/

> Aufwendig wird es dann nur wenn die
> ganzen Feinheiten dazukommen wie Zoomen, Skalieren der Skalen etc.. Von
> daher währe mir eine fertige integrierbare Lösung lieber.
Das bringt die Qwt-Bibliothek in vielfältiger Weise bereits mit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.