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:

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 μπορούν να χρησιμοποιηθούν με δύο διαφορετικούς τρόπους:
  1. Με την κλίση συγκεκριμένων συναρτήσεων της βιβλιοθήκης SM API (Screen Machine Application Programming Interface) για τη δημιουργία του τελικού αποτελέσματος.
  2. Με τη χρήση του ολοκληρωμένου περιβάλλοντος 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 και παρόμοια προγράμματα. Με την επιφύλαξη κάθε άλλου δικαιώματος.