Sisukord:

Sisseehitatud aknahaldur: 10 sammu
Sisseehitatud aknahaldur: 10 sammu

Video: Sisseehitatud aknahaldur: 10 sammu

Video: Sisseehitatud aknahaldur: 10 sammu
Video: Самый простой способ выровнять пол! Наливной пол за 20 минут. 2024, Juuli
Anonim
Sisseehitatud aknahaldur
Sisseehitatud aknahaldur
Sisseehitatud aknahaldur
Sisseehitatud aknahaldur
Sisseehitatud aknahaldur
Sisseehitatud aknahaldur
Sisseehitatud aknahaldur
Sisseehitatud aknahaldur

See projekt näitab, kuidas teisaldatavate kattuvate akendega aknahaldurit juurutada LCD-paneeli ja puuteekraaniga sisseehitatud mikrokontrollerile. Selle tegemiseks on müügil tarkvarapakette, kuid need maksavad raha ja on suletud lähtekoodiga. See, nimega MiniWin, on tasuta ja avatud lähtekoodiga. See on kirjutatud täielikult ühilduvas C99 -s ja seda saab kasutada C- või C ++ -rakenduses. MiniWini eesmärgid on olla hõlpsasti kasutatavad, hõlpsasti muudetavad, laiendatavad, kaasaskantavad laiale riistvarale ja mitte liiga ressursinäljased.

Lisaks akende haldamise koodile pakub MiniWin ka kasutajaliidese juhtelementide kogumit - nuppe, liugureid, edenemisribasid, puid jne. Teil võib olla mitu erinevat tüüpi akent või mitu sama tüüpi eksemplari. Aknaid saab teisaldada, nende suurust muuta, maksimeerida, minimeerida, sulgeda - kõik tavalised toimingud, mida teete suuremate aknahaldurite akendega. Atraktiivse tekstide renderdamise jaoks on toetatud ka tuuma ja valetõrjega TrueType-fonte (muudab teksti sujuvaks).

Igas aknas on kliendipiirkond (teie ruum piiri sees ja ülemise riba all). Sellele saate lisada dialoogi tegemiseks juhtelemente või kasutada sisseehitatud graafikakogu, et joonistada mida iganes soovite. Kõik graafikakogu funktsioonid on aknas teadlikud. Te ei pea muretsema, kus teie aken asub, mis sellega kattub või kui see on minimeeritud.

Lisaks oma akende tegemisele on kaasas ka mõned tavalised dialoogid, mida on väga lihtne tuvastada - näiteks kinnitusdialoogid (lihtsalt nupud OK või Jah/Ei), kellaaja/kuupäeva seadistajad, failivalijad, värvivalijad jne.

MiniWin kasutab standardset Windowsi halduri kujundussõnumite järjekorrasüsteemi. Windows saab üksteisega ja aknahalduriga sõnumite kaudu suhelda. Te ei kutsu funktsioone otse asjade tegemiseks, lisate sõnumi järjekorda ja aknahaldur kehtestab selle teie eest.

MiniWin on viidud mikrokontrollerite müüjate ST, NXP ja Renesase puuteekraaniga standardsetesse arendusplaatidesse. Kõigi nende seadmete jaoks on olemas riistvaradraiverid ja näidisprojektid. Lisaks saab MiniWini luua Windowsi või Linuxi jaoks, nii et saate enne manustatud riistvara hankimist oma kasutajaliidese koodi simuleerida.

MiniWinis on koodigeneraator. Saate oma aknaid ja juhtelemente määrata lihtsalt loetava JSON -faili loomiseks ning koodigeneraator parsib faili ja loob teile koodi (järgida on palju näiteid). See loob Windowsi või Linuxi täielikud simulaatorrakendused, mida saab lihtsalt ehitada, ja teie simuleeritud LCD -ekraan töötab teie MiniWini akendega. Võite võtta täpselt sama genereeritud koodi ja visata selle manustatud projekti ning lasta sama koodil kuvada samad aknad ja juhtelemendid hetked hiljem teie manustatud riistvaral.

MiniWin ei vaja sisseehitatud seadmel töötamist. See kõik jookseb ühes lõimes. MiniWini saab integreerida sisseehitatud protsessoriga töötava RTOS -iga ja on näiteid MiniWini integreerimisest FreeRTOS -iga.

See juhend näitab, kuidas MiniWin käivitada STM32 M4 protsessoril, kasutades odavat STM32F429 Discovery tahvlit, mis on juba kinnitatud QVGA puuteekraaniga. Need on teie elektroonikakomponentide tarnijalt hõlpsasti saadaval.

MiniWin töötab keskklassi mikrokontrolleritel ja uuematel.

Tarvikud

STM32F429I-DISC1 arendusplaat ja mikro-USB-kaabel

STM32CubeIDE tasuta allalaadimine.

Samm: koodi hankimine

Koodi saamine
Koodi saamine

Kõigepealt peate installima STM32CubeIDE. Selle saate ST veebisaidilt. Peate registreeruma ning selle allalaadimine ja installimine võtab natuke aega. See kõik on tasuta.

Installimise ajal laadige alla MiniWini allikas ja pakkige see lahti. See on suur, kuid kasutate sellest vaid väikest osa. Klõpsake siin rohelist nuppu "Kloonige või laadige alla" …

github.com/miniwinwm/miniwinwm

seejärel valige Download Zip. Pakkige sisu lahti.

2. etapp: näidisprojekti koostamine

Näidisprojekti ehitamine
Näidisprojekti ehitamine
Näidisprojekti ehitamine
Näidisprojekti ehitamine

Kõigepealt loome ühe näidisprojekti. Hea nimi on MiniWinSimple. Käivitage STM32CubeIDE ja tehke järgmist.

  1. Valige Fail | Impordi…
  2. Avage Üldine ja valige Olemasolev projekt tööruumi. Edasi.
  3. Klõpsake Sirvi ja navigeerige kohale, kus MiniWini lahti pakkisite. Seejärel minge kausta STM32CubeIDE / MiniWinSimple / STM32F429. Klõpsake nuppu Vali kaust.
  4. Projektis: märkige MiniWinSimple_STM32F429 ja klõpsake siis nuppu Lõpeta.
  5. Projekt MiniWinSimple_STM32F429 kuvatakse teie Project Exploreris. Valige see ja seejärel ehitage see projektiga | Projekti koostamine.
  6. Nüüd ühendage oma USB -kaabel plaadiga ja arvutiga ning käivitage see käsuga Run | Debug ja kui see on alla laaditud, valige Run | Resume. Saate ekraani kalibreerimisekraani esimest korda, nii et puudutage LCD -ekraanil kolme risti keskpunkti. Nüüd saate ekraanil kuvatava aknaga suhelda.

Akna teisaldamiseks lohistage seda tiitliribal. Akna suuruse muutmiseks kasutage tiitliriba vasakul asuvat valget kolmnurgaikooni. MiniWini akende suurust ei saa ääriseid lohistades muuta, kuna MiniWini ekraanid on liiga väikesed. Akna minimeerimiseks, maksimeerimiseks või sulgemiseks kasutage tiitliriba paremas otsas olevaid ikoone (sulgemine võib olla keelatud). Kui aken on minimeeritud, ei saa te minimeeritud ikoone ringi liigutada. Need kogunevad alt vasakult paremale.

Samm: käivitage koodigeneraator

Koodigeneraatori käivitamine
Koodigeneraatori käivitamine

Nüüd muudame näidisprojekti, luues mõned oma aknad ja visates uue koodi sisse. Selleks käivitame koodigeneraatori.

  1. Avage käsuviip ja minge kausta, kus MiniWin lahti pakkisite, ja seejärel kausta Tools / CodeGen.
  2. Windows CodeGen.exe käivitatav fail on juba saadaval. Linuxi jaoks peate selle ehitama, sisestades make. (Kui olete mures allalaaditud käivitatava faili käivitamise pärast, kuid teil on vaja installida kompilaator ja arenduskeskkond, saate selle ka Windowsi allikast ehitada. Üksikasju leiate dokumentide kausta MiniWini dokumentatsioonist).
  3. Selles kaustas on mõned JSON -failide näited. Kasutame parameetrit example_empty.json. Windowsi või Linuxi jaoks häälestamiseks peate seda kõigepealt muutma. Avage see redaktoris ja ülaosas, kust leiate "TargetType", muutke "Linux" või "Windows" väärtus selliseks, millega koodigeneraatorit töötate.
  4. Nüüd tippige käsureale codegen example_empty.json.
  5. Minge oma projekti juurde STM32CubeIDE -s ja avage kaust MiniWinSimple_Common. Kustutage kõik seal olevad failid.
  6. Jätsime JSON -faili "TargetName" vaikimisi aadressile "MiniWinGen", nii et see on meie loodud koodi kausta nimi. Minge kausta, kust MiniWin lahti pakkisite, ja seejärel kausta MiniWinGen_Common. Nüüd valige kõik need failid ja pukseerige seejärel projekti kaustas MiniWinSimple_Common STM32CubeIDE.
  7. Nüüd ehitage ja käivitage projekt uuesti STM32CubeIDE -s ja ilmub teie uus kujundusaken. Nupp aknas on kadunud, sest example_empty.json ei määratle ühtegi.

Samm: akna lisamine

Akna lisamine
Akna lisamine

Nüüd lisame JSON -i konfiguratsioonifaili teise akna ja taasloome koodi.

1. Avage tekstiredaktoris example_empty.json.

2. Jaotises "Aknad" on hulk Windowsi definitsioone, millel on praegu ainult üks aken. Kopeerige see kõik…

{

"Nimi": "W1", "Pealkiri": "Aken 1", "X": 10, "Y": 15, "Laius": 200, "Kõrgus": 180, "Piir": tõene, "Pealkirjariba": true, "Visible": true, "Minimized": false}

ja kleepige see uuesti komaga, mis eraldab 2 määratlust.

3. Muutke "W1" väärtuseks "W2" ja "Window 1" väärtuseks "Window 2". Muutke "X", "Y", "laius" ja "kõrgus" mõneks erinevaks väärtuseks, pidades silmas, et ekraani eraldusvõime on 240 lai ja 320 kõrge.

4. Salvestage fail ja käivitage koodigeneraator uuesti.

5. Kopeerige failid nagu eelmises etapis, ehitage uuesti ja käivitage uuesti. Nüüd on teie ekraanil 2 akent.

Samm: juhtelemendi lisamine

Juhtelemendi lisamine
Juhtelemendi lisamine

Nüüd lisame teie uuele aknale mõned juhtnupud. Muutke sama faili nagu eelmises etapis.

1. Lisage akna W1 spetsifikatsioonis pärast viimast seadistust koma ("Minimeeritud": vale), seejärel lisage see tekst

"Menüüriba": tõsi, "MenuBarEnabled": true, "MenuItems": ["Fred", "Bert", "Pete", "Alf", "Ian"], "Buttons": [{"Name": "B1", "Label": "Button1", "X": 10, "Y": 10, "Enabled": true, "Visible": true}]

See jaotis lisab 5 üksusega menüüriba ja lubab selle (menüüribad saab globaalselt keelata, proovige seda). Samuti lisab see nupu, mis on lubatud ja nähtav (neid saab muuta nähtamatuks ja seejärel koodis nähtavaks muuta).

2. Regenereerige kood, kopeerige see üle, ehitage uuesti, käivitage kõik nagu varem.

6. samm: kontrollige midagi

Juhtnuppude tegemine
Juhtnuppude tegemine

Nüüd on meil põhiline kasutajaliides, mida vajame, et see midagi teeks. Selle näite puhul avame akna 1 nuppu vajutades värvivalija dialoogi.

Minge oma projekti juurde STM32CubeIDE -s ja avage kaust MiniWinSimple_Common ning seejärel avage fail W1.c (selle faili nimi vastab koodi loomisel JSON -faili akna väljale "Nimi").

Sellest failist leiate funktsiooni window_W1_message_function (). See näeb välja selline:

void window_W1_message_function (const mw_message_t *message) {MW_ASSERT (message! = (void *) 0, "Null -osuti parameeter"); / * Järgmine rida peatab kompilaatori hoiatused, kuna muutuja on praegu kasutamata */ (tühine) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Lisa siia akna initsialiseerimiskood * / break; juhtum MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Lisa siia akna menüü käitlemise kood * / break; juhtum MW_BUTTON_PRESSED_MESSAGE: if (message-> sender_handle == button_B1_handle) { / * Lisage oma juhtelemendi kood siin * /} paus; vaikimisi: / * Hoidke MISRA õnnelikuna * / break; }}

Seda kutsub aknahaldur selle akna jaoks alati, kui aknahaldur peab aknale teatama, et midagi on juhtunud. Sel juhul oleme huvitatud teadmisest, et akna ainus nupp on vajutatud. Sõnumitüüpide lülituslauses näete kirja MW_BUTTON_PRESSED_MESSAGE juhtumit. See kood käivitub, kui nuppu vajutatakse. Selles aknas on ainult üks nupp, kuid neid võiks olla rohkem, seega kontrollitakse, milline nupp see on. Sel juhul võib see olla ainult nupp B1 (nimi vastab uuesti nupu nimele JSON -failis).

Nii et pärast selle juhtumi silti lisage värvivalija dialoogi avamiseks kood, mis on järgmine:

mw_create_window_dialog_colour_chooser (10, 10, "Värv", MW_HAL_LCD_RED, vale, sõnum-> saaja_käepide);

Parameetrid on järgmised:

  • 10, 10 on asukoht dialoogi ekraanil
  • "Värv" on dialoogi pealkiri
  • MW_HAL_LCD_RED on vaikevärv, millega dialoog algab
  • vale tähendab, et ei näita suurt suurust (proovige see tõeseks muuta ja vaadake erinevust)
  • sõnum-> adressaadi käepide on see, kellele see dialoog kuulub, antud juhul on see aken. Funktsiooni sõnumi parameetris on akna käepide. See on aken, kuhu dialoogivastus saadetakse.

Aknahalduri valitud värvi väärtuse väljaselgitamiseks saadab kasutaja meie aknale valitud värviga sõnumi, kui kasutaja vajutab dialoogiboksis nuppu OK. Seetõttu peame ka selle sõnumi vahele võtma koos lüliti avalduse teise juhtumiga, mis näeb välja selline:

juhtum MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE:

{mw_hal_lcd_colour_t valitud_värv = sõnum-> sõnumi_andmed; (tühine) valitud_värv; } murda;

Me ei tee valitud värviga veel midagi, nii et lihtsalt tühistame selle, et vältida kompilaatori hoiatust. Selle funktsiooni lõplik kood näeb nüüd välja selline:

tühine akna_W1_sõnumi_funktsioon (const mw_message_t *sõnum)

{MW_ASSERT (sõnum! = (Void*) 0, "Null -osuti parameeter"); / * Järgmine rida peatab kompilaatori hoiatused, kuna muutuja on praegu kasutamata */ (tühine) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Lisage siia akna initsialiseerimiskood * / break; juhtum MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Lisa siia akna menüü käitlemise kood * / break; juhtum MW_BUTTON_PRESSED_MESSAGE: if (message-> sender_handle == button_B1_handle) { / * Lisage selle juhtelemendi käitlejakood siia * / mw_create_window_dialog_colour_chooser (10, 10, "Color", MW_HAL_LCD_RED, false, message-> } murda; juhtum MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE: {mw_hal_lcd_colour_t selected_colour = message-> message_data; (tühine) valitud_värv; } murda; vaikimisi: / * Hoidke MISRA õnnelikuna * / break; }}

Koodi käitamine on näidatud ülaltoodud pildil. Võite märgata, et kui dialoogi näidatakse, peate sellele reageerima ja selle enne mis tahes muu toimingu tegemist vallandama. Seda nimetatakse modaalseks käitumiseks. Dialoogid MiniWinis ja kõik alati globaalselt modaalsed ning korraga saate kuvada ainult ühe. Siin on rohkem selgitusi…

en.wikipedia.org/wiki/Modal_window

7. samm: aknas joonistamine

Joonistamine aknas
Joonistamine aknas

Siiani oleme kasutanud ainult juhtelemente ja need joonistavad ennast. On aeg teha meie aknale mõni kohandatud joonis. Osa, millele saate joonistada, on piiride sees (kui need on olemas, on need valikulised), kerimisribade sees (kui need on määratletud, ka valikulised) ja tiitliriba all (kui see on olemas, on see ka valikuline). Seda nimetatakse akna terminoloogias kliendipiirkonnaks.

MiniWinis on graafikakäskude kogu, mida saate kasutada. Kõik nad on aknast teadlikud. See tähendab, et te ei pea muretsema, kas aken on ekraanil nähtav, osaliselt teiste akendega varjatud, ekraanil sisse lülitatud, osaliselt välja lülitatud või täielikult välja lülitatud või kui joonistuskoha koordinaat asub kliendipiirkonnas või väljaspool seda. See kõik on teie eest hoolitsetud. Te ei saa joonistada väljaspool oma kliendipiirkonda.

Windowsi terminoloogias kliendipiirkondadele joonistamist nimetatakse maalimiseks ja igal aknal on värvimisfunktsioon, kus te joonistate. Te ei helista oma värvimisfunktsioonile, aknahaldur teeb seda teie eest vajadusel. Seda on vaja, kui akent teisaldatakse või mõni muu aken peal on muutnud oma asukohta või nähtavust. Kui teil on vaja akent üle värvida, kuna mõned andmed, millest akna sisu sõltub, on muutunud (st teate, et vajalik on värvimine, mitte aknahaldur ei tea), siis ütlete aknahaldurile, et on vaja uuesti värvida ja see helistab teie värvifunktsioon. Sa ei nimeta seda ise. (Seda kõike näidatakse järgmises osas).

Esiteks peate leidma oma värvimisfunktsiooni. Koodigeneraator loob selle teie jaoks ja see asub eelmises jaotises muudetud sõnumitöötlusfunktsiooni kohal. Minge oma projekti juurde ja avage uuesti fail W1.c.

Sellest failist leiate funktsiooni window_W1_paint_function (). See näeb välja selline:

tühine akna_W1_maali_funktsioon (mw_handle_t window_handle, const mw_gl_draw_info_t *draw_info)

{MW_ASSERT (draw_info! = (Void*) 0, "Null -osuti parameeter"); / * Täida akna kliendipiirkond valge valgega */ 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). laius, mw_get_window_client_rect (akna käepide). kõrgus); / * Lisage siia akende värvimise kood */}

See on tühi loodud kood ja kõik, mida see teeb, on kliendipiirkonna täitmine valge värviga. Joonistame kliendipiirkonnale kollase täidisega ringi. Kõigepealt peame mõistma graafilise konteksti mõistet (teine Windowsi asi). Seame joonistusparameetrid graafilisse konteksti ja kutsume seejärel üldise ringi joonistamise rutiini. Selles näites peame määrama, kas ringil on ääris, piirjoone stiil, äärise värv, kas ring on täidetud, täitmisvärv ja täitemuster. Näete ülaltoodud koodi, mis teeb midagi sarnast kliendipiirkonna täitmiseks ääristeta tahke valge ristkülikuga. Graafika kontekstis olevaid väärtusi ei mäleta värvifunktsiooni iga kõne vahel, nii et peate väärtused iga kord seadistama (neid mäletatakse siiski värvifunktsiooniga).

Ülaltoodud koodist näete, et täitmine on sisse lülitatud ja täitemuster on välja lülitatud, nii et me ei pea neid uuesti seadistama. Peame määrama piiri sisse, piirjoone stiili kindlaks, äärise esiplaani värvi mustaks ja täitma värvi kollaseks järgmiselt:

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);

Lisage see kood selle funktsiooni kommentaari, kus öeldakse teie koodi lisamine. Järgmisena peame joonistama ringi, mis on tehtud järgmiselt:

mw_gl_circle (joonistusinfo, 30, 30, 15);

See tõmbab ringi koordinaatidega 30, 30 raadiusega 15. Ehitage kood uuesti ja käivitage see uuesti ning näete aknas ringi, nagu ülal näidatud. Märkate, et ring ja nupp kattuvad, kuid nupp on üleval. See on disaini järgi. Juhtnupud on alati kõige peal, mida kliendipiirkonda joonistate.

8. samm: akna andmed

Akna andmed
Akna andmed

Siiani oleme rakendanud oma koodi Window 1 sõnumifunktsioonis (sissetulevate sõnumite haldamiseks) ja selle värvimisfunktsioonis (joonistamiseks akna kliendialale). Nüüd on aeg need kaks siduda. Täidab värvimisfunktsioonis joonistatud ringi värviga, mille kasutaja valib värvivalija poolt nupu vajutamisel. Pidage meeles, et me ei kutsu värvi funktsiooni, seda teeb aknahaldur, seega ei saa meie sõnumifunktsioon (mis teab valitud värvi) otse värvifunktsiooni ise kutsuda. Selle asemel peame andmed salvestama vahemällu ja andma aknahaldurile teada, et värvimine on vajalik. Seejärel helistab aknahaldur värvifunktsioonile, mis saab kasutada vahemällu salvestatud andmeid.

W1.c ülaosas näete tühja andmestruktuuri ja seda tüüpi objekti, mille koodigeneraator on deklareerinud järgmiselt:

typedef structure

{ / * Lisage oma andmeliikmed siia * / char dummy; /* Mõned koostajad kurdavad tühjade konstruktsioonide pärast; eemaldage see oma liikmete lisamisel */} window_W1_data_t; staatiline aken_W1_andmed_t aken_W1_andmed;

See on koht, kus me salvestame oma andmed vahemällu, nii et need säiliksid kõnede ajal ja neid tuntakse aknaandmetena. Peame siia salvestama ainult valitud värvi, näiteks:

typedef structure

{ / * Lisage oma andmeliikmed siia * / mw_hal_lcd_colour_t selected_colour; } aken_W1_andmed_t; staatiline aken_W1_andmed_t aken_W1_andmed = {MW_HAL_LCD_YELLOW};

Anname sellele kollase algvärvi. Nüüd muudame sõnumifunktsioonis koodi veidi, et valitud värv siia salvestada nii:

juhtum MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE:

{window_W1_data.chosen_colour = message-> message_data; } murda;

Seejärel muudame värvi funktsiooni, et kasutada seda väärtust, kui see joonistab ringi niimoodi:

mw_gl_set_solid_fill_colour (akna_W1_andmed.valitud_värv);

Nüüd oleme muutnud andmeid, millest akna sisu sõltub, seega peame aknahaldurile teada andma, et aken vajab ülevärvimist. Teeme seda sõnumifunktsioonis, kui dialoogi OK teade on vastu võetud, järgmiselt:

mw_maali_akna_klient (sõnum-> saaja_käepide);

See ei põhjusta akna otse värvimist. See on utiliidifunktsioon, mis saadab aknahaldurile teate, et aken tuleb üle värvida (kui sinna astute, näete, kuidas see juhtub). Aken, mis tuleb sel juhul uuesti värvida, on ise ja akna käepide asub sõnumihalduri funktsiooni sõnumi parameetris.

Kogu fail näeb nüüd välja selline, kui te pole kindel, kuhu mõned ülaltoodud koodilõigud lähevad:

#kaasake

#include "miniwin.h" #include "miniwin_user.h" #include "W1.h" typedef structure { / * Lisage oma andmeliikmed siia * / mw_hal_lcd_colour_t valitud_värv; } aken_W1_andmed_t; staatiline aken_W1_andmed_t aken_W1_andmed = {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, "Null -osuti parameeter"); / * Täida akna kliendipiirkond valge valgega */ 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). laius, mw_get_window_client_rect (akna käepide). kõrgus); / * Lisage siia akende värvimise kood */ mw_gl_set_fg_colour (MW_HAL_LCD_BLACK); mw_gl_set_solid_fill_colour (akna_W1_andmed.valitud_värv); mw_gl_set_line (MW_GL_SOLID_LINE); mw_gl_set_border (MW_GL_BORDER_ON); mw_gl_circle (joonistusinfo, 30, 30, 15); } void window_W1_message_function (const mw_message_t *message) {MW_ASSERT (message! = (void *) 0, "Nullpointeri parameeter"); / * Järgmine rida peatab kompilaatori hoiatused, kuna muutuja on praegu kasutamata */ (tühine) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Lisage siia akna initsialiseerimiskood * / break; juhtum MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Lisa siia akna menüü käitlemise kood * / break; juhtum MW_BUTTON_PRESSED_MESSAGE: if (message-> sender_handle == button_B1_handle) { / * Lisage selle juhtelemendi käitlejakood siia * / mw_create_window_dialog_colour_chooser (10, 10, "Color", MW_HAL_LCD_RED, false, message-> } murda; juhtum MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE: {window_W1_data.chosen_colour = message-> message_data; mw_maali_akna_klient (sõnum-> saaja_käepide); } murda; vaikimisi: / * Hoidke MISRA õnnelikuna * / break; }}

Ehitage ja käivitage uuesti ning peaksite saama määrata ringi täitevärvi.

See aknaandmete näide kasutab andmeid, mis on salvestatud lähtefaili ülaosas olevasse staatilisse andmestruktuuri. See on hea, kui teil on ainult üks akna eksemplar, nagu meil selles näites, kuid kui teil on rohkem kui üks eksemplar, siis on neil kõigil sama andmestruktuur. Võimalik on olla andmeid ühe eksemplari kohta, nii et mitmel sama tüüpi aknal on oma andmed. Seda selgitatakse dokumentide kataloogist leitud MiniWini dokumentatsioonis. Failinäide kasutab seda sama aknatüübi mitme pildi kuvamiseks (nagu on näha selle juhendi ülaosas oleval põhipildil).

9. samm: mõningane lõplik fondi lõbu

Lõppfondi lõbu
Lõppfondi lõbu

MiniWin toetab TrueType fondi renderdamist. Kui on üks asi, mis muudab teie kasutajaliidese hea välja, on see atraktiivsed fondid. See viimane samm näitab, kuidas TrueType'i fonti MiniWini aknas renderdada.

TrueType'i fontide renderdamiseks on kaks võimalust. Üks on joonistada need otse oma kliendipiirkonda, nagu seda tehti ringi jaoks varem, teine on lisada aknasse tekstikasti juhtelement. Me teeme viimast, sest see on lihtsam.

Nüüd lisame tekstikasti juhtelemendi oma JSON -i konfiguratsioonifaili. Lisage see Window 2 definitsiooni, et see näeks välja selline:

nagu nii:

{

"Nimi": "W2", "Pealkiri": "Aken 2", "X": 50, "Y": 65, "Laius": 100, "Kõrgus": 80, "Piir": tõene, "Pealkirjariba": true, "Visible": true, "Minimized": false, "TextBoxes": [{"Name": "TB1", "X": 0, "Y": 0, "Width": 115, "Height": 50, "Põhjendus": "Center", "BackgroundColour": "MW_HAL_LCD_YELLOW", "ForegroundColour": "MW_HAL_LCD_BLACK", "Font": "mf_rlefont_BLKCHCRY16", "Enabled": true, "Visible": true}]}

Kiire sõna TrueType'i fontide kohta MiniWinis. Fondid tulevad.ttf -failidena. Suuremate arvutite aknahaldurites kuvatakse need teie ekraanile, kui neid vajatakse. See võtab palju töötlemisvõimsust ja mälu ning ei sobi väikeste seadmete jaoks. MiniWinis on need eeltöödeldud bitikaartideks ja lingitud kompileerimise ajal fikseeritud fondisuuruse ja -stiiliga (paksus kirjas, kaldkirjas jne), s.t peate otsustama, milliseid fonte mis suuruses ja stiilis kavatsete kompileerimise ajal kasutada. Seda on teie jaoks tehtud kahe näidisfondi jaoks allalaaditud MiniWini ZIP -failis. Kui soovite kasutada muid suurusi ja stiile muid fonte, vaadake dokumentide kaustas olevat MiniWini dokumentatsiooni. MiniWinis Windowsis ja Linuxis on tööriistu.ttf-failide eeltöötlemiseks lähtekoodifailideks, mille saate oma projekti lisada.

Ja teine kiire sõna - enamik fonte on autoriõigusega kaitstud, sealhulgas need, mida leiate Microsoft Windowsist. Kasutage neid isiklikuks otstarbeks, kuid kõik, mida avaldate, peate tagama, et litsents, millega fondid avaldatakse, võimaldab seda, nagu MiniWinis sisalduvate kahe fondi puhul, kuid mitte Microsofti fondide puhul!

Tagasi koodi juurde! Looge, loobuge failidest, ehitage ja käivitage nagu varem ja näete, et aknas 2 on nüüd vaiketekst kollasel taustal imeliku fondiga. Võimaldab teksti muuta, muutes Window 2 lähtefaili W2.c.

Peame suhtlema äsja loodud tekstikastiga ja see, kuidas te seda teete, nagu iga MiniWini suhtlus, on sõnumi saatmine. Tahame akna loomisel, kuid enne selle kuvamist juhtelementi teksti määrata, seega lisame sõnumitöötlusse koodi MW_WINDOW_CREATED_MESSAGE. Selle võtab akna kood vastu vahetult enne akna kuvamist ja see on ette nähtud sellisteks lähtestusteks. Koodigeneraator lõi sõnumihalduri funktsioonis kohahoidja, mis näeb välja selline:

juhtum MW_WINDOW_CREATED_MESSAGE:

/ * Lisa siia akna initsialiseerimiskood */ break;

Siin postitame sõnumi tekstikasti juhtelementi, mis ütleb talle, millist teksti me tahame näidata, kasutades funktsiooni mw_post_message järgmiselt:

juhtum MW_WINDOW_CREATED_MESSAGE:

/ * Lisage siia akna lähtestamiskood */ mw_post_sõnum (MW_TEXT_BOX_SET_TEXT_MESSAGE, message-> recipient_handle, text_box_TB1_handle, 0UL, "Oli pime ja tormine öö …", MW_CONTROL_MESSAGE); murda;

Need on järgmised parameetrid:

  • MW_TEXT_BOX_SET_TEXT_MESSAGE - see on sõnumi tüüp, mille me juhtelemendile saadame. Need on loetletud saidis miniwin.h ja dokumenteeritud.
  • message-> recipient_handle - see on see, kellelt sõnum pärineb - see aken - mille käepide asub sõnumihalduri funktsioonile edastatud sõnumi parameetris.
  • text_box_TB1_handle - kellele me sõnumi saadame - tekstikasti juhtelemendi käepide. Need on loetletud loodud failis miniwin_user.h.
  • 0UL - Andmete väärtus, antud juhul mitte midagi.
  • "Oli pime ja tormine öö …" - Osuti väärtus - uus tekst.
  • MW_CONTROL_MESSAGE - saaja tüüp, mis on juhtelement.

See on kõik. Ehitage uuesti ja käivitage nagu tavaliselt ning saate tekstikasti, nagu ülaltoodud pildil.

Sõnumite postitamine on MiniWini (nagu kõigi aknahaldurite) jaoks põhiline. Täiendavate näidete saamiseks vaadake zip -faili näidisprojekte ja põhjaliku selgituse saamiseks lugege dokumentatsiooni jaotist MiniWini sõnumite kohta.

10. samm: minge kaugemale

Image
Image

See on see MiniWini põhitutvustuseks. MiniWin suudab palju rohkem, kui siin näidatud. Näiteks selles juhendis kasutatav tahvli ekraan on väike ja juhtnupud on väikesed ning neid tuleb kasutada koos abiga. Kuid muud näited ja riistvara kasutavad suurematel kuvaritel suuremaid juhtelemente (neid on 2 suurust) ja neid saab sõrmega juhtida.

On palju muid juhtimisviise kui siin näidatud. Lisateabe saamiseks vaadake koodigeneraatori kausta erinevaid JSON -failide näiteid. Need näited hõlmavad kõiki juhtimistüüpe.

Windowsil on palju võimalusi. Äärised, tiitliriba ja ikoonid on kõik konfigureeritavad. Teil võivad olla kerimisribad ja keritavad akna kliendialad, mitu sama tüüpi akent ja aknad võivad olla alasti (ainult kliendipiirkond, ilma ääriste või tiitliribata), mis tähendab, et need on kompileerimise ajal kuval paigas fikseeritud (vaadake selle jaotise pilti suurte ikoonidega - need on tegelikult 6 alasti akent).

MiniWin ei kasuta dünaamilist mälu. See muudab selle sobivaks väikeste piiratud seadmete jaoks ja on nõue mõne manustatud projekti jaoks. MiniWin ja selle loodud kood on samuti täielikult nõutud tasemele vastav MISRA 2012.

Lisateabe saamiseks vaadake dokumentide kaustast dokumente ja ka teisi zip -faili näidisrakendusi. Siin on näiteid, mis näitavad, kuidas kasutada kõiki MiniWini funktsioone ja kuidas integreerida MiniWin FatFS -i ja FreeRTOS -iga.

Soovitan: