Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Λήψη του κώδικα
- Βήμα 2: Δημιουργία ενός παραδείγματος έργου
- Βήμα 3: Εκτέλεση της γεννήτριας κώδικα
- Βήμα 4: Προσθήκη παραθύρου
- Βήμα 5: Προσθήκη στοιχείου ελέγχου
- Βήμα 6: Κάνοντας τους ελέγχους να κάνουν κάτι
- Βήμα 7: Σχέδιο στο παράθυρο
- Βήμα 8: Δεδομένα παραθύρου
- Βήμα 9: Κάποια τελική διασκέδαση με γραμματοσειρά
- Βήμα 10: Προχωρώντας περαιτέρω
Βίντεο: Ενσωματωμένος διαχειριστής παραθύρων: 10 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:32
Αυτό το έργο δείχνει πώς να εφαρμόσετε έναν διαχειριστή παραθύρων με κινητά επικαλυπτόμενα παράθυρα σε ενσωματωμένο μικροελεγκτή με οθόνη LCD και οθόνη αφής. Υπάρχουν εμπορικά διαθέσιμα πακέτα λογισμικού για να το κάνετε αυτό, αλλά κοστίζουν χρήματα και είναι κλειστού κώδικα. Αυτό, που ονομάζεται MiniWin, είναι δωρεάν και ανοιχτού κώδικα. Είναι γραμμένο σε πλήρως συμβατό C99 και μπορεί να χρησιμοποιηθεί σε εφαρμογή C ή C ++. Οι στόχοι του MiniWin είναι να είναι εύκολο στη χρήση, εύκολο στην τροποποίηση, επεκτάσιμο, φορητό σε ένα ευρύ φάσμα υλικού και όχι πολύ πεινασμένο για πόρους.
Εκτός από την παροχή του κώδικα για τη διαχείριση των παραθύρων σας, το MiniWin διαθέτει μια συλλογή χειριστηρίων διεπαφής χρήστη - κουμπιά, ρυθμιστικά, γραμμές προόδου, δέντρα κ.λπ. Μπορείτε να έχετε πολλά παράθυρα διαφορετικών τύπων ή πολλές παρουσίες του ίδιου τύπου. Τα Windows μπορούν να μετακινηθούν, να αλλάξουν μέγεθος, να μεγιστοποιηθούν, να ελαχιστοποιηθούν, να κλείσουν - όλα τα συνηθισμένα πράγματα που κάνετε με τα παράθυρα σε μεγαλύτερους διαχειριστές παραθύρων. Οι γραμματοσειρές TrueType με kerning και anti-aliasing (κάνουν το κείμενο να φαίνεται απαλό) υποστηρίζονται επίσης για ελκυστική απόδοση κειμένου.
Σε κάθε παράθυρο έχετε μια περιοχή πελάτη (ο χώρος σας εντός του περιγράμματος και κάτω από την επάνω γραμμή). Σε αυτό μπορείτε να προσθέσετε στοιχεία ελέγχου για να δημιουργήσετε ένα διάλογο ή μπορείτε να χρησιμοποιήσετε την ενσωματωμένη βιβλιοθήκη γραφικών για να σχεδιάσετε ό, τι θέλετε. Όλες οι λειτουργίες της βιβλιοθήκης γραφικών γνωρίζουν το παράθυρο. Δεν χρειάζεται να ανησυχείτε για το πού βρίσκεται το παράθυρό σας, τι επικαλύπτεται ή αν ελαχιστοποιείται.
Εκτός από τη δημιουργία των δικών σας παραθύρων, υπάρχουν επίσης ορισμένα τυπικά παράθυρα διαλόγου που είναι πολύ εύκολο να παρουσιαστούν - για παράδειγμα, διάλογοι επιβεβαίωσης (απλά κουμπιά OK ή Ναι/Όχι), ρυθμιστές ώρας/ημερομηνίας, επιλογείς αρχείων, επιλογείς χρωμάτων κ.λπ.
Το MiniWin χρησιμοποιεί ένα τυπικό σύστημα ουράς σχεδιασμού μηνυμάτων διαχείρισης παραθύρων. Τα Windows μπορούν να αλληλεπιδρούν μεταξύ τους και με τον διαχειριστή παραθύρων μέσω μηνυμάτων. Δεν καλείτε λειτουργίες για να κάνετε τα πράγματα απευθείας, προσθέτετε ένα μήνυμα στην ουρά και ο διαχειριστής παραθύρων θα το εφαρμόσει για εσάς.
Το MiniWin έχει μεταφερθεί σε τυπικούς πίνακες ανάπτυξης με οθόνες αφής από προμηθευτές μικροελεγκτών ST, NXP και Renesas. Υπάρχουν προγράμματα οδήγησης υλικού και παραδείγματα έργων για όλες αυτές τις συσκευές. Επιπλέον, το MiniWin μπορεί να δημιουργηθεί για Windows ή Linux, ώστε να μπορείτε να προσομοιώσετε τον κώδικα της διεπαφής χρήστη πριν λάβετε το ενσωματωμένο υλικό σας.
Το MiniWin διαθέτει γεννήτρια κώδικα. Μπορείτε να καθορίσετε τα παράθυρα και τα στοιχεία ελέγχου σας με απλό προς δημιουργία ανθρώπινο αρχείο JSON και η γεννήτρια κώδικα αναλύει το αρχείο και δημιουργεί τον κώδικα για εσάς (υπάρχουν πολλά παραδείγματα που πρέπει να ακολουθήσετε). Δημιουργεί ολοκληρωμένες εφαρμογές προσομοιωτή Windows ή Linux που μπορούν να δημιουργηθούν και υπάρχει η προσομοιωμένη οθόνη LCD με τα παράθυρα MiniWin να λειτουργούν. Μπορείτε να πάρετε ακριβώς τον ίδιο κωδικό που δημιουργήθηκε και να τον αφήσετε σε ένα ενσωματωμένο έργο και να έχετε τον ίδιο κώδικα που εμφανίζει τα ίδια παράθυρα και στοιχεία ελέγχου στιγμές αργότερα στο ενσωματωμένο υλικό σας.
Το MiniWin δεν απαιτεί υποστήριξη λειτουργίας στην ενσωματωμένη συσκευή. Όλα τρέχουν σε ένα μόνο νήμα. Το MiniWin μπορεί να ενσωματωθεί με ένα RTOS που λειτουργεί σε έναν ενσωματωμένο επεξεργαστή και υπάρχουν παραδείγματα που ενσωματώνουν το MiniWin με το FreeRTOS.
Αυτό το διδακτικό δείχνει πώς να ενεργοποιήσετε το MiniWin σε επεξεργαστή STM32 M4 χρησιμοποιώντας τον φθηνό πίνακα STM32F429 Discovery που συνοδεύεται από μια οθόνη αφής QVGA που είναι ήδη προσαρτημένη. Αυτά είναι εύκολα διαθέσιμα από τον προμηθευτή σας ηλεκτρονικών εξαρτημάτων.
Το MiniWin λειτουργεί σε μικροελεγκτές μεσαίας κατηγορίας και άνω.
Προμήθειες
Πίνακας ανάπτυξης STM32F429I-DISC1 και καλώδιο micro USB
Λήψη STM32CubeIDE που είναι δωρεάν.
Βήμα 1: Λήψη του κώδικα
Πρώτα απ 'όλα χρειάζεστε εγκατεστημένο το STM32CubeIDE. Το παίρνετε από τον ιστότοπο της ST. Πρέπει να εγγραφείτε και χρειάζεται λίγος χρόνος για να το κατεβάσετε και να το εγκαταστήσετε. Είναι όλα δωρεάν.
Κατά την εγκατάσταση, κατεβάστε την πηγή MiniWin και αποσυμπιέστε την. Είναι μεγάλο, αλλά θα χρησιμοποιείτε μόνο ένα μικρό μέρος του. Κάντε κλικ στο πράσινο κουμπί «Κλωνοποίηση ή Λήψη» εδώ…
github.com/miniwinwm/miniwinwm
στη συνέχεια, επιλέξτε Λήψη zip. Αποσυμπιέστε το περιεχόμενο.
Βήμα 2: Δημιουργία ενός παραδείγματος έργου
Αρχικά ας δημιουργήσουμε ένα από τα παραδείγματα έργων. Ένα καλό ονομάζεται MiniWinSimple. Εκκινήστε το STM32CubeIDE και κάντε το εξής:
- Επιλέξτε Αρχείο | Εισαγωγή…
- Ανοίξτε το General και επιλέξτε Existing Project in Workspace. Επόμενο.
- Κάντε κλικ στην επιλογή Περιήγηση και πλοηγηθείτε στο σημείο όπου αποσυμπιέσατε το MiniWin. Στη συνέχεια, μεταβείτε στο φάκελο STM32CubeIDE / MiniWinSimple / STM32F429. Κάντε κλικ στην επιλογή Επιλογή φακέλου.
- Στο έργο: σημειώστε το MiniWinSimple_STM32F429 και, στη συνέχεια, κάντε κλικ στο Τέλος.
- Το έργο MiniWinSimple_STM32F429 θα εμφανιστεί στο Project Explorer. Επιλέξτε το και στη συνέχεια δημιουργήστε το με το Project | Build Project.
- Τώρα συνδέστε το καλώδιο USB στην πλακέτα και τον υπολογιστή σας και εκτελέστε το χρησιμοποιώντας το Run | Debug και όταν γίνει λήψη επιλέξτε Εκτέλεση | Συνέχιση. Θα λάβετε μια οθόνη βαθμονόμησης της οθόνης την πρώτη φορά, οπότε αγγίξτε το κέντρο των 3 σταυρών στην οθόνη LCD. Τώρα μπορείτε να αλληλεπιδράσετε με το παράθυρο στην οθόνη.
Για να μετακινήσετε ένα παράθυρο σύρετε το από τη γραμμή τίτλου του. Για να αλλάξετε το μέγεθος ενός παραθύρου χρησιμοποιήστε το λευκό εικονίδιο τριγώνου στα αριστερά της γραμμής τίτλου. Δεν είναι δυνατή η αλλαγή του μεγέθους των παραθύρων MiniWin σύροντας τα περιγράμματα καθώς οι οθόνες στις οποίες χρησιμοποιείται το MiniWin είναι πολύ μικρές. Για να ελαχιστοποιήσετε, να μεγιστοποιήσετε ή να κλείσετε ένα παράθυρο χρησιμοποιήστε τα εικονίδια στο δεξί άκρο της γραμμής τίτλου (το κλείσιμο ενδέχεται να είναι απενεργοποιημένο). Όταν ελαχιστοποιείται ένα παράθυρο, δεν μπορείτε να μετακινήσετε τα εικονίδια ελαχιστοποίησης. Συγκεντρώνονται από κάτω αριστερά προς τα δεξιά.
Βήμα 3: Εκτέλεση της γεννήτριας κώδικα
Τώρα θα αλλάξουμε το παράδειγμα έργου δημιουργώντας μερικά δικά μας παράθυρα και ρίχνοντας τον νέο κώδικα. Για να γίνει αυτό, θα τρέξουμε τη γεννήτρια κώδικα.
- Ανοίξτε μια γραμμή εντολών και μεταβείτε στο φάκελο στον οποίο αποσυμπιέσατε το MiniWin και, στη συνέχεια, στο φάκελο Tools / CodeGen.
- Το εκτελέσιμο για Windows CodeGen.exe είναι ήδη διαθέσιμο. Για το Linux πρέπει να το χτίσετε πληκτρολογώντας make. (Μπορείτε επίσης να το δημιουργήσετε από πηγή για Windows εάν ανησυχείτε ότι εκτελείτε ένα εκτελέσιμο αρχείο λήψης, αλλά χρειάζεστε εγκατεστημένο το πρόγραμμα μεταγλώττισης και ανάπτυξης. Ανατρέξτε στην τεκμηρίωση MiniWin στο φάκελο docs για λεπτομέρειες).
- Σε αυτόν τον φάκελο υπάρχουν μερικά παραδείγματα αρχείων JSON. Θα χρησιμοποιήσουμε το example_empty.json. Πρέπει πρώτα να το επεξεργαστείτε για να το ρυθμίσετε για Windows ή Linux. Ανοίξτε το σε ένα πρόγραμμα επεξεργασίας και στο επάνω μέρος όπου θα βρείτε το "TargetType" αλλάξτε την τιμή "Linux" ή "Windows" σε αυτό που χρησιμοποιείτε τη γεννήτρια κώδικα.
- Τώρα πληκτρολογήστε codegen example_empty.json στη γραμμή εντολών.
- Μεταβείτε στο έργο σας στο STM32CubeIDE και ανοίξτε το φάκελο MiniWinSimple_Common. Διαγράψτε όλα τα αρχεία εκεί.
- Αφήσαμε το "TargetName" στο αρχείο JSON ως προεπιλογή στο "MiniWinGen", έτσι είναι το όνομα του φακέλου δημιουργημένου κώδικα. Μεταβείτε στον φάκελο στον οποίο αποσυμπιέσατε το φάκελο MiniWin και στη συνέχεια MiniWinGen_Common. Τώρα επιλέξτε όλα αυτά τα αρχεία και σύρετε και αποθέστε στη συνέχεια στο STM32CubeIDE στο φάκελο MiniWinSimple_Common του έργου σας.
- Τώρα ξαναχτίστε και επαναλάβετε το έργο στο STM32CubeIDE και θα εμφανιστεί το νέο παράθυρο σχεδίασης. Το κουμπί στο παράθυρο έχει φύγει επειδή το example_empty.json δεν ορίζει κανένα.
Βήμα 4: Προσθήκη παραθύρου
Τώρα θα προσθέσουμε ένα δεύτερο παράθυρο στο αρχείο διαμόρφωσης JSON και θα δημιουργήσουμε ξανά τον κώδικα.
1. Ανοίξτε το example_empty.json σε ένα πρόγραμμα επεξεργασίας κειμένου.
2. Στην ενότητα "Windows" υπάρχει μια σειρά ορισμών παραθύρων, η οποία αυτή τη στιγμή έχει μόνο ένα παράθυρο. Αντιγράψτε όλα αυτά…
{
"Όνομα": "W1", "Title": "Παράθυρο 1", "X": 10, "Y": 15, "Πλάτος": 200, "ightψος": 180, "Border": true, "TitleBar": true, "Visible": true, "Minimized": false}
και επικολλήστε το ξανά με κόμμα που χωρίζει τους 2 ορισμούς.
3. Αλλάξτε "W1" σε "W2" και "Window 1" σε "Window 2". Αλλάξτε "Χ", "Υ", "Πλάτος" και "ightψος" σε μερικές διαφορετικές τιμές έχοντας υπόψη ότι η ανάλυση οθόνης είναι 240 πλάτος και 320 ύψος.
4. Αποθηκεύστε το αρχείο και εκτελέστε ξανά τη γεννήτρια κώδικα.
5. Αντιγράψτε τα αρχεία όπως στο προηγούμενο βήμα, αναδημιουργήστε και επαναλάβετε. Τώρα θα έχετε 2 παράθυρα στην οθόνη σας.
Βήμα 5: Προσθήκη στοιχείου ελέγχου
Τώρα θα προσθέσουμε μερικά στοιχεία ελέγχου στο νέο σας παράθυρο. Επεξεργαστείτε το ίδιο αρχείο όπως στο προηγούμενο βήμα.
1. Στην προδιαγραφή για το παράθυρο W1 προσθέστε ένα κόμμα μετά την τελευταία ρύθμιση ("Ελαχιστοποίηση": false) και στη συνέχεια προσθέστε αυτό το κείμενο
"MenuBar": true, "MenuBarEnabled": true, "MenuItems": ["Fred", "Bert", "Pete", "Alf", "Ian"], "Buttons": [{"Name": "B1", "Label": "Button1", "X": 10, "Y": 10, "Enabled": true, "Visible": true}]
Αυτή η ενότητα προσθέτει μια γραμμή μενού με 5 στοιχεία και την ενεργοποιεί (οι γραμμές μενού μπορούν να απενεργοποιηθούν παγκοσμίως, δοκιμάστε το). Προσθέτει επίσης ένα κουμπί που είναι ενεργοποιημένο και ορατό (μπορούν να δημιουργηθούν αόρατα και στη συνέχεια να γίνουν ορατά στον κώδικα αργότερα).
2. Ανανεώστε τον κώδικα, αντιγράψτε τον, ξαναχτίστε, επαναλάβετε όπως πριν.
Βήμα 6: Κάνοντας τους ελέγχους να κάνουν κάτι
Τώρα έχουμε το βασικό περιβάλλον χρήστη που χρειαζόμαστε για να το κάνουμε να κάνει κάτι. Για αυτό το παράδειγμα, θα εμφανιστεί ένα παράθυρο διαλόγου επιλογής χρώματος όταν πατηθεί το κουμπί στο Παράθυρο 1.
Μεταβείτε στο έργο σας στο STM32CubeIDE και ανοίξτε το φάκελο MiniWinSimple_Common και, στη συνέχεια, ανοίξτε το αρχείο W1.c (το όνομα αυτού του αρχείου αντιστοιχεί στο πεδίο "Όνομα" του παραθύρου στο αρχείο JSON όταν δημιουργήθηκε ο κώδικας).
Σε αυτό το αρχείο θα βρείτε τη συνάρτηση window_W1_message_function (). Μοιάζει με αυτό:
void window_W1_message_function (const mw_message_t *message) {MW_ASSERT (μήνυμα! = (άκυρο *) 0, "Μηδενική παράμετρος δείκτη"); / * Η επόμενη γραμμή σταματά τις προειδοποιήσεις του μεταγλωττιστή καθώς η μεταβλητή δεν χρησιμοποιείται προς το παρόν */ (άκυρο) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Προσθέστε οποιονδήποτε κωδικό προετοιμασίας παραθύρου εδώ * / break; θήκη MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Προσθήκη κωδικού χειρισμού μενού παραθύρου εδώ * / break; περίπτωση MW_BUTTON_PRESSED_MESSAGE: εάν (μήνυμα-> αποστολέας_χρόνου == κουμπί_Β1_χρόνος) { / * Προσθέστε τον κωδικό χειριστή για αυτό το στοιχείο ελέγχου εδώ * /} διάλειμμα. προεπιλογή: / * Διατηρήστε το MISRA ευτυχισμένο * / διάλειμμα. }}
Αυτό καλείται από τον διαχειριστή παραθύρων για αυτό το παράθυρο κάθε φορά που ο διαχειριστής παραθύρου χρειάζεται να ενημερώσει το παράθυρο ότι κάτι συνέβη. Σε αυτή την περίπτωση μας ενδιαφέρει να γνωρίζουμε ότι έχει πατηθεί το μόνο κουμπί του παραθύρου. Στη δήλωση εναλλαγής για τύπους μηνυμάτων θα δείτε μια περίπτωση για MW_BUTTON_PRESSED_MESSAGE. Αυτός ο κωδικός εκτελείται όταν πατήσετε το κουμπί. Υπάρχει μόνο ένα κουμπί σε αυτό το παράθυρο, αλλά θα μπορούσε να είναι περισσότερο, οπότε γίνεται έλεγχος για το ποιο κουμπί είναι. Σε αυτήν την περίπτωση θα μπορούσε να είναι μόνο το κουμπί B1 (το όνομα αντιστοιχεί ξανά στο όνομα του κουμπιού στο αρχείο JSON).
Μετά από αυτήν την ετικέτα περίπτωσης, προσθέστε τον κώδικα για να εμφανιστεί ένα παράθυρο διαλόγου επιλογής χρώματος, το οποίο είναι αυτό:
mw_create_window_dialog_colour_chooser (10, 10, "Χρώμα", MW_HAL_LCD_RED, false, μήνυμα-> χειριστής_χρόνος);
Οι παράμετροι έχουν ως εξής:
- 10, 10 είναι η θέση στην οθόνη του διαλόγου
- "Χρώμα" είναι ο τίτλος του διαλόγου
- Το MW_HAL_LCD_RED είναι το προεπιλεγμένο χρώμα με το οποίο θα ξεκινήσει το παράθυρο διαλόγου
- τα ψευδή μέσα δεν εμφανίζουν μεγάλο μέγεθος (δοκιμάστε να το ορίσετε σε αληθινό και δείτε τη διαφορά)
- μήνυμα-> λαβή παραλήπτη είναι ο κάτοχος αυτού του διαλόγου, στην περίπτωση αυτή είναι αυτό το παράθυρο. Η λαβή ενός παραθύρου βρίσκεται στην παράμετρο μηνύματος της συνάρτησης. Αυτό είναι το παράθυρο στο οποίο θα σταλεί η απάντηση διαλόγου.
Για να μάθετε την τιμή του χρώματος που επέλεξε ο χρήστης, ο διαχειριστής παραθύρου θα στείλει στο παράθυρό μας ένα μήνυμα με το επιλεγμένο χρώμα όταν ο χρήστης πατήσει το κουμπί OK στο παράθυρο διαλόγου. Επομένως, πρέπει να υποκλέψουμε αυτό το μήνυμα και με μια άλλη περίπτωση στη δήλωση διακόπτη που μοιάζει με αυτό:
θήκη MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE:
{mw_hal_lcd_colour_t selected_colour = message-> message_data; (άκυρο) selected_colour? } Διακοπή;
Δεν κάνουμε τίποτα ακόμα με το επιλεγμένο χρώμα, οπότε απλώς το ρίχνουμε στο κενό για να αποτρέψουμε μια προειδοποίηση μεταγλωττιστή. Ο τελικός κώδικας αυτής της συνάρτησης μοιάζει τώρα με αυτόν:
void window_W1_message_function (const mw_message_t *message)
{MW_ASSERT (μήνυμα! = (Άκυρο*) 0, "Παράμετρος μηδενικού δείκτη"); / * Η επόμενη γραμμή σταματά τις προειδοποιήσεις μεταγλωττιστή καθώς η μεταβλητή δεν χρησιμοποιείται προς το παρόν */ (άκυρο) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Προσθέστε οποιονδήποτε κωδικό προετοιμασίας παραθύρου εδώ * / break; θήκη MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Προσθήκη κωδικού χειρισμού μενού παραθύρου εδώ * / break; θήκη MW_BUTTON_PRESSED_MESSAGE: εάν (μήνυμα-> αποστολέας = χειριστής == κουμπί_Β1_χρόνος) { / * Προσθέστε τον κωδικό χειριστή για αυτό το στοιχείο ελέγχου εδώ * / mw_create_window_dialog_colour_chooser (10, 10, "Color", MW_HAL_LCD_RED, μήνυμα, ψευδές, μήνυμα-; } Διακοπή; περίπτωση MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE: {mw_hal_lcd_colour_t selected_colour = message-> message_data; (άκυρο) selected_colour? } Διακοπή; προεπιλογή: / * Διατηρήστε το MISRA ευτυχισμένο * / διάλειμμα. }}
Η εκτέλεση του κώδικα εμφανίζεται στην παραπάνω εικόνα. Σως παρατηρήσετε ότι όταν εμφανίζεται ένας διάλογος πρέπει να απαντήσετε σε αυτόν και να τον απορρίψετε πριν κάνετε οτιδήποτε άλλο. Αυτό ονομάζεται modal συμπεριφορά. Διάλογοι σε MiniWin και όλα πάντα σε παγκόσμιο επίπεδο και μπορείτε να έχετε μόνο μία εμφάνιση τη φορά. Υπάρχει περισσότερη εξήγηση εδώ…
en.wikipedia.org/wiki/Modal_window
Βήμα 7: Σχέδιο στο παράθυρο
Μέχρι στιγμής χρησιμοποιήσαμε μόνο χειριστήρια και αυτά σχεδιάζονται μόνοι τους. It'sρθε η ώρα να κάνουμε κάποια προσαρμοσμένη σχεδίαση στο παράθυρό μας. Το μέρος στο οποίο μπορείτε να σχεδιάσετε είναι μέσα στα περιγράμματα (αν υπάρχουν, είναι προαιρετικά), μέσα στις γραμμές κύλισης (εάν ορίζονται, επίσης προαιρετικά) και κάτω από τη γραμμή τίτλου (εάν υπάρχει, είναι επίσης προαιρετικό). Ονομάζεται περιοχή πελάτη στην ορολογία παραθύρων.
Υπάρχει μια βιβλιοθήκη εντολών γραφικών στο MiniWin που μπορείτε να χρησιμοποιήσετε. Όλοι είναι ενήμεροι για το παράθυρο. Αυτό σημαίνει ότι δεν χρειάζεται να ανησυχείτε εάν το παράθυρο είναι ορατό, εν μέρει σκοτεινό από άλλα παράθυρα, ενεργοποιημένο, εν μέρει απενεργοποιημένο ή εντελώς εκτός οθόνης ή εάν η συντεταγμένη του τόπου που σχεδιάζετε βρίσκεται στην περιοχή του πελάτη ή πέρα από αυτήν Το Όλα φροντίζονται για εσάς. Δεν μπορείτε να σχεδιάσετε εκτός της περιοχής πελατών σας.
Το να σχεδιάζετε περιοχές πελατών στην ορολογία των παραθύρων ονομάζεται ζωγραφική και κάθε παράθυρο έχει μια λειτουργία βαφής όπου κάνετε το σχέδιό σας. Δεν καλείτε τη λειτουργία βαφής, ο διαχειριστής παραθύρων το κάνει για σας όταν χρειάζεται. Είναι απαραίτητο όταν μετακινείται ένα παράθυρο ή όταν αλλάζει η θέση ή η ορατότητα ενός άλλου παραθύρου στην κορυφή. Εάν χρειάζεστε τη βαφή του παραθύρου σας επειδή άλλαξαν ορισμένα δεδομένα από τα οποία εξαρτώνται τα περιεχόμενα του παραθύρου (δηλ. Γνωρίζετε ότι απαιτείται επαναβαφή αντί να το γνωρίζει ο διαχειριστής παραθύρων), τότε λέτε στον διαχειριστή παραθύρου ότι χρειάζεται επανάληψη και καλεί τη λειτουργία βαφής σας. Δεν το λες μόνος σου. (Όλα αυτά αποδεικνύονται στην επόμενη ενότητα).
Πρώτον, πρέπει να βρείτε τη λειτουργία βαφής σας. Η γεννήτρια κώδικα το δημιουργεί για εσάς και βρίσκεται ακριβώς πάνω από τη λειτουργία χειρισμού μηνυμάτων που τροποποιήθηκε στην προηγούμενη ενότητα. Μεταβείτε στο έργο σας και ανοίξτε ξανά το αρχείο W1.c.
Σε αυτό το αρχείο θα βρείτε τη συνάρτηση window_W1_paint_function (). Μοιάζει με αυτό:
void window_W1_paint_function (mw_handle_t window_handle, const mw_gl_draw_info_t *draw_info)
{MW_ASSERT (draw_info! = (Void*) 0, "Παράμετρος μηδενικού δείκτη"); / * Συμπληρώστε την περιοχή πελάτη του παραθύρου με λευκό */ mw_gl_set_fill (MW_GL_FILL). mw_gl_set_solid_fill_colour (MW_HAL_LCD_WHITE); mw_gl_set_border (MW_GL_BORDER_OFF); mw_gl_clear_pattern (); mw_gl_rectangle (draw_info, 0, 0, mw_get_window_client_rect (window_handle). πλάτος, mw_get_window_client_rect (window_handle). ύψος); / * Προσθέστε τον κωδικό ζωγραφικής παραθύρου εδώ */}
Αυτός είναι ο γυμνός κωδικός που δημιουργήθηκε και το μόνο που κάνει είναι να γεμίσει την περιοχή του πελάτη με λευκό χρώμα. Ας σχεδιάσουμε έναν κίτρινο γεμάτο κύκλο στην περιοχή του πελάτη. Πρώτα πρέπει να κατανοήσουμε την έννοια ενός περιβάλλοντος γραφικών (άλλο θέμα Windows). Ορίζουμε παραμέτρους σχεδίασης στο πλαίσιο γραφικών και καλούμε μια γενική ρουτίνα σχεδίασης κύκλου. Τα πράγματα που πρέπει να ορίσουμε σε αυτό το παράδειγμα είναι αν ο κύκλος έχει περίγραμμα, στυλ γραμμής περιγράμματος, χρώμα περιγράμματος, αν ο κύκλος είναι γεμάτος, χρώμα πλήρωσης και μοτίβο πλήρωσης. Μπορείτε να δείτε τον παραπάνω κώδικα που κάνει κάτι παρόμοιο για να γεμίσει την περιοχή του πελάτη με ένα στερεό λευκό ορθογώνιο γεμάτο χωρίς περιθώρια. Οι τιμές στο πλαίσιο γραφικών δεν θυμούνται μεταξύ κάθε κλήσης της λειτουργίας βαφής, οπότε πρέπει να ρυθμίζετε τις τιμές κάθε φορά (θυμούνται ωστόσο με τη λειτουργία βαφής).
Στον παραπάνω κώδικα μπορείτε να δείτε ότι το Fill είναι ενεργοποιημένο και το μοτίβο συμπλήρωσης είναι απενεργοποιημένο, οπότε δεν χρειάζεται να τα ορίσουμε ξανά. Πρέπει να ορίσουμε το περίγραμμα, το στυλ γραμμής περιγράμματος σε συμπαγές, το χρώμα του προσκηνίου στο μαύρο και το χρώμα στο κίτρινο ως εξής:
mw_gl_set_fg_colour (MW_HAL_LCD_BLACK);
mw_gl_set_solid_fill_colour (MW_HAL_LCD_YELLOW); mw_gl_set_line (MW_GL_SOLID_LINE); mw_gl_set_border (MW_GL_BORDER_ON); mw_gl_circle (draw_info, window_simple_data.circle_x, window_simple_data.circle_y, 25);
Προσθέστε αυτόν τον κωδικό στο σχόλιο σε αυτήν τη συνάρτηση όπου λέει να προσθέσετε τον κωδικό σας. Στη συνέχεια πρέπει να σχεδιάσουμε έναν κύκλο που γίνεται έτσι:
mw_gl_circle (draw_info, 30, 30, 15);
Αυτό σχεδιάζει έναν κύκλο στις συντεταγμένες 30, 30 με ακτίνα 15. Αναδημιουργήστε τον κώδικα και επαναλάβετε τον και θα δείτε έναν κύκλο στο παράθυρο όπως φαίνεται παραπάνω. Θα παρατηρήσετε ότι ο κύκλος και το κουμπί επικαλύπτονται, αλλά το κουμπί βρίσκεται στην κορυφή. Αυτό είναι από το σχεδιασμό. Τα στοιχεία ελέγχου είναι πάντα πάνω από οτιδήποτε τραβάτε στην περιοχή του πελάτη.
Βήμα 8: Δεδομένα παραθύρου
Μέχρι τώρα έχουμε εφαρμόσει τον δικό μας κώδικα στη λειτουργία μηνυμάτων του παραθύρου 1 (για τον χειρισμό εισερχόμενων μηνυμάτων) και τη λειτουργία βαφής (για να σχεδιάσετε την περιοχή του πελάτη του παραθύρου). Τώρα ήρθε η ώρα να συνδέσουμε τα δύο. Ας γεμίσουμε τον κύκλο που σχεδιάζεται στη λειτουργία βαφής με το χρώμα που επιλέγει ο χρήστης από τον επιλογέα χρώματος όταν πατήθηκε το κουμπί. Θυμηθείτε ότι δεν καλούμε τη λειτουργία βαφής, το κάνει ο διαχειριστής παραθύρων, οπότε η λειτουργία μηνυμάτων μας (που γνωρίζει το επιλεγμένο χρώμα) δεν μπορεί να καλέσει τη λειτουργία βαφής η ίδια. Αντ 'αυτού, πρέπει να αποθηκεύσουμε προσωρινά τα δεδομένα και να ενημερώσουμε τον διαχειριστή παραθύρου ότι απαιτείται επανάληψη βαφής. Στη συνέχεια, ο διαχειριστής παραθύρων θα καλέσει τη λειτουργία βαφής η οποία μπορεί να χρησιμοποιήσει τα αποθηκευμένα δεδομένα.
Στο επάνω μέρος του W1.c θα δείτε μια κενή δομή δεδομένων και ένα αντικείμενο αυτού του τύπου που έχει δηλωθεί από τη γεννήτρια κώδικα όπως αυτό:
typedef strukt
{ / * Προσθέστε τα μέλη των δεδομένων σας εδώ * / char dummy; /* Μερικοί μεταγλωττιστές παραπονιούνται για άδεια δομές. καταργήστε αυτό όταν προσθέτετε τα μέλη σας */} window_W1_data_t. στατικό window_W1_data_t window_W1_data?
Εδώ αποθηκεύουμε προσωρινά τα δεδομένα μας έτσι ώστε να διατηρούνται σε κλήσεις και να είναι γνωστά ως δεδομένα παραθύρου. Χρειάζεται μόνο να αποθηκεύσουμε το επιλεγμένο χρώμα εδώ, όπως αυτό:
typedef strukt
{ / * Προσθέστε τα μέλη των δεδομένων σας εδώ * / mw_hal_lcd_colour_t selected_colour; } window_W1_data_t; στατικό window_W1_data_t window_W1_data = {MW_HAL_LCD_YELLOW};
Θα του δώσουμε ένα αρχικό χρώμα κίτρινου. Τώρα στη λειτουργία μηνύματος θα αλλάξουμε ελαφρώς τον κωδικό για να αποθηκεύσουμε το επιλεγμένο χρώμα εδώ ως εξής:
θήκη MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE:
{window_W1_data.chosen_colour = μήνυμα-> message_data; } Διακοπή;
Στη συνέχεια, θα αλλάξουμε τη λειτουργία βαφής για να χρησιμοποιήσουμε αυτήν την τιμή όταν σχεδιάζει τον κύκλο ως εξής:
mw_gl_set_solid_fill_colour (window_W1_data.chosen_colour);
Τώρα έχουμε αλλάξει τα δεδομένα από τα οποία εξαρτάται το περιεχόμενο του παραθύρου, οπότε πρέπει να ενημερώσουμε τον διαχειριστή παραθύρου ότι το παράθυρο χρειάζεται βαφή. Το κάνουμε στη λειτουργία μηνύματος όταν ληφθεί το παράθυρο διαλόγου ΟΚ, όπως αυτό:
mw_paint_window_client (μήνυμα-> παραλήπτης_χρόνος);
Αυτό δεν προκαλεί απευθείας βαφή του παραθύρου. Είναι μια βοηθητική λειτουργία που στέλνει ένα μήνυμα στον διαχειριστή παραθύρων ότι ένα παράθυρο πρέπει να ξαναβαφτεί (αν το πατήσετε μπορείτε να δείτε πώς συμβαίνει αυτό). Το παράθυρο που πρέπει να ξαναβαφτεί σε αυτήν την περίπτωση είναι το ίδιο και η λαβή στο παράθυρο βρίσκεται στην παράμετρο μηνύματος στη λειτουργία χειρισμού μηνυμάτων.
Ολόκληρο το αρχείο τώρα μοιάζει με αυτό αν δεν είστε βέβαιοι για το πού πηγαίνουν μερικά από τα αποσπάσματα κώδικα παραπάνω:
#περιλαμβάνω
#include "miniwin.h" #include "miniwin_user.h" #include "W1.h" typedef struct { / * Προσθέστε τα μέλη των δεδομένων σας εδώ * / mw_hal_lcd_colour_t selected_colour; } window_W1_data_t; στατικό window_W1_data_t window_W1_data = {MW_HAL_LCD_YELLOW}; void window_W1_paint_function (mw_handle_t window_handle, const mw_gl_draw_info_t *draw_info) {MW_ASSERT (draw_info! = (void *) 0, "Παράμετρος μηδενικού δείκτη"); / * Συμπληρώστε την περιοχή πελάτη του παραθύρου με λευκό */ mw_gl_set_fill (MW_GL_FILL). mw_gl_set_solid_fill_colour (MW_HAL_LCD_WHITE); mw_gl_set_border (MW_GL_BORDER_OFF); mw_gl_clear_pattern (); mw_gl_rectangle (draw_info, 0, 0, mw_get_window_client_rect (window_handle). πλάτος, mw_get_window_client_rect (window_handle). ύψος); / * Προσθέστε κώδικα ζωγραφικής παραθύρου εδώ */ mw_gl_set_fg_colour (MW_HAL_LCD_BLACK); mw_gl_set_solid_fill_colour (window_W1_data.chosen_colour); mw_gl_set_line (MW_GL_SOLID_LINE); mw_gl_set_border (MW_GL_BORDER_ON); mw_gl_circle (draw_info, 30, 30, 15); } void window_W1_message_function (const mw_message_t *μήνυμα) {MW_ASSERT (μήνυμα! = (άκυρο *) 0, "Παράμετρος μηδενικού δείκτη"); / * Η επόμενη γραμμή σταματά τις προειδοποιήσεις μεταγλωττιστή καθώς η μεταβλητή δεν χρησιμοποιείται προς το παρόν */ (άκυρο) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Προσθέστε οποιονδήποτε κωδικό προετοιμασίας παραθύρου εδώ * / break; θήκη MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Προσθήκη κωδικού χειρισμού μενού παραθύρου εδώ * / break; θήκη MW_BUTTON_PRESSED_MESSAGE: εάν (μήνυμα-> αποστολέας = χειριστής == κουμπί_Β1_χρόνος) { / * Προσθέστε τον κωδικό χειριστή για αυτό το στοιχείο ελέγχου εδώ * / mw_create_window_dialog_colour_chooser (10, 10, "Color", MW_HAL_LCD_RED, μήνυμα, ψευδές, μήνυμα-; } Διακοπή; θήκη MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE: {window_W1_data.chosen_colour = message-> message_data; mw_paint_window_client (μήνυμα-> παραλήπτης_χρόνος); } Διακοπή; προεπιλογή: / * Διατηρήστε το MISRA ευτυχισμένο * / διάλειμμα. }}
Δημιουργήστε και εκτελέστε ξανά και θα πρέπει να μπορείτε να ορίσετε το χρώμα πλήρωσης του κύκλου.
Αυτό το παράδειγμα δεδομένων παραθύρου χρησιμοποιεί δεδομένα που είναι αποθηκευμένα σε μια στατική δομή δεδομένων στο επάνω μέρος του αρχείου προέλευσης. Αυτό είναι καλό αν έχετε μόνο μία παρουσία του παραθύρου, όπως κάνουμε σε αυτό το παράδειγμα, αλλά αν έχετε περισσότερες από μία περιπτώσεις, τότε θα μοιράζονται όλα την ίδια δομή δεδομένων. Είναι δυνατό να έχετε δεδομένα ανά περίπτωση, ώστε πολλές περιπτώσεις του ίδιου τύπου παραθύρου να έχουν τα δικά τους δεδομένα. Αυτό εξηγείται στην τεκμηρίωση MiniWin που βρίσκεται στον κατάλογο εγγράφων. Το παράδειγμα αρχείου το χρησιμοποιεί για την εμφάνιση πολλαπλών εικόνων στον ίδιο τύπο παραθύρου (όπως φαίνεται στην κύρια εικόνα στο πάνω μέρος αυτού του οδηγού).
Βήμα 9: Κάποια τελική διασκέδαση με γραμματοσειρά
Το MiniWin υποστηρίζει απόδοση γραμματοσειράς TrueType. Εάν υπάρχει ένα πράγμα που κάνει τη διεπαφή χρήστη σας να φαίνεται καλή, είναι οι ελκυστικές γραμματοσειρές. Αυτό το τελευταίο βήμα δείχνει πώς να αποδώσετε μια γραμματοσειρά TrueType σε ένα παράθυρο MiniWin.
Υπάρχουν δύο τρόποι απόδοσης γραμματοσειρών TrueType. Το ένα είναι να τα σχεδιάσετε απευθείας στην περιοχή του πελάτη σας, όπως έγινε για τον κύκλο νωρίτερα, το άλλο είναι να προσθέσετε ένα στοιχείο ελέγχου πλαισίου κειμένου στο παράθυρό σας. Κάνουμε το τελευταίο καθώς είναι πιο εύκολο.
Τώρα θα προσθέσουμε ένα στοιχείο ελέγχου πλαισίου κειμένου στο αρχείο διαμόρφωσης JSON. Προσθέστε τον στον ορισμό του παραθύρου 2, έτσι ώστε να μοιάζει με αυτό:
σαν αυτό:
{
"Όνομα": "W2", "Title": "Παράθυρο 2", "X": 50, "Y": 65, "Πλάτος": 100, "ightψος": 80, "Border": true, "TitleBar": true, "Visible": true, "Minimized": false, "TextBoxes": [{"Name": "TB1", "X": 0, "Y": 0, "Width": 115, "Height": 50, "Justification": "Center", "BackgroundColour": "MW_HAL_LCD_YELLOW", "ForegroundColour": "MW_HAL_LCD_BLACK", "Font": "mf_rlefont_BLKCHCRY16", "Enabled": true, "Visible": true}}
Μια γρήγορη λέξη για τις γραμματοσειρές TrueType στο MiniWin. Οι γραμματοσειρές έρχονται σε αρχεία.ttf. Σε διαχειριστές παραθύρων σε μεγαλύτερους υπολογιστές, αυτά μεταφέρονται στην οθόνη σας όταν χρειάζονται. Αυτό απαιτεί πολλή επεξεργαστική ισχύ και μνήμη και δεν είναι κατάλληλο για μικρές συσκευές. Στο MiniWin υποβάλλονται σε προεπεξεργασία σε bitmap και συνδέονται τη στιγμή της μεταγλώττισης σε ένα σταθερό μέγεθος και στυλ γραμματοσειράς (έντονα, πλάγια κλπ), δηλαδή πρέπει να αποφασίσετε ποιες γραμματοσειρές σε τι μέγεθος και στυλ πρόκειται να χρησιμοποιήσετε κατά τη μεταγλώττιση. Αυτό έχει γίνει για εσάς για δύο παραδείγματα γραμματοσειρών στο αρχείο zip MiniWin που κατεβάσατε. Εάν θέλετε να χρησιμοποιήσετε άλλες γραμματοσειρές σε άλλα μεγέθη και στυλ, ανατρέξτε στην τεκμηρίωση του MiniWin στο φάκελο εγγράφων. Υπάρχουν εργαλεία στο MiniWin για Windows και Linux για προεπεξεργασία αρχείων.ttf σε αρχεία πηγαίου κώδικα που μπορείτε να ρίξετε στο έργο σας.
Και μια δεύτερη γρήγορη λέξη - οι περισσότερες γραμματοσειρές είναι πνευματικά δικαιώματα, συμπεριλαμβανομένων αυτών που θα βρείτε στα Microsoft Windows. Χρησιμοποιήστε τα κατά βούληση για προσωπική χρήση, αλλά οτιδήποτε δημοσιεύσετε πρέπει να διασφαλίσετε ότι η άδεια με την οποία δημοσιεύονται οι γραμματοσειρές το επιτρέπει, όπως συμβαίνει με τις 2 γραμματοσειρές που περιλαμβάνονται στο MiniWin, αλλά όχι τις γραμματοσειρές της Microsoft!
Επιστροφή στον κωδικό! Δημιουργήστε, αποθέστε αρχεία, δημιουργήστε και επαναλάβετε όπως πριν και θα δείτε ότι το Παράθυρο 2 έχει τώρα ορισμένο προεπιλεγμένο κείμενο σε κίτρινο φόντο με σάκκο γραμματοσειρά. Ας αλλάξουμε το κείμενο επεξεργάζοντας το αρχείο προέλευσης του παραθύρου 2 W2.c.
Πρέπει να επικοινωνήσουμε με το πλαίσιο κειμένου που μόλις δημιουργήσαμε και ο τρόπος που το κάνετε όπως κάθε επικοινωνία στο MiniWin είναι να του στείλετε ένα μήνυμα. Θέλουμε να ορίσουμε το κείμενο στο στοιχείο ελέγχου όταν δημιουργηθεί το παράθυρο αλλά πριν εμφανιστεί, οπότε προσθέτουμε κώδικα στο χειριστή μηνυμάτων στην περίπτωση MW_WINDOW_CREATED_MESSAGE. Αυτό λαμβάνεται από τον κωδικό παραθύρου λίγο πριν εμφανιστεί το παράθυρο και προορίζεται για αρχικοποιήσεις όπως αυτή. Η γεννήτρια κώδικα δημιούργησε έναν κάτοχο θέσης που μοιάζει με αυτόν στη λειτουργία χειρισμού μηνυμάτων:
θήκη MW_WINDOW_CREATED_MESSAGE:
/ * Προσθέστε οποιονδήποτε κωδικό προετοιμασίας παραθύρου εδώ */ break;
Εδώ θα δημοσιεύσουμε ένα μήνυμα στο στοιχείο ελέγχου πλαισίου κειμένου που θα του λέει ποιο κείμενο θέλουμε να εμφανίζεται χρησιμοποιώντας τη συνάρτηση mw_post_message όπως αυτή:
θήκη MW_WINDOW_CREATED_MESSAGE:
/ * Προσθέστε οποιονδήποτε κωδικό προετοιμασίας παραθύρου εδώ */ mw_post_message (MW_TEXT_BOX_SET_TEXT_MESSAGE, μήνυμα-> παραλήπτης_χρόνος, text_box_TB1_handle, 0UL, "asταν μια σκοτεινή και θυελλώδης νύχτα …", MW_CONTROL_MESSAGE); Διακοπή;
Αυτές είναι οι παράμετροι:
- MW_TEXT_BOX_SET_TEXT_MESSAGE - Αυτός είναι ο τύπος μηνύματος που στέλνουμε στο στοιχείο ελέγχου. Παρατίθενται στο miniwin.h και τεκμηριώνονται στην τεκμηρίωση.
- μήνυμα-> παραλήπτης_χειρισμός - Αυτός είναι ο αποδέκτης του μηνύματος - αυτό το παράθυρο - η λαβή του οποίου βρίσκεται στην παράμετρο μηνύματος που μεταβιβάζεται στη λειτουργία χειρισμού μηνυμάτων.
- text_box_TB1_handle - Σε ποιον στέλνουμε το μήνυμα - τη λαβή του στοιχείου ελέγχου πλαισίου κειμένου. Αυτά παρατίθενται στο δημιουργημένο αρχείο miniwin_user.h.
- 0UL - Τιμή δεδομένων, τίποτα σε αυτήν την περίπτωση.
- "Aταν μια σκοτεινή και θυελλώδης νύχτα …" - Τιμή δείκτη - το νέο κείμενο.
- MW_CONTROL_MESSAGE - Τύπος παραλήπτη που είναι στοιχείο ελέγχου.
Αυτό είναι. Αναδημιουργήστε και επαναλάβετε ως συνήθως και θα εμφανιστεί το πλαίσιο κειμένου όπως στην παραπάνω εικόνα.
Η ανάρτηση μηνυμάτων είναι θεμελιώδης για το MiniWin (όπως και για όλους τους διαχειριστές παραθύρων). Για περισσότερα παραδείγματα, δείτε τα παραδείγματα έργων στο αρχείο zip και για μια ολοκληρωμένη εξήγηση διαβάστε την ενότητα σχετικά με τα μηνύματα MiniWin στην τεκμηρίωση.
Βήμα 10: Προχωρώντας περαιτέρω
Αυτό είναι όλο για αυτή τη βασική εισαγωγή στο MiniWin. Το MiniWin μπορεί να κάνει πολλά περισσότερα από όσα έχουν αποδειχθεί εδώ. Για παράδειγμα, η οθόνη στον πίνακα που χρησιμοποιείται σε αυτό το εγχειρίδιο είναι μικρή και τα χειριστήρια είναι μικρά και πρέπει να χρησιμοποιούνται με ντιμπέρ. Ωστόσο, άλλα παραδείγματα και υλικό χρησιμοποιούν μεγαλύτερα χειριστήρια (υπάρχουν 2 μεγέθη) σε μεγαλύτερες οθόνες και αυτά μπορούν να λειτουργούν με τα δάχτυλα.
Υπάρχουν πολλοί άλλοι τύποι ελέγχου από αυτούς που παρουσιάζονται εδώ. Για περαιτέρω ελέγχους, ρίξτε μια ματιά στα διάφορα παραδείγματα αρχείων JSON στο φάκελο δημιουργίας κώδικα. Όλοι οι τύποι ελέγχου καλύπτονται σε αυτά τα παραδείγματα.
Τα Windows έχουν πολλές επιλογές. Το περίγραμμα, η γραμμή τίτλου και τα εικονίδια είναι όλα διαμορφώσιμα. Μπορείτε να έχετε μπάρες κύλισης και περιοχές πελάτη κύλισης παραθύρων, πολλές περιπτώσεις του ίδιου τύπου παραθύρου και παράθυρα μπορούν να είναι γυμνά (μόνο μια περιοχή πελάτη, χωρίς περίγραμμα ή γραμμή τίτλου), πράγμα που σημαίνει ότι έχουν καθοριστεί τη στιγμή της μεταγλώττισης στη θέση της στην οθόνη (δείτε την εικόνα σε αυτήν την ενότητα με μεγάλα εικονίδια μεγέθους - αυτά είναι στην πραγματικότητα 6 γυμνά παράθυρα).
Το MiniWin δεν χρησιμοποιεί δυναμική μνήμη. Αυτό το καθιστά κατάλληλο για μικρές συσκευές περιορισμένης πρόσβασης και αποτελεί απαίτηση για ορισμένα ενσωματωμένα έργα. Το MiniWin και ο κώδικας που παράγει είναι επίσης πλήρως συμβατός με το MISRA 2012 στο «απαιτούμενο» επίπεδο.
Για περισσότερες πληροφορίες, ρίξτε μια ματιά στο φάκελο docs για την τεκμηρίωση και επίσης τις άλλες παραδείγματα εφαρμογών στο αρχείο zip. Υπάρχουν εδώ παραδείγματα που δείχνουν πώς να χρησιμοποιείτε όλες τις δυνατότητες του MiniWin και πώς να ενσωματώνετε το MiniWin με το FatFS και το FreeRTOS.
Συνιστάται:
Διαχειριστής Tasmota - Πίνακας ελέγχου IIoT: 6 βήματα
Διαχειριστής Tasmota - Πίνακας ελέγχου IIoT: Το TasmoAdmin είναι ένας διαχειριστικός ιστότοπος για συσκευές που αναβοσβήνει με το Tasmota. Μπορείτε να το βρείτε εδώ: TasmoAdmin GitHub. Υποστηρίζει την εκτέλεση σε κοντέινερ Windows, Linux και Docker
Αυτοματοποίηση θερμοκηπίου με LoRa! (Μέρος 2) -- Μηχανοκίνητο ανοιχτήρι παραθύρων: 6 βήματα (με εικόνες)
Αυτοματοποίηση θερμοκηπίου με LoRa! (Μέρος 2) || Motorized Window Opener: Σε αυτό το έργο θα σας δείξω πώς δημιούργησα ένα μηχανοκίνητο ανοιχτήρι παραθύρων για το θερμοκήπιο μου. Αυτό σημαίνει ότι θα σας δείξω τι μοτέρ χρησιμοποίησα, πώς σχεδίασα το πραγματικό μηχανικό σύστημα, πώς οδηγώ τον κινητήρα και τέλος πώς χρησιμοποίησα ένα Arduino LoRa
EAL - Ενσωματωμένος προγραμματισμός: Candy Mixer 1000: 9 Βήματα
EAL - Ενσωματωμένος προγραμματισμός: Candy Mixer 1000: Για το έργο μας στο Arduino αποφασίσαμε να φτιάξουμε ένα μίξερ για καραμέλες. Η ιδέα είναι ότι ο χρήστης μπορεί να πατήσει ένα κουμπί και στη συνέχεια οι κινητήρες θα αρχίσουν να εκτοξεύουν την καραμέλα σε ένα μπολ και όταν το πρόγραμμα τελειώσει, θα σταματήσει. Το πρώτο βύθισμα
Διαχειριστής διακομιστή / Πίνακας webhosting για Raspberry Pi (Ajenti): 5 βήματα
Server Admin / Webhosting Panel for Raspberry Pi (Ajenti): Γεια σας και καλώς ήρθατε στο πρώτο μου Instructable. Αυτός ο οδηγός αφορά την εγκατάσταση του Ajenti σε ένα Raspberry pi. Αλλά αυτός ο οδηγός μπορεί επίσης να χρησιμοποιηθεί για την εγκατάσταση του ajenti σε οποιοδήποτε λειτουργικό σύστημα βασίζεται σε debian. Τι είναι το Ajenti; Το Ajenti είναι ένας πίνακας διαχειριστή διακομιστή ανοιχτού κώδικα που
Διαχειριστής σχέσεων κοινωνικού κύκλου: 7 βήματα (με εικόνες)
Διαχειριστής σχέσεων κοινωνικού κύκλου: Τι είναι αυτό; Το να διατηρείτε επαφή με όλα τα σημαντικά άτομα στον κοινωνικό σας κύκλο μπορεί να είναι δύσκολο, ειδικά όταν ζείτε σε μια μεγάλη πόλη, εργασιομανείς, φοιτητές ή όλα τα παραπάνω. Ο Κοινωνικός Κύκλος προσφέρει έναν τρόπο να κρατήσετε όλα τα αγαπημένα σας πρόσωπα σε ένα