Μέσω της MS Visual C++ ο προγραμματιστής μπορεί να αναπτύξει εφαρμογές που να μεταφράζονται άπαξ σε κώδικα μηχανής και να εκμεταλλεύονται απευθείας

Σχετικά έγγραφα
Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Συνέχεια του αντικειμενoστραφούς προγραμματισμού Επέκταση των κλάσεων σε Visual Components (Window Controls) Κατασκευή του Interface στο Design Time,

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Παρουσίαση Delphi. Μέμος-Μπαγκράτσας Ιωάννης 1232 Μαργαρίτης Νικόλαος 1226

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

ΜΑΘΗΜΑ 10 Ο ΟΡΓΑΝΩΣΗ ΤΗΣ Β ΓΙΑ ΧΡΗΣΤΕΣ (NON-EXPERTS) Α. ΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ ΕΠΙΛΟΓΩΝ 1. TOOLS DATA UTILITIES SWITCHBOARD MANAGER YES

ΜΑΘΗΜΑ Άνοιγμα Της Εφαρμογής Επεξεργασίας Κειμένου. 2. Κύρια Οθόνη Της Εφαρμογής Κειμένου ΣΤΟΧΟΙ:

SPSS Statistical Package for the Social Sciences

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

2 η Εργαστηριακή Άσκηση

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

ΣΗΜΕΙΩΣΕΙΣ ΓΙΑ ΤΗ VISUAL BASIC Γ ΓΥΜΝΑΣΙΟΥ

Πρόλογος... 7 ΕΙΔΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

4 η Εργαστηριακή Άσκηση

Δημιουργία μιας εφαρμογής Java με το NetBeans

ΤΕΙ Ιονίων Νήσων Εργαστηριακές Ασκήσεις στα Γεωγραφικά Συστήματα Πληροφοριών

ΕΙΣΑΓΩΓΗ ΣΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ Microsoft WINDOWS (95-98-NT-2000-XP)

2. Εισαγωγή Δεδομένων σε Σχεσιακή Βάση Δεδομένων

Περιεχόμενα. Λίγα λόγια από το συγγραφέα... 7 Κεφάλαιο 1: Windows XP Κεφάλαιο 2: Επιφάνεια εργασίας (desktop)... 15

ΜICROSOFT VISUAL STUDIO Eργ 1: Ανάπτυξη απλής εφαρµογής: Solutions, Projects, GUI, Events, Debugging. Εισαγωγή

Επεξεργασία πολλαπλών φύλλων εργασίας - Γραφημάτων Excel

ΤΕΙ Πελοποννήσου Τμήμα Πληροφορικής. Οδηγίες Εγκατάστασης VPN Σύνδεσης στο ΤΕΙ Πελοποννήσου

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ GRS-1

Εγχειρίδιο Χρήσης Εφαρμογής TRS Client

Μεταφραστής Braille WinBraille v.4.1.5

Αντικειμενοστρεφής Προγραμματισμός

Οπτικός Προγραμματισμός σε NetBeans με Java Swing

ΟΔΗΓΙΕΣ ΧΕΙΡΙΣΜΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ DYMO LABEL V.8

ΜΑΘΗΜΑ Άνοιγμα Της Εφαρμογής Υπολογιστικών Φύλλων. 2. Κύρια Οθόνη Της Εφαρμογής Υπολογιστικών Φύλλων ΣΤΟΧΟΙ:

To περιβάλλον Ανάπτυξης εφαρμογών της Visual Basic 2008 Express Edition

Εργαστήριο του Μαθήματος: ΕΠΛ 001: Εισαγωγή στην Επιστήμη της Πληροφορικής

MS SQL 2000 Standard (Εγκατάσταση)

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

ΔΙΑΔΙΚΑΣΙA ΜΕΤΑΦΟΡΑΣ ΥΛΙΚΟΥ ΜΑΘΗΜΑΤΟΣ ΑΠΟ BLACKBOARD VISTA ΣΕ MOODLE

ΔΗ Μ Ι Ο ΥΡ Γ Ι Α W I K I με τ η χρήση τ η ς υπ ηρεσίας h t t p : / id ot.com /

Εισαγωγή σε SQL Server Reporting Services

ΤΕΧΝΟΛΟΓΙΚΟ ΠΑΝΕΠΙΣΤΉΜΙΟ ΚYΠΡΟΥ

ΔΗΜΙΟΥΡΓΙΑ & ΧΡΗΣΗ ΒΙΒΛΙΟΘΗΚΩΝ

Ανάπτυξη εφαρμογής Input-Output

Epsilon Net PYLON Platform

Προτεινόμενες εργασίες Προγραμματισμού Διαδικτύου

Οδηγίες για την εγκατάσταση του πακέτου Cygwin

PRISMA Win POS Sync Merge Replication

Version 7.0 (Δεκέμβριος 2018)

ΔΙΑΔΙΚΑΣΙA ΜΕΤΑΦΟΡΑΣ ΥΛΙΚΟΥ ΜΑΘΗΜΑΤΟΣ ΑΠΟ BLACKBOARD VISTA ΣΕ OPEN ECLASS

Εισαγωγή στο πρόγραμμα Microsoft word 2003

Winnie. Ένα πειραματικό window system. Ελένη Μαρία Στέα FOSSComm

ΔΗΜΙΟΥΡΓΙΑ ΕΝΟΣ DOMAIN CONTROLLER

MS SQL 2005 Standard (Εγκατάσταση)

Macromedia DreamWeaver Παρουσίαση εργαλείου σχεδίασης διεπαφής χρήστη

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

5 Το μοντέλο μάζας ελατηρίου με τριβή και εξωτερική δύναμη

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων

SocialSkip Service v2.0

ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ V ΕΚΠΑΙΔΕΥΤΗΣ ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ

PRISMA WIN APPLICATION SERVER. ιαχείριση υπηρεσιών στοιχείων (COM+) Οδηγός διαχείρισης δικαιωµάτων πρόσβασης & εκκίνησης PRISMA Win Application Server

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Εγκατάσταση της έκδοσης 5.30

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Χρήσιμες Ρυθμίσεις του Windows 7 στον Η/Υ σας

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΜΗΜΑ ΓΕΩΓΡΑΦΙΑΣ ΜΑΘΗΜΑ : ΣΥΣΤΗΜΑΤΑ ΓΕΩΓΡΑΦΙΚΩΝ ΠΛΗΡΟΦΟΡΙΩΝ Ι

Εγχειρίδιο εγκατάστασης και βασικής παραμετροποίησης σεναρίου εστίασης

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Επίλυση προβλήματος με Access

Υπολογιστικά Συστήματα


Λογισμικό κατασκευής εννοιολογικών χαρτών. Α. Αθανασόπουλος

Συγχρηµατοδοτούµενο από το ΥΠΕΠΘ και την Ευρωπαϊκή Ένωση

Πανεπιστήµιο Θεσσαλίας

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ. Ι. Ψαρομήλιγκος Χ. Κυτάγιας

Atlantis - Νέο user interface

Αντιγραφή με χρήση της γυάλινης επιφάνειας σάρωσης

1. O FrontPage Explorer

Διαδικτυακές Εφαρμογές Ενότητα 3: Ανάπτυξη JavaEE 6 εφαρμογής με JSF2, EJB3 και JPA

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Open Discovery Space. ODS Portal Manual

ΕΙΣΑΓΩΓΗ ΔΕΔΟΜΕΝΩΝ ΑΠΟ EXCEL ΣΤΟ GRETL

Διαγραφή Επιλέγετε Διαγραφή για να διαγράψετε μία ήδη υπάρχουσα διαδικασία εισαγωγής ASCII

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΒΙΟΣΤΑΤΙΣΤΙΚΗ Πρακτική με SPSS (1)

ΟΔΗΓΙΕΣ ΔΗΜΙΟΥΡΓΙΑΣ ΕΦΑΡΜΟΓΗΣ ΔΙΑΧΕΙΡΙΣΗΣ ΑΜΕΣΟΥ ΑΡΧΕΙΟΥ ΣΕ ΠΕΡΙΒΑΛΛΟΝ VISUAL STUDIO NET

MICROBOT SERVER MICROBOT MONITOR ΕΦΑΡΜΟΓΕΣ ΕΛΕΓΧΟΥ ΚΑΙ ΠΑΡΑΚΟΛΟΥΘΗΣΗΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ MICROBOT

Θεοδωράκη Ελένη-Μαρία

4.3.3 Συνεργασία του Microsoft Word με άλλες εφαρμογές του Office

Α. ΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ Ε ΟΜΕΝΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΠΡΟΤΥΠΟ

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

ANDROID Προγραμματισμός Εφαρμογών

Πρόσβαση μέσω webdav. ΚΕ.Δ.Δ. Τ.Ε.Ι. Μεσολογγίου. 3. Στην συνέχεια πληκτρολογούμε το username και το password και πατάμε στο κουμπί Είσοδος.

Visual Flowchart Γενικά

Βιοϊατρική τεχνολογία

ΔΕ10: Πληροφοριακά Συστήματα Διοίκησης IΙ Εργαστήριο # 2

Διαχείριση Έργων Πληροφορικής Εργαστήριο

4. ΔΗΜΙΟΥΡΓΙΑ ΜΟΝΤΕΛΟΥ ΠΟΛΥΔΙΑΣΤΑΤΗΣ ΑΝΑΛΥΣΗΣ

Visual Basic Γλώσσα οπτικού

Ράβδος Εργαλείων, σχεδόν τα ίδια εργαλεία και εικονίδια υπάρχουν όπως στα άλλα προγράμματα που έχετε μάθει μέχρι σήμερα.

Transcript:

Μέσω της MS Visual C++ ο προγραμματιστής μπορεί να αναπτύξει εφαρμογές που να μεταφράζονται άπαξ σε κώδικα μηχανής και να εκμεταλλεύονται απευθείας την διεπαφή του Λειτουργικού Συστήματος (Windows API). Σε αντίθεση με τις εφαρμογές C++/CLI, οι εφαρμογές μη διαχειριζόμενου κώδικα (Native / Unmanaged) αποτελούν εφαρμογές που γράφονται για συγκεκριμένο Λειτουργικό Σύστημα, και είναι μεταφρασμένες σε χαμηλό επίπεδο (κώδικας μηχανής με κλήσεις ρουτινών του ΛΣ). Το πλεονεκτήματα συγγραφής Native C++ εφαρμογών είναι ότι οι παραγόμενες εφαρμογές είναι πολύ πιο γρήγορες σε ταχύτητα εκτέλεσης πιο αποδοτικές και μικρότερες συνολικά σε μέγεθος (bytes). Επίσης για την εκτέλεσή τους δεν απαιτείται κανένα ενδιάμεσο framework (.ΝΕΤ) παρά μόνο το ίδιο το Λειτουργικό Σύστημα (Windows). Τα μειονεκτήματα είναι ότι απαιτούν από τον προγραμματιστή συνετή διαχείριση της μνήμης (new/delete) και ότι οι παραγόμενες εφαρμογές δεν μεταφέρονται σε άλλα Λειτουργικά Συστήματα.

Windows API : αποτελεί μία βιβλιοθήκη με εκατοντάδες ρουτίνες που παρέχονται από το Λειτουργικό Σύστημα (Windows) για την επικοινωνία των εφαρμογών με το Λ.Σ. Οι εφαρμογές καλούν τις ρουτίνες αυτές για την πραγματοποίηση ενεργειών και το Λ.Σ. τις υλοποιεί επικοινωνώντας με το εκάστοτε hardware. Οι εφαρμογές από τα Windows 2000 και μετά δεν μπορούν να επικοινωνούν απευθείας με το hardware παρά μόνο μέσω του Windows API. Οι ρουτίνες αυτές έχουν μη αντικειμενοστραφή δομή και χρησιμοποιούν κυρίως structures και όχι classes για πέρασμα δεδομένων. Η εκμάθηση όλων αυτών των ρουτινών από έναν προγραμματιστή είναι προφανώς πολύ δύσκολη έως και αδύνατη. H MS Visual C++ οργανώνει τις ρουτίνες αυτές σε μία ιεραρχική αντικειμενοστραφή δομή όπου πολλές λειτουργίες γίνονται αυτόματα και εξ ορισμού, και έτσι διευκολύνεται ο προγραμματιστής στην ανάπτυξη εφαρμογών. Η ιεραρχική αυτή δομή του Widnows API που υλοποιείται από την MS Visual C++ ονομάζεται Microsoft Foundation Class Library (MFC Library).

Η βιβλιοθήκη MFC αποτελεί ένα αντικειμενοστραφές περιτύλιγμα για το μεγαλύτερο τμήμα του Win32 API και του COM API. Το Win32 API αποτελεί το σύνολο των ρουτινών που παρέχονται από το Λ.Σ. στον προγραμματιστή. Το COM (Component Object Model) API αποτελεί ένα πρότυπο της Microsoft (1993) για αντικείμενα λογισμικού (software components) και αποτελεί την βάση για άλλες τεχνολογίες όπως OLE, OLE Automation, ActiveX, COM+, DCOM, DirectX, κλπ. Χρονολογείται από το 1992 (MFC 1.0) και εξελίσσεται συνέχεια έως και σήμερα (MFC 11 για Visual C++ 2012). Με την χρήση της MFC ο προγραμματιστής δεν χρειάζεται να καλεί Windows API ρουτίνες, αλλά αντίθετα υλοποιεί αντικείμενα των κλάσεων της MFC και καλεί τις μεθόδους των αντικειμένων αυτών. Όλες οι κλάσεις πηγάζουν από την CObject και χωρίζονται σε κατηγορίες (Application Classes, Windows & Control, Drawing, Array-List-Map κλπ) Συνυπάρχει πλέον μαζί με το.net framework που αποτελεί ένα διαφορετικό περιβάλλον ανάπτυξης εφαρμογών.

Επιλέγοντας File->New Project->MFC Application εμφανίζεται ένα Wizard με πολλαπλές σελίδες για την επιλογή των παραμέτρων του Project. Η πρώτη σελίδα αποτελεί την επισκόπηση των παραμέτρων (Overview). Αν οι παράμετροι είναι σωστοί μπορεί ο χρήστης να τερματίσει τον διάλογο αποδεχόμενος τις παραμέτρους πατώντας το κουμπί Finish. Με την επιλογή Next προχωράμε στην επόμενη σελίδα παραμέτρων του Wizard.

Στην δεύτερη σελίδα καθορίζεται ο τύπος της εφαρμογής που θα δημιουργηθεί. Εδώ επιλέγουμε τον τύπο της εφαρμογής SDI/MDI/Dialog το στυλ του Project και τον τρόπο ενσωμάτωσης του MFC Library. Για το τελευταίο έχουμε δύο επιλογές : Use MFC in a shared DLL : που καθορίζει ότι η βιβλιοθήκη θα είναι σε ξεχωριστό DLL (προεγκατεστημένο), ή Use MFC in a static library : που καθορίζει ότι οι ρουτίνες του MFC θα γίνουν link μέσα στο EXE της εφαρμογής.

Application Type: Single Document Interface SDI : για εφαρμογές με μενού, toolbars, κλπ που περιέχουν και χειρίζονται ένα αντικείμενο δεδομένων που εμφανίζεται στην βασική φόρμα της εφαρμογής. Η εμφάνιση της εφαρμογής βασίζεται στην κλάση CView, αλλά μπορεί να αλλαχτεί σε CFormView για εφαρμογές Form-based. Multiple Document Interface MDI : για εφαρμογές με μενού, toolbars, κλπ που περιέχουν και χειρίζονται πολλαπλά αντικείμενα δεδομένων που εμφανίζονται ως ξεχωριστά παράθυρα μέσα στην client area της μητρικής φόρμας. Η εμφάνιση της εφαρμογής βασίζεται στην κλάση CView, ή στην CFormView για εφαρμογές Formbased.

Tabbed Documents : Στην παραλλαγή Tabbed Documents κάθε αντικείμενο δεδομένων εμφανίζεται σε ξεχωριστό Tab Dialog Based : για εφαρμογές που δεν χειρίζονται δεδομένα αλλά καθορίζουν παραμέτρους όπως π.χ. οι wizards. Βασίζονται στην κλάση CDialog. Use HTML Dialog : Βασίζονται στην κλάση CDHtmlDialog αντί για την CDialog και επιτρέπουν την ενσωμάτωση HTML controls και την διαχείριση HTML events. Multiple Top-Level Documents : παραλλαγή του MDI αλλά τα πολλαπλά child παράθυρα ανοίγουν στο desktop ως ανεξάρτητες φόρμες, αντί για το client area της μητρικής φόρμας, και επίσης εμφανίζονται στο taskbar ως ανεξάρτητες εφαρμογές.

Document / View Architecture : Καθορίζει αν το Project θα υλοποιήσει την αρχιτεκτονική Document / View με την οποία διαχωρίζεται ο κώδικας χειρισμού των δεδομένων (Document) από τον κώδικα εμφάνισης των δεδομένων (View). Εξ ορισμού ο MFC Wizard δημιουργεί στην εφαρμογή μία κλάση Document και μία κλάση View. Έτσι η διαχείριση των δεδομένων χωρίζεται σε αυτές τις δύο κλάσεις. Η κλάση Document χειρίζεται το αντικείμενο δεδομένων της εφαρμογής και παράγεται από την MFC κλάση CDocument. Χειρίζεται την αποθήκευση και ανάκτηση των δεδομένων στον χώρο αποθήκευσης (αρχείο στον δίσκο, database, κλπ) και παρέχει τα δεδομένα του αντικειμένου στην κλάση View. Η κλάση View αναλαμβάνει την εμφάνισή του αντικειμένου δεδομένων και την αλληλεπίδραση με τον χρήστη. Παράγεται από την MFC κλάση CView. Χειρίζεται την εμφάνιση των δεδομένων στην οθόνη, την λήψη συμβάντων του interface, την τροποποίηση των δεδομένων και την επικοινωνία με την κλάση CDocument για την ενημέρωση των δεδομένων.

Πλεονεκτήματα: με την αρχιτεκτονική αυτή ο προγραμματιστής ωθείται να οργανώσει την εφαρμογή του και έχει την υποστήριξη της MFC βιβλιοθήκης για ανάκτηση και σώσιμο των δεδομένων στον δίσκο (serialization). Μειονεκτήματα: αυξάνει το μέγεθος του εκτελέσιμου αρχείου, δεν ταιριάζει με όλα τα σενάρια εφαρμογών (π.χ παιχνίδια). Ο χρήστης μπορεί να παρακάμψει την αρχιτεκτονική αυτή, αν δεν τον βολεύει και να μην την χρησιμοποιήσει. Όμως συνίσταται σε πολλές περιπτώσεις όπως π.χ. όταν χρειάζεται να εμφανιστούν δεδομένα με πολλαπλούς τρόπους, όπως για παράδειγμα όταν τα δεδομένα ενός Φύλλου Εργασίας εμφανίζονται ως νούμερα αλλά και ως γράφημα. Τιμές Θερμοκρασίας (Document) View 1 : spreadsheet View 2 : graph

Project Style: MFC Standard : Υλοποιεί μία στάνταρ εφαρμογή με ένα κυρίως παράθυρο, στο οποίο τοποθετούνται τα απαραίτητα controls Windows Explorer : Υλοποιεί εφαρμογές που μοιάζουν με τον Windows Explorer με χρήση ενός splitter window όπου στο αριστερό τμήμα βρίσκεται ένα CTreeView control και στο δεξί τμήμα ένα CListView control. Visual Studio : Υλοποιεί εφαρμογή που προσομοιάζει το Visual Studio, έχοντας 4 dockable panes (File View, Class View, Properties, και Output) Office : Υλοποιεί εφαρμογή που προσομοιάζει τις εφαρμογές του Office, έχοντας Ribbon, Outlook bar, Caption Bar, κλπ

Στην τρίτη σελίδα (μόνο για Doc/View) καθορίζεται αν η εφαρμογή θα υποστηρίζει compound documents δηλαδή αντικείμενα δεδομένων που μπορούν να ενσωματώσουν (embed) άλλα αντικείμενα ή που μπορούν να ενσωματωθούν σε άλλα αντικείμενα. Container : η εφαρμογή μπορεί να φιλοξενεί ενσωματωμένα αντικείμενα (linked & embedded objects) Server : η εφαρμογή μπορεί να δημιουργεί και να χειρίζεται compound documents.

Στην τέταρτη σελίδα (μόνο για Doc/View) καθορίζονται οι ιδιότητες του αντικειμένου δεδομένων που χειρίζεται η εφαρμογή. File Extension : η επέκταση ονόματος για τα αρχεία αντικειμένων της εφαρμογής (π.χ. txt) Filter Name : το όνομα του φίλτρου για εντοπισμό των αρχείων της εφαρμογής. Main frame caption: ο τίτλος του κεντρικού παραθύρου της εφαρμογής. File type ID: το όνομα του τύπου των αρχείων όπως καταγράφεται στο registry των Windows.

Στην πέμπτη σελίδα καθορίζεται η χρήση ή όχι βάσεων δεδομένων από την εφαρμογή. None : η εφαρμογή δεν θα συνδέεται με βάση δεδομένων Header files only : παρέχει βασική υποστήριξη κάνοντας include τα απαραίτητα header files. Database view with/withour file support: (Doc/View) ενσωματώνει και κλάσεις CRecord View, CRecordset, με ή χωρίς δυνατότητα serialization.

Στην έκτη σελίδα καθορίζονται λεπτομέρειες για την εμφάνιση του βασικού παραθύρου (ή και των child παραθύρων σε MDI εφαρμογές), καθώς για την συμπερίληψη ή όχι Menus, Status Bar, ToolbBar ή Ribbon, Επιλογή About στο Help Menu. Split window : Ενσωματώνει ένα Splitter Bar που χωρίζει το Client Area της φόρμας σε δύο Views. Dialog Title : Ο τίτλος του παραθύρου σε Dialog-based εφαρμογές που βασίζονται στην κλάση CDialog.

Στην έβδομη σελίδα καθορίζονται προηγμένες παράμετροι της εφαρμογής. Context-sensitive Help (HTML): Ενσωματώνει αρχεία βοήθειας στην εφαρμογή που εμφανίζοννται πατώντας F1 ή Help. Απαιτεί Help Compiler. Printing and print preview : Παράγει τον κώδικα για την υλοποίηση δυνατοτήτων εκτύπωσης (Doc/View) MAPI : καθορίζει αν η εφαρμογή θα μπορεί να χειριστεί Mails. Windows Sockets : επιτρέπει την χρήση sockets για επικοινωνία μέσω TCP/IP δικτύων.

Common Control Manifest : επιτρέπει την φόρτωση και χρήση του Common Control DLL των windows (Comctl32.dll) Support Restart Manager: Επιτρέπει την επανεκκίνηση της εφαρμογής μετά από update ή crash χωρίς απώλεια δεδομένων-σώζει τα δεδομένα της εφαρμογής πριν την επανεκκίνηση Advanced frame panes: Ενσωματώνει επιπλέον παράθυρα (panes) που μοιάζουν με αυτά του VS. Number of files on recent file list (4) : καθορίζει το πλήθος των αρχείων που θα εμφανίζεται στην λίστα των πρόσφατων.

Στην όγδοη σελίδα εμφανίζονται οι παραγόμενες κλάσεις της εφαρμογής. C ονομαproject App : κλάση παραγόμενη από την CWinApp ή CWinAppEx που αντιπροσωπεύει την ίδια την εφαρμογή C ονομαproject Doc : κλάση παραγόμενη από την CDocument που αντιπροσωπεύει το αντικείμενο δεδομένων της εφαρμογής. C ονομαproject View : κλάση παραγόμενη από την CView που αντιπροσωπεύει την εμφάνιση των δεδομένων της εφαρμογής. CMainFrame : κλάση που αντιπροσωπεύει το κύριο παράθυρο της εφαρμογής.

Μία τυπική εφαρμογή MFC αποτελείται από τα εξής source αρχεία: Project.cpp Project.h που περιέχει την υλοποίηση της κλάσης C όνομαproject App που αντιπροσωπεύει την ίδια την εφαρμογή. MainFrm.cpp MainFrm.h που περιέχει τον κώδικα για την βασική φόρμα της εφαρμογής. ProjectDoc.cpp ProjectDoc.h που περιέχει τον κώδικα για την υλοποίηση του αντικειμένου δεδομένων που χειρίζεται η εφαρμογή. Μία εφαρμογή μπορεί να περιλαμβάνει πολλαπλές Document κλάσεις. ProjectView.cpp - ProjectView.h που περιέχει τον κώδικα για την εμφάνιση του αντικειμένου δεδομένων της εφαρμογής. Κάθε Document type μπορεί να έχει πολλαπλές View κλάσεις. Λοιπές κλάσεις όπως CDialog (.cpp και.h) για διαλόγους που χρησιμοποιεί η εφαρμογή (όπως ο διάλογος About Σχετικά με την εφαρμογή). Resource files : Αρχεία που περιέχουν τα resources της εφαρμογής, όπως εικονίδια

Μία τυπική εφαρμογή MFC μπορεί να περιλαμβάνει πολλαπλούς πόρους (resources) για την ολοκλήρωσή της, όπως: Accelerator : συνδυασμοί πλήκτρων που χρησιμοποιούνται στην εφαρμογή. Dialog: οι διάλογοι που χρησιμοποιεί η εφαρμογή. Icon: Εικονίδια της εφαρμογής Menu: Τα μενού (Main menu και Popup menu) που χρησιμοποιεί η εφαρμογή String Table: Χαρακτηριστικές αλφαριθμητικές λεζάντες της εφαρμογής. Toolbar: Μπάρα εργαλείων γρήγορης επιλογής ενεργειών της εφαρμογής, με εικονίδια για κάθε πλήκτρο. Version: Πληροφορίες έκδοσης της εφαρμογής.

Στις MFC εφαρμογές κάθε οπτικό αντικείμενο δηλαδή κάθε πόρος που χρησιμοποιεί η εφαρμογή κάθε παράθυρο και κάθε control που ενσωματώνεται σε διαλόγους της εφαρμογής έχει ένα χαρακτηριστικό αναγνωριστικό ταυτότητας που ξεκινά από τα γράμματα ID και ξεχωρίζει το ένα αντικείμενο από το άλλο. Ειδικότερα το τρίτο γράμμα μετά τα ID χαρακτηρίζει την κατηγορία του αντικειμένου: Πρόθεμα IDR_ IDD_ IDC_ IDI_ IDB_ IDS_ IDΟΚ, IDCANCEL IDC_ Χρήση Για πολλαπλούς τύπους πόρων όπως (Μενού, Accelerators, Ribbons, κλπ). Για πρότυπα Διαλόγων - Dialog template resources (π.χ, IDD_DIALOG1). Για εικονίδια του κέρσορα (cursor resources). Για εικονίδια της εφαρμογής (icon resources). Για εικόνες τύπου bitmap της εφαρμογής (bitmap resources). Για αλφαριθμητικά της εφαρμογής (string resources). Για τα ID στάνταρ κουμπιών. Για τα υπόλοιπα controls των διαλόγων.

Παράδειγμα : σε μία dialog based-εφαρμογή δημιουργούνται τα εξής IDs: IDD_ProjectName_DIALOG για το dialog template που σχεδιάζει ο προγραμματιστής. IDD_ABOUTBOX για τον διάλογο About. IDR_MAINFRAME για το εικονίδιο της κεντρικής φόρμας. IDC_BUTTON1, IDC_BUTTON2, τα Buttons της εφαρμογής. IDC_EDIT1, IDC_EDIT2, τα Edit controls της εφαρμογής. IDC_STATIC1, IDC_STATIC2, για τα Static Text (Labels), κλπ Με βάση το αναγνωριστικό μπορούμε να απευθυνθούμε σε κάθε πόρο και να ανακτήσουμε στοιχεία της κλάσης του όπως ο δείκτης στο παράθυρο CWnd ή το όνομα της κλάσης του π.χ. CWnd* wnd = MyDlg.GetDlgItem( My_Control_ID ); CRuntimeClass* rtc = wnd->getruntimeclass(); CString classname = rtc->m_lpszclassname; if (classname== CMyDialog )

Τα Controls που εισάγονται σε ένα παράθυρο Διαλόγου μίας MFC εφαρμογής αποτελούν απλά templates με συγκεκριμένο ID αλλά δεν αποτελούν αντικείμενα ή δείκτες σε αντικείμενα που έχουν εισαχθεί σε κάποια κλάση φόρμας όπως στην C++/CLI ή σε άλλες πλατφόρμες όπως ο C++ Builder. Για να χειριστούμε τα controls μέσα από την εφαρμογή μας θα πρέπει να δημιουργήσουμε μεταβλητές (member variables) που θα αποτελούν μέληδεδομένα της μητρικής κλάσης διαλόγου (CDialog). Μεταβλητές-μέλη υπάρχουν δύο ειδών: Data Variables : με τις οποίες χειριζόμαστε τα δεδομένα του control. Control Variables: με τις οποίες χειριζόμαστε το ίδιο το οπτικό αντικείμενο Η δημιουργία των μεταβλητών γίνεται με δεξί κλικ επί του control και επιλογή του Add Variable. Για παράδειγμα: για το Edit Control IDC_EDIT1 δημιουργούμε 2 μεταβλητές με ονόματα : m_sedit1 (CString) m_cedit1 (CEdit)

Η άσκηση 6-1 αποτελεί μία απλή Dialog Based εφαρμογή MFC που υλοποιεί ένα calculator με τις 4 βασικές πράξεις. Επιδεικνύει την χρήση απλών Controls τον χειρισμό των member variables και την συγγραφή κώδικα σε event handlers. Δημιουργούμε μία εφαρμογή MFC και στον App Wizard καθορίζουμε ότι θα είναι Dialog Based. Υλοποιούνται αυτόματα δύο βασικές κλάσεις: CAskhsh61App : public CWinApp που αντιπροσωπεύει την ίδια την εφαρμογή, και CAskhsh61Dlg : public CDialogEx που αντιπροσωπεύει την βασική φόρμα της εφαρμογής που αποτελεί έναν διάλογο Dialog. Η βασική φόρμα διαλόγου αρχικά είναι άδεια περιέχοντας μόνο δύο Buttons ΟΚ και Cancel.

Εισάγουμε από το Toolbox 3 Edit Controls και 3 αντίστοιχα Static Text για τους δύο αριθμούς και το αποτέλεσμα. Καθορίζουμε το κείμενο στα Static Text. Εισάγουμε 4 buttons για τις 4 βασικές πράξεις, τροποποιούμε τις διαστάσεις τους και καθορίζουμε το κείμενό τους. Εισάγουμε ένα ακόμα button για τον καθαρισμό των Edit controls. Για τα Edit controls προσθέτουμε τις εξής μεταβλητές (member variables): Edit1 : m_sedit1 (CString) m_cedit1 (CEdit) Edit2 : m_sedit2 (CString) m_cedit2 (CEdit) Edit3 : m_sedit3 (CString) m_cedit3 (CEdit) Για την σωστή εκτέλεση των πράξεων θα πρέπει να φτιάξουμε μία συνάρτηση που να ελέγχει αν στα Edit Controls έχουν εισαχθεί αριθμοί και όχι λοιποί χαρακτήρες.

Για τον λόγο αυτό εισάγουμε στο αρχείο Askhsh6-1Dlg.cpp που περιέχει την υλοποίηση της Dialog-based φόρμας μία global συνάρτηση IsNumber: int IsNumber(CString s) { return!s.isempty() && s.spanincluding(_t("0123456789"))==s; } Για τις 4 πράξεις εισάγουμε από έναν OnClick Event Handler στα 4 αντίστοιχα κουμπιά και γράφουμε τον κώδικα : void CAskhsh61Dlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here int n1,n2; UpdateData(true); if ( IsNumber(m_sEdit1) && IsNumber(m_sEdit2) ) { n1=_wtoi(m_sedit1.getstring()); n2=_wtoi(m_sedit2.getstring()); m_sedit3.format(_t("%d"),n1+n2); UpdateData(false); } }

void CAskhsh61Dlg::OnBnClickedButton2() { ιnt n1,n2; UpdateData(true); if ( IsNumber(m_sEdit1) && IsNumber(m_sEdit2) ) { n1=_wtoi(m_sedit1.getstring()); n2=_wtoi(m_sedit2.getstring()); m_sedit3.format(_t("%d"), n1 - n2); UpdateData(false); } } void CAskhsh61Dlg::OnBnClickedButton3() { ιnt n1,n2; UpdateData(true); if ( IsNumber(m_sEdit1) && IsNumber(m_sEdit2) ) { n1=_wtoi(m_sedit1.getstring()); n2=_wtoi(m_sedit2.getstring()); m_sedit3.format(_t("%d"), n1 * n2); UpdateData(false); } }

void CAskhsh61Dlg::OnBnClickedButton4() { ιnt n1,n2; UpdateData(true); if ( IsNumber(m_sEdit1) && IsNumber(m_sEdit2) ) { n1=_wtoi(m_sedit1.getstring()); n2=_wtoi(m_sedit2.getstring()); m_sedit3.format(_t("%d"), n1 / n2); UpdateData(false); } } Τέλος για τον καθαρισμό των Edit controls εισάγουμε ακόμα ένα OnClick Event Handler για το αντίστοιχο button και γράφουμε τον κώδικα: void CAskhsh61Dlg::OnBnClickedButton5() { // TODO: Add your control notification handler code here m_cedit1.setwindowtext(_t("")); m_cedit2.setwindowtext(_t("")); m_cedit3.setwindowtext(_t("")); }