http://www.spinellis.gr/pubs/trade/1993-Winmag/fastwin2/html/win2.html
This is an HTML rendering of a working paper draft that
led to a publication.
The publication should always be cited in preference to this
draft using the following reference:
- Diomidis Spinellis.
Implementing
multimedia applications: Programming the Windows API.
Win Magazine, pages 64–68, April 1993.
In Greek.
The document's metadata is available in BibTeX format.
Find
the publication on Google Scholar
This material is presented to ensure timely dissemination of
scholarly and technical work. Copyright and all rights therein are
retained by authors or by other copyright holders. All persons
copying this information are expected to adhere to the terms and
constraints invoked by each author's copyright. In most cases, these
works may not be reposted without the explicit permission of the
copyright holder.
Diomidis Spinellis Publications
|
ΥΛΟΠΟΙΗΣΗ ΕΦΑΡΜΟΓΩΝ MULTIMEDIA
Διομήδης Δ. Σπινέλλης
Multimedia Products Technical Support
FAST Hellas S.A.
Εθνικής Αντιστάσεως 14α, 152 32 Χαλάνδρι
Στο προηγούμενο άρθρο της σειράς ορίσαμε τι είναι μια
εφαρμογή multimedia, σε τι περιβάλλον μπορεί να υλοποιηθεί και
τι προβλήματα πρέπει να αντιμετωπιστούν.
Στη συνέχεια εξετάσαμε τους μηχανισμούς ένθεσης κινούμενης εικόνας
σε συνδυασμό με την κάρτα ένθεσης Screen Machine, καθώς και
τις βασικές παραμέτρους ελέγχου της.
Στο άρθρο αυτού του μήνα θα παρουσιάσουμε σε πρακτικό επίπεδο τις εναλλακτικές
λύσεις για τον προγραμματισμό της κάρτας ένθεσης στο
περιβάλλον Microsoft Windows, θα περιγράψουμε της συναρτήσεις
ελέγχου της και θα παραθέσουμε ένα απλό παράδειγμα χειρισμού των
βασικών μηνυμάτων ελέγχου των Windows.
ΠΛΑΤΦΟΡΜΕΣ ΥΛΟΠΟΙΗΣΗΣ ΚΑΙ ΤΡΟΠΟΙ ΕΛΕΓΧΟΥ ΕΞΩΤΕΡΙΚΩΝ ΣΥΣΚΕΥΩΝ
Οι πλατφόρμες υλοποίησης εφαρμογών multimedia είναι οι ίδιες
με αυτές που χρησιμοποιούνται και για την υλοποίηση ((κλασικών))
εφαρμογών.
Έτσι μια εφαρμογή μπορεί να γραφεί σε μεταγλωτιζόμενη (compiled) γλώσσα
όπως η C++,
σε ένα ((οπτικό)) περιβάλλον προγραμματισμού όπως αυτό της Visual
Basic, ή τέλος να βασιστεί σε ένα έτοιμο σύστημα όπως τη βάση δεδομένων
Access.
Το περιβάλλον υλοποίησης καθορίζει και τους δυνατούς τρόπους ελέγχου
των συσκευών multimedia.
Οι συσκευές αυτές μπορούν συνήθως να ελεγχθούν με τους παρακάτω τρόπους:
- Με κατευθείαν πρόσβαση στο υλικό (hardware) της συσκευής.
-
Ο τρόπος αυτός προϋποθέτει την ακριβή γνώση των καταχωρητών και των
συναρτήσεων απεικόνισης μνήμης της συσκευής.
Μπορεί να χρησιμοποιηθεί μόνο από γλώσσες που παρέχουν δυνατότητα
πρόσβασης στο υλικό του υπολογιστή όπως η C.
Αν και παρέχει τη δυνατότητα πλήρους ελέγχου της συσκευής,
είναι ο λιγότερο αποδοτικός τρόπος ελέγχου, και τα δημιουργούμενα
προγράμματα είναι συχνά ασύμβατα με διαφορετικούς τύπους
συσκευών.
Γι' αυτούς τους λόγους δεν θα ασχοληθούμε στη συνέχεια άλλο με
αυτόν τον τρόπο.
- Με τη χρήση στατικά συνδεδεμένων βιβλιοθηκών.
-
Η λειτουργικότητα μιας συσκευής μπορεί να απομονωθεί σε ορισμένες
συναρτήσεις οι οποίες είναι δυνατό να συνδεθούν με την εφαρμογή κατά
τη φάση της σύνδεσής της (linking).
Οι συναρτήσεις αυτές ομαδοποιούνται σε μια βιβλιοθήκη --- αρχείο με
το επίθεμα .LIB.
Ο τρόπος αυτός απομονώνει και προστατεύει
τον προγραμματιστή από τον κατευθείαν έλεγχο της συσκευής
αλλά μπορεί να χρησιμοποιηθεί μόνο από μεταγλωτιζόμενες
γλώσσες που περιέχουν φάση σύνδεσης;
δεν μπορεί δηλαδή να χρησιμοποιηθεί από περιβάλλοντα προγραμματισμού
και εφαρμογές που βασίζονται σε διερμηνευτές (interpreters)
(π.χ. Access Basic).
Επιπλέον, η στατική σύνδεση της εφαρμογής με τη βιβλιοθήκη
συνεπάγεται ότι πιθανές βελτιώσεις στη βιβλιοθήκη δεν μεταφέρονται
στην εφαρμογή παρά μόνο αν αυτή επανασυνδεθεί και μοιραστεί ---
με τη μορφή νέας έκδοσης --- στους τελικούς χρήστες.
- Με τη χρήση δυναμικά συνδεομένων βιβλιοθηκών.
-
Τα προβλήματα της στατικής σύνδεσης λύνονται με τις δυναμικά
συνδεόμενες βιβλιοθήκες (Dynamic Link Libraries --- DLL) που
παρέχουν τα Windows.
Οι βιβλιοθήκες αυτές συνοδεύουν το πρόγραμμα μέχρι τη στιγμή της
εκτέλεσης του με τη μορφή ξεχωριστών αρχείων με το επίθεμα .DLL.
Κατά τη φάση της φόρτωσης του προγράμματος, οι συναρτήσεις που
απαιτεί το πρόγραμμα συνδέονται με τις συναρτήσεις που παρέχει η
βιβλιοθήκη.
Η δυναμική αυτή σύνδεση μπορεί εξίσου εύκολα να χρησιμοποιηθεί
τόσο μεταγλωτιζόμενες όσο και από διερμηνευόμενες γλώσσες.
Επιπλέον, επειδή η βιβλιοθήκη είναι ξεχωριστή από την εφαρμογή,
μπορεί κανείς να ανανεώσει τη βιβλιοθήκη χωρίς να απαιτείται
απαραίτητα ενημέρωση της εφαρμογής.
- Με τη χρήση του οδηγού ελέγχου MCI.
-
Οι τρόποι που αναφέρθηκαν παραπάνω πάσχουν από έλλειψη ομοιογένειας.
Κάθε συσκευή μπορεί να έχει διαφορετικές συναρτήσεις ελέγχου
με αποτέλεσμα μία εφαρμογή γραμμένη για μία συσκευή να μη
συνεργάζεται με παρεμφερείς συσκευές.
Με την εμφάνιση του περιβάλλοντος ((Windows with Multimedia
Extensions)) και στη συνέχεια της έκδοσης 3.1 των Windows, έγινε
δυνατός ο έλεγχος οποιασδήποτε εξωτερικής συσκευής ήχου και
εικόνας μέσω του συμπεριλαμβανομένου οδηγού MCI (Media Control
Interface).
Ο οδηγός αυτός παρέχει μία υψηλού επιπέδου γλώσσα για τον έλεγχο
των συσκευών αυτών.
Κάθε συσκευή multimedia που προστίθεται στο σύστημα μπορεί να έχει το
δικό της οδηγό MCI ο οποίος και υλοποιεί μία σειρά από
τυποποιημένες εντολές.
H Screen Machine που χρησιμοποιούμε σαν παράδειγμα στη σειρά αυτή
των άρθρων, υποστηρίζει στο περιβάλλον Windows
τον προγραμματισμό με δυναμικά συνδεόμενες
βιβλιοθήκες (DLL), και με τον οδηγό MCI.
Οι βιβλιοθήκες DLL μπορούν να χρησιμοποιηθούν με δύο διαφορετικούς
τρόπους:
-
Με την κλίση συγκεκριμένων συναρτήσεων της βιβλιοθήκης SM API
(Screen Machine Application Programming Interface)
για τη δημιουργία του τελικού αποτελέσματος.
-
Με τη χρήση του ολοκληρωμένου περιβάλλοντος Video Workbench το
οποίο έχει ενσωματωμένες πολλές από της πιθανά απαραίτητες λειτουργίες.
Ο πρώτος τρόπος είναι πιο κατάλληλος για τη τη δημιουργία σύνθετων
εφαρμογών διότι παρέχει τη μεγαλύτερη δυνατή ευελιξία, και πλήρη
έλεγχο της Screen Machine.
Ο δεύτερος τρόπος επιτρέπει τη γρήγορη και εύκολη υλοποίηση
εφαρμογών με το λιγότερο δυνατό προγραμματισμό.
Στις επόμενες ενότητες θα εξετάσουμε τις συναρτήσεις της βιβλιοθήκης
SM API.
ΟΙ ΣΥΝΑΡΤΗΣΕΙΣ SM API
Οι βιβλιοθήκη SM API αποτελείται από πάνω από 150 συναρτήσεις
που ελέγχουν κάθε τμήμα της Screen Machine.
Όλες οι συναρτήσεις έχουν το πρόθεμα SM_.
Στο αρχείο που χρησιμοποιούνται πρέπει να προστεθεί η εντολή
του προεπεξεργαστή της C #include $<$sm_api.h$>$.
Οι κλήσεις επιστρέφουν τη σταθερά SM_OK σε περίπτωση
επιτυχούς λειτουργίας και τη σταθερά SM_ERROR σε περίπτωση
λάθους.
Οι συναρτήσεις που μπορούν να χωριστούν στις ακόλουθες ομάδες:
Εγκατάσταση
Σε ένα σύστημα μπορούν να είναι εγκαταστημένες μέχρι και τρεις
κάρτες Screen Machine.
Υπάρχουν συναρτήσεις (πίνακας 1) που ορίζουν την
εκάστοτε ενεργή κάρτα και αναλαμβάνουν το διαχωρισμό των καρτών
ανάμεσα σε πολλαπλές εφαρμογές που μπορεί να τρέχουν ταυτόχρονα στα
Windows.
Συνάρτηση | Λειτουργία |
GetActiveBoard |
Επιστρέφει τον αριθμό της ενεργής Screen
Machine |
GetBoards |
Επιστρέφει τον αριθμό των εγκαταστημένων
καρτών |
GetFreeHandles |
Επιστρέφει των αριθμό των καρτών που δε
χρησιμοποιούνται από άλλες εφαρμογές |
GetHandle |
Απαιτεί την αποκλειστική χρήση της κάρτας |
GetInput |
Επιστρέφει την τρέχουσα πηγή video |
ReleaseHandle |
Ανακαλεί την αποκλειστική χρήση της κάρτας |
Select |
Καθορίζει την ενεργή Screen Machine |
SetInput |
Ορίζει μία από τρεις πηγές video |
ToggleVideo |
Ανάβει ή σβήνει την εικόνα και τον ήχο |
Πίνακας 1: Συναρτήσεις ελέγχου εγκατάστασης
Καθορισμός παραμέτρων
Κατά την πρώτη χρήση της Screen Machine μπορεί να χρειαστεί να
ρυθμιστούν παράμετροι, όπως ο οριζόντιος και κάθετος συγχρονισμός
της κάρτας με το σήμα video και η σχετική κλίμακα της οριζόντιας
διάστασης. Μια ομάδα συναρτήσεων (πίνακας 2)
επιτρέπει τον ορισμό και την
προσπέλαση αυτών των παραμέτρων, καθώς και την αποθήκευσή τους σε
αρχείο αρχικοποίησης.
|
Συνάρτηση |
Λειτουργία |
Get/SetHScale |
Επιστρέφει/καθορίζει την οριζόντια κλίμακα
του παραθύρου ένθεσης |
Get/SetXofs |
Επιστρέφει/καθορίζει την οριζόντια διαφορά
μεταξύ του παραθύρου ένθεσης και της οθόνης |
Get/SetYOfs |
Επιστρέφει/καθορίζει την κάθετη διαφορά
μεταξύ του παραθύρου ένθεσης και της οθόνης |
ReadSetup |
Διαβάζει της παραμέτρους αρχικοποίησης από
το αρχείο |
SetInitFile |
Ορίζει το όνομα του αρχείου αρχικοποίησης |
WriteSetup |
Γράφει τις ορισμένες παραμέτρους στο αρχείο
αρχικοποίησης |
Πίνακας 2: Συναρτήσεις καθορισμού παραμέτρων
Ορισμός θέσης και μεγέθους
Η ένθεση της ζωντανής εικόνας επιτυγχάνεται αφού καθοριστούν
παράμετροι όπως η θέση της εικόνας και το μέγεθός της. Άλλες
συναρτήσεις επιτρέπουν την προσπέλαση των παραμέτρων αυτών
(πίνακας 3).
Συνάρτηση |
Λειτουργία |
GetHofs |
Επιστρέφει την οριζόντια θέση του παραθύρου
ένθεσης |
GetLargestXFrame |
Επιστρέφει το βέλτιστο οριζόντιο μέγεθος |
GetLargestYFrame |
Επιστρέφει το βέλτιστο κάθετο μέγεθος |
GetMaxWindowFrameHeight |
Επιστρέφει το μέγιστο δυνατό ύψος του
παραθύρου ένθεσης |
GetMaxWindowFrameWidth |
Επιστρέφει το μέγιστο δυνατό πλάτος του
παραθύρου ένθεσης |
GetStandardXFrame |
Επιστρέφει τις διαστάσεις του παραθύρου
ένθεσης |
GetVofs |
Επιστρέφει την κάθετη θέση του παραθύρου
ένθεσης |
VideoFrame |
Ορίζει το τμήμα της εικόνας που θα
προβληθεί |
WindowFrame |
Ορίζει τη θέση και μέγεθος του παραθύρου
ένθεσης |
WindowFullFrame |
Ορίζει το μέγιστο δυνατό παράθυρο ένθεσης |
WindowHalfFrame |
Ορίζει παράθυρο ένθεσης με μέγεθος ίσο με
τη μισή οθόνη |
WindowHpos |
Ορίζει την οριζόντια θέση του παραθύρου
ένθεσης |
WindowHVpos |
Ορίζει τη θέση του παραθύρου ένθεσης |
WindowVpos |
Ορίζει την κάθετη θέση του παραθύρου
ένθεσης |
WindowQuarterFrame |
Ορίζει παράθυρο ένθεσης με μέγεθος το ένα
τέταρτο της οθόνης |
Πίνακας 3: Συναρτήσεις ορισμού θέσης και μεγέθους
Ένθεση με βάση το χρώμα
Εκτός από την ένθεση ενός τετράγωνου πλαισίου κινούμενης εικόνας
στην οθόνη του υπολογιστή, η Screen Machine επιτρέπει την επιλογή
των τμημάτων που θα είναι ορατά με βάση ένα προκαθορισμένο
διαφανές χρώμα (color keying). Ετσι για παράδειγμα, μπορούμε να
ορίσουμε ότι σε όσα μέρη της οθόνης υπάρχει το γαλάζιο χρώμα θα
είναι ορατό το σήμα video. Είναι προφανές, ότι με αυτόν τον τρόπο
μπορούμε να σχεδιάσουμε γραφικά αντικείμενα πάνω από την εικόνα
video, αρκεί αυτά να έχουν οποιοδήποτε χρώμα εκτός από το χρώμα το
οποίο έχουμε ορίσει ως διαφανές, γεμίζοντας προηγουμένως την οθόνη
με το διαφανές χρώμα.
Οι βιβλιοθήκες συναρτήσεων της
Screen Machine (πίνακας 4)
παρέχουν τη δυνατότητα του προγραμματισμού αυτής της
δυνατότητας.
Συνάρτηση |
Λειτουργία |
ClearColorKey |
Σταματάει τη λειτουργία της ένθεσης με βάση
το χρώμα |
Get/SetKeyCorrection |
Επιστρέφει/καθορίζει την τιμή της
οριζόντιας διόρθωσης για την ένθεση με βάση
το χρώμα |
GetKeyMode |
Επιστρέφει τον αριθμό χρωμάτων που ελέγχουν
την ένθεση |
Get/SetTransColor |
Επιστρέφει/καθορίζει τα χρώματα που είναι
ορατά μόνο στη VGA και όχι στο video σήμα |
Get/SetVGAKey |
Ελέγχει/καθορίζει αν κάποιο χρώμα επιτρέπει
την εμφάνιση του σήματος της οθόνης |
Get/SetVideoKey |
Ελέγχει/καθορίζει αν κάποιο χρώμα επιτρέπει
την εμφάνιση του σήματος video |
ProgramColorKey |
Προγραμματίζει την ένθεση με βάση το χρώμα |
SetKeyMode |
Επιλέγει την ένθεση ανάμεσα σε 16 ή 256
χρώματα |
Πίνακας 4: Συναρτήσεις ένθεσης με βάση το χρώμα
Ψαλίδισμα της εικόνας
Ένας άλλος τρόπος ελέγχου του τμήματος της εικόνας που εμφανίζεται
είναι ο καθορισμός ψαλιδισμένων τμημάτων (clipping regions). Αυτά
μπορούν να χρησιμοποιηθούν για να επιτρέψουν σε ένα παράθυρο που
περιέχει ζωντανή εικόνα να συμπεριφέρεται σαν οποιοδήποτε άλλο
αντικείμενο του παραθυρικού περιβάλλοντος (πίνακας 5).
Συνάρτηση |
Λειτουργία |
ClipClear |
Καθάρισμα των ψαλιδισμένων τμημάτων |
ClipRegions |
Καθορισμός του αριθμού των ψαλιδισμένων
τμημάτων |
ClipRemove |
Διαγραφή ενός ψαλιδισμένου τμήματος |
ClipSetAbs |
Καθορισμός ψαλιδισμένων τμημάτων |
Reload |
Ελέγχει αν μια σταθερή εικόνα πρέπει να
ξαναφορτωθεί για να ψαλιδιστεί |
ResetReload |
Καλείται πριν το φόρτωμα και τον ψαλιδισμό
μιας σταθερής εικόνας |
DisplayUpdate |
Ενημερώνει την οθόνη μετά τον ψαλιδισμό |
WindowLeftMargin |
Καθορίζει τη θέση μιας γραμμής παρουσίασης
video |
Πίνακας 5: Συναρτήσεις ψαλιδισμού της εικόνας
Ορισμός παραμέτρων παρουσίασης
Μία άλλη ομάδα συναρτήσεων (πίνακας 6)
επιτρέπει τον ορισμό και τον έλεγχο,
της λαμπρότητας, του κορεσμού των χρωμάτων, των συνιστωσών του
κόκκινου, πράσινου και μπλε, καθώς και τον ορισμό κινούμενης ή
σταθερής εικόνας.
Συνάρτηση |
Λειτουργία |
GetB |
Επιστρέφει την ένταση του μπλε στοιχείου |
Get/SetBrightness |
Επιστρέφει/καθορίζει την ένταση της
λαμπρότητας |
Get/SetContrast |
Επιστρέφει/καθορίζει την τιμή των
αντιθέσεων |
GetG |
Επιστρέφει την ένταση του πράσινου
στοιχείου |
GetLive |
Ελέγχει αν η εικόνα είναι κινούμενη |
GetR |
Επιστρέφει την τιμή του κόκκινου στοιχείου |
Get/SetSaturation |
Επιστρέφει/καθορίζει τον τιμή του κορεσμού |
GetVideo |
Ελέγχει αν η εικόνα video είναι ορατή |
Live |
Καθορίζει ζωντανή εικόνα |
PopDisplayDefaults |
Καθορίζει όλες τις παραμέτρους από τις
τιμές που έχουν φυλαχτεί στο σωρό |
PushDisplayDefaults |
Φυλάει όλες τις παραμέτρους στο σωρό |
SetRGB |
Καθορίζει τις τιμές του κόκκινου, πράσινου
και μπλε στοιχείου |
Video |
Καθορίζει αν το σήμα video είναι ορατό |
Πίνακας 6: Συναρτήσεις καθορισμού παραμέτρων παρουσίασης
Ορισμός φίλτρων εικόνας
Η κατάλληλη επεξεργασία του αναλογικού σήματος video πριν από την
ψηφιοποίησή του μπορεί να επιδράσει σημαντικά στην ποιότητα του
τελικού αποτελέσματος. Οι συναρτήσεις που επηρεάζουν το αναλογικό
τμήμα της επεξεργασίας (πίνακας 7)
ελέγχουν ένα ημιπερατό φίλτρο, ένα φίλτρο
θορύβου, και ένα φίλτρο εξομάλυνσης, τη λειτουργία για έγχρωμη η
ασπρόμαυρη εικόνα, τη θέση των χρωμάτων στο πρότυπο NTSC, και τη
λειτουργία ενός διορθωτή χρονισμού για πηγές των οποίων ο
χρονισμός δεν είναι ακριβής λ.χ. συσκευές video.
Συνάρτηση |
Λειτουργία |
Get/SetBandPass |
Επιστρέφει/καθορίζει την τιμή του
ημιπερατού φίλτρου |
Get/SetColor |
Ελέγχει/καθορίζει αν η κάρτα δουλεύει
έγχρωμα ή ασπρόμαυρα |
Get/SetHue |
Επιστρέφει/καθορίζει την τιμή χρωματικής
διόρθωσης για το NTSC |
Get/SetLineInterpola |
tion
Ελέγχει/καθορίζει αν υπάρχει διπλασιασμός
γραμμών για την αποφυγή κινουμένων ειδώλων |
Get/SetNoiseFilter |
Επιστρέφει/καθορίζει την τιμή του φίλτρου
θορύβου |
Get/SetPreFilter |
Επιστρέφει/καθορίζει την τιμή του πρώτου
φίλτρου του σήματος |
Get/SetSharpness |
Επιστρέφει/καθορίζει την τιμή του φίλτρου
καθαρότητας |
PopFilterDefaults |
Καθορίζει τις τιμές των φίλτρων από αυτές
που έχουν φυλαχτεί στο σωρό |
PushFilterDefaults |
Φυλάει τις τιμές των φίλτρων στο σωρό |
Πίνακας 7: Συναρτήσεις ορισμού φίλτρων εικόνας
Ειδικά εφέ
Οι εφαρμογές multimedia μπορούν να γίνουν πιο ενδιαφέρουσες με τη
χρήση ειδικών εφέ. Για την Screen Machine υπάρχουν συναρτήσεις
(πίνακας 8)
που επιτρέπουν τον καθορισμό βαθμιαίας εξασθενήσεως του σήματος
video (fading), καθώς και την οριζόντια η κάθετη σάρωση κατά
βαθμίδες του (wiping). Επιπλέον η τετράγωνη εικόνα μπορεί να
μετατραπεί σε σφαιρική και να μετακινηθεί στην οθόνη σε πραγματικό
χρόνο.
Συνάρτηση |
Λειτουργία |
Fade |
Καθορισμός βαθμιαίας μείωσης της έντασης
της εικόνας |
Wipe |
Αλλάζει τη σταθερή εικόνα με κινητή
κόβοντάς την σε οριζόντια ή κάθετα τμήματα |
MoveSphere |
Καθορίζει τη θέση της σφαιρικής εικόνας |
PrepareSphereMove |
Αρχικοποιεί τις παραμέτρους και τη μνήμη
για κίνηση της εικόνας με μορφή σφαίρας |
Sphere |
Εμφανίζει την εικόνα με μορφή σφαίρας |
ShpereMoveGoodBye |
Αλλάζει την εικόνα από σφαίρα σε ορθογώνια |
Πίνακας 8: Συναρτήσεις ειδικών εφέ
ΒΑΣΙΚΗ ΧΡΗΣΗ ΤΗΣ ΒΙΒΛΙΟΘΗΚΗΣ SM API
Η σύνδεση της βιβλιοθήκης με το πρόγραμμα γίνεται στα κατάλληλα σημεία
του βρόγχου μηνυμάτων (message loop) των Windows.
Στο βασικό παράδειγμα που παραθέτουμε (πίνακας 9)
το πρόγραμμα περιέχει
κώδικα για τα μηνύματα δημιουργίας και καταστροφής του παραθύρου
(WM_CREATE και WM_DESTROY) καθώς και για το μήνυμα
ενεργοποίησης της εφαρμογής (WM_ACTIVATEAPP).
Ο κώδικας για το μήνυμα δημιουργίας του παραθύρου ελέγχει αν είναι
εγκαταστημένη μια Screen Machine στο σύστημα, και
στη συνέχεια καθορίζει ένα ζωντανό παράθυρο ένθεσης με μέγεθος
ίσο με το παράθυρο της εφαρμογής.
Ο κώδικας που αντιστοιχεί στο μήνυμα ενεργοποίησης της εφαρμογής
είναι πιο σύνθετος.
Το μήνυμα WM_ACTIAVATEAPP χρησιμοποιείται και ως μήνυμα
ενεργοποίησης της εφαρμογής (όταν η μεταβλητή wParam είναι
μη μηδενική) και ως μήνυμα απενεργοποίησης (όταν η μεταβλητή wParam είναι
ίση με το μηδέν).
Στην πρώτη περίπτωση (ενεργοποίηση) η εφαρμογή μας πρέπει να
λάβει τον έλεγχο της Screen Machine (με την εντολή SM_getHandle)
ενώ στη δεύτερη (απενεργοποίηση)
πρέπει να κρύψει το παράθυρο ένθεσης έτσι ώστε αυτό
να μην εμφανίζεται πάνω στα παράθυρα άλλων, άσχετων, εφαρμογών.
Επιπλέον η εντολή SM_ReleaseHandle επιτρέπει σε άλλες
εφαρμογές να χρησιμοποιήσουν τη Screen Machine όσο η δική μας
εφαρμογή δεν είναι ενεργοποιημένη.
Αν όλες οι εφαρμογές που χρησιμοποιούν τη Screen Machine αντιδρούν
με αυτόν τον τρόπο στα μηνύματα ενεργοποίησης, τότε η Screen Machine
μπορεί να χρησιμοποιηθεί από πολλές εφαρμογές ταυτόχρονα.
Τέλος, ο κώδικας για το μήνυμα καταστροφής του παραθύρου (WM_DESTROY)
ελευθερώνει τη Screen Machine αφού πρώτα σβήσει το
σήμα video από το παράθυρο ένθεσης.
#include <sm_api.h>
[...]
long FAR PASCAL
WndProc(HWND hwnd, WORD message, WORD wParam, LONG lParam)
static int SM_handle;
switch (message)
case WM_CREATE:
SM_handle = SM_GetHandle();
SM_Select(SM_handle);
if (SM_handle == SM_ERROR)
MessageBox((hwnd, d, "No more Screen Machines available",
NULL, MB_APPLMODAL | MB_OK | MB ICONSTOP);
DestroyWindow(hwnd);
else
SM_Live(ON);
SM_SetForeground(OFF);
SM_VideoFrame(0, 0, -1, -1);
break;
case WM_DESTROY:
if (SM_handle >= 0)
SM_Select(SM_handle);
SM_video(OFF);
SM_ReleaseHandle(SM_handle);
PostQuitMessage(0);
break;
case WM_ACTIVATEAPP:
if (wParam)
SM_handle = SM_getHandle();
else
SM_Select(SM_handle);
SM_Video(OFF)
SM_ReleaseHandle(SM_handle);
break;
[...]
Πίνακας 9: Βασική χρήση της βιβλιοθήκης SM API
ΣΥΝΕΧΙΖΟΝΤΑΣ
Στο επόμενο άρθρο της σειράς αυτής θα εξετάσουμε τη λειτουργικότητα
του Video Workbench και του οδηγού MCI.
Ελπίζουμε να σας έχουμε μαζί μας.
(C) Copyright 1993-97 Διομήδης Σπινέλλης. Επιτρέπεται η ελεύθερη ανάγνωση από browsers του WWW και παρόμοια προγράμματα. Με την επιφύλαξη κάθε άλλου δικαιώματος.