Мазмұны:

Енгізілген терезе менеджері: 10 қадам
Енгізілген терезе менеджері: 10 қадам

Бейне: Енгізілген терезе менеджері: 10 қадам

Бейне: Енгізілген терезе менеджері: 10 қадам
Бейне: Где скачать Microsoft PC Manager? Как запустить? 2024, Қараша
Anonim
Енгізілген терезе менеджері
Енгізілген терезе менеджері
Енгізілген терезе менеджері
Енгізілген терезе менеджері
Енгізілген терезе менеджері
Енгізілген терезе менеджері
Енгізілген терезе менеджері
Енгізілген терезе менеджері

Бұл жоба СКД панелі мен сенсорлы экраны бар ендірілген микроконтроллерде жылжымалы терезелері бар терезе менеджерін қалай енгізу керектігін көрсетеді. Бұл үшін коммерциялық қол жетімді бағдарламалық пакеттер бар, бірақ олар қымбат тұрады және жабық көзі болып табылады. MiniWin деп аталатын бұл ақысыз және ашық көзі. Ол толығымен C99 тілінде жазылған және оны C немесе C ++ қосымшаларында қолдануға болады. MiniWin -дің мақсаты - пайдалану оңай, өзгертуге оңай, кеңейтуге болатын, аппараттық құралдардың кең ауқымына тасымалданатын және ресурстарға аш емес.

Терезелерді басқаруға код берумен қатар MiniWin -де пайдаланушы интерфейсінің басқару элементтері бар - түймелер, жүгірткілер, прогресс жолақтары, ағаштар және т. Терезелерді жылжытуға, өлшемін өзгертуге, үлкейтуге, кішірейтуге, жабуға болады - үлкен терезе менеджерлеріндегі терезелермен жасайтын барлық әдеттегі әрекеттер. Мәтінді тартымды көрсету үшін керні мен бүркеншікке қарсы TrueType қаріптері (мәтінді smooooooth етеді) қолдайды.

Әр терезеде сізде клиенттік аймақ бар (сіздің кеңістік шекараның ішінде және жоғарғы жолақтың астында). Бұған сіз диалог құру үшін басқару элементтерін қоса аласыз немесе қалаған нәрсені салу үшін кіріктірілген графикалық кітапхананы пайдалана аласыз. Графикалық кітапхананың барлық функциялары терезені біледі. Сіздің терезеңіз қайда, не қабаттасады немесе ол кішірейтілгені туралы алаңдамайсыз.

Өзіңіздің жеке терезелеріңізді жасаудан басқа, бірнеше стандартты диалогтар бар, олар өте қарапайым - мысалы, растау диалогтары (тек OK немесе Иә/Жо түймелері), уақытты/күнді орнатушылар, файл таңдаушылар, түс таңдаушылар және т.

MiniWin стандартты терезе менеджерінің хабарламалар кезегінің жүйесін қолданады. Windows хабарламалар арқылы бір -бірімен және терезе менеджерімен өзара әрекеттесе алады. Сіз функцияларды тікелей істеуге шақырмайсыз, сіз кезекке хабарлама қосасыз және терезе менеджері сіз үшін оны қабылдайды.

MiniWin ST, NXP және Renesas микроконтроллерлерінің сенсорлы дисплейлері бар стандартты даму тақталарына шығарылды. Барлық осы құрылғыларға арналған драйверлер мен мысалдар жобалары бар. Сонымен қатар, MiniWin Windows немесе Linux үшін орнатылуы мүмкін, осылайша сіз кіріктірілген жабдықты алмас бұрын пайдаланушы интерфейсінің кодын модельдей аласыз.

MiniWin код генераторы бар. Сіз өзіңіздің терезелеріңіз бен басқару элементтеріңізді қарапайым оқуға болатын JSON файлын көрсете аласыз, ал код генераторы файлды талдайды және сізге код жасайды (көптеген мысалдар бар). Ол Windows немесе Linux -тің толық имитациялық қосымшаларын жасайды, оларды құрастыруға болады және MiniWin терезелері жұмыс жасайтын СКД дисплейі бар. Сіз дәл сол кодты алып, оны ендірілген жобаға тастай аласыз және ендірілген аппараттық құралдың сол терезелері мен басқару элементтерін көрсететін бірдей кодқа ие бола аласыз.

MiniWin ендірілген құрылғыда операциялық қолдауды қажет етпейді. Барлығы бір тізбекте өтеді. MiniWin ендірілген процессорда жұмыс істейтін RTOS -пен біріктірілуі мүмкін және MiniWin -ді FreeRTOS -пен біріктіретін мысалдар бар.

Бұл нұсқаулықта QVGA сенсорлы дисплейі бар STM32F429 Discovery арзан тақтасының көмегімен MiniWin -ді STM32 M4 процессорында қалай іске қосуға болатындығы көрсетілген. Оларды электроника компоненттерін жеткізушіден оңай алуға болады.

MiniWin орта деңгейлі микроконтроллерлерде жұмыс істейді.

Жабдықтар

STM32F429I-DISC1 әзірлеу тақтасы мен микро USB кабелі

STM32CubeIDE жүктеу ақысыз.

1 -қадам: кодты алу

Кодты алу
Кодты алу

Ең алдымен, сізге STM32CubeIDE орнату қажет. Сіз мұны ST веб -сайтынан аласыз. Сіз тіркелуіңіз керек, оны жүктеу және орнату үшін біраз уақыт қажет. Мұның бәрі тегін.

Орнату кезінде MiniWin көзін жүктеп алып, оны ашыңыз. Бұл үлкен, бірақ сіз оның кішкене бөлігін ғана қолданасыз. Жасыл 'Clone or Download' түймесін мына жерден басыңыз …

github.com/miniwinwm/miniwinwm

содан кейін Zip жүктеуді таңдаңыз. Мазмұнын ашыңыз.

2 -қадам: Мысал жобасын құру

Мысал жобасын құру
Мысал жобасын құру
Мысал жобасын құру
Мысал жобасын құру

Алдымен мысал жобалардың бірін құруға рұқсат етіңіз. Жақсы MiniWinSimple деп аталады. STM32CubeIDE іске қосыңыз, содан кейін келесі әрекеттерді орындаңыз:

  1. Файлды таңдау | Импорттау…
  2. Жалпы бөлімін ашып, Жұмыс кеңістігінде бар жобаны таңдаңыз. Келесі.
  3. Шолу түймесін басып, MiniWin ашылған жерге өтіңіз. Содан кейін STM32CubeIDE / MiniWinSimple / STM32F429 қалтасына өтіңіз. Қалтаны таңдау түймешігін басыңыз.
  4. Жобада: MiniWinSimple_STM32F429 белгісін қойыңыз, содан кейін Аяқтау түймешігін басыңыз.
  5. MiniWinSimple_STM32F429 жобасы Project Explorer -де пайда болады. Оны таңдаңыз, содан кейін оны Project | Build Project көмегімен құрыңыз.
  6. Енді USB кабелін тақтаға және компьютерге қосыңыз және Run | Debug көмегімен іске қосыңыз және жүктелген кезде Іске қосу | Жалғастыруды таңдаңыз. Сіз бірінші рет экранды калибрлеуді аласыз, сондықтан СКД дисплейіндегі 3 кресттің ортасын түртіңіз. Енді сіз дисплейдегі тереземен жұмыс жасай аласыз.

Терезені жылжыту үшін оны тақырып жолағына сүйреңіз. Терезенің өлшемін өзгерту үшін тақырып жолағының сол жағындағы ақ үшбұрыш белгішесін пайдаланыңыз. MiniWin терезелерінің өлшемін өзгерту мүмкін емес, өйткені шекараларды апару арқылы MiniWin дисплейлері тым кішкентай. Терезені кішірейту, үлкейту немесе жабу үшін тақырып жолағының оң жағындағы белгішелерді пайдаланыңыз (жабу өшірілген болуы мүмкін). Терезе кішірейтілген кезде, сіз кішірейтілген белгішелерді жылжыта алмайсыз. Олар төменгі солдан оңға қарай жиналады.

3 -қадам: код генераторын іске қосыңыз

Код генераторын іске қосу
Код генераторын іске қосу

Енді біз мысал жобаны өзіміздің жеке терезелерімізді құру және жаңа кодты тастау арқылы өзгертеміз. Ол үшін біз код генераторын іске қосамыз.

  1. Пәрмен жолын ашып, MiniWin ашылған қалтаға, содан кейін Tools / CodeGen қалтасына өтіңіз.
  2. Windows CodeGen.exe үшін орындалатын файл қазірдің өзінде қол жетімді. Linux үшін оны make теру арқылы құру керек. (Егер сіз жүктелген орындалатын файлды іске қосуға алаңдайтын болсаңыз, бірақ оны құрастырушы мен әзірлеу ортасы қажет болса, оны Windows үшін көзден құруға болады. Толық ақпарат алу үшін құжаттар қалтасындағы MiniWin құжаттамасын қараңыз).
  3. Бұл қалтада JSON файлдарының бірнеше мысалы бар. Біз example_empty.json қолданамыз. Оны Windows немесе Linux үшін орнату үшін алдымен оны өңдеу керек. Оны редакторда және жоғарғы жағында «TargetType» табыңыз, онда «Linux» немесе «Windows» мәнін код генераторы жұмыс істеп тұрғанға өзгертіңіз.
  4. Енді пәрмен жолына codegen example_empty.json теріңіз.
  5. STM32CubeIDE ішіндегі жобаңызға өтіп, MiniWinSimple_Common қалтасын ашыңыз. Ондағы барлық файлдарды жойыңыз.
  6. Біз «TargetName» -ді JSON файлында әдепкі ретінде «MiniWinGen» күйінде қалдырдық, сондықтан бұл біздің құрылған код қалтасының атауы. MiniWin, содан кейін MiniWinGen_Common қалтасы ашылған қалтаға өтіңіз. Енді осы файлдардың барлығын таңдап, жобаның MiniWinSimple_Common қалтасындағы STM32CubeIDE ішіне апарып тастаңыз.
  7. Енді STM32CubeIDE -де жобаны қайта құрыңыз және қайта іске қосыңыз, сонда сіздің жаңа дизайн терезесі пайда болады. Example_empty.json ешнәрсені анықтамағандықтан, терезедегі түйме жойылды.

4 -қадам: Терезені қосу

Терезе қосу
Терезе қосу

Енді біз JSON конфигурация файлына екінші терезені қосамыз және кодты жаңартамыз.

1. example_empty.json мәтіндік редакторда ашыңыз.

2. «Windows» бөлімінде қазіргі уақытта бір ғана терезесі бар терезе анықтамаларының жиыны бар. Мұның бәрін көшіру…

{

«Аты»: «W1», «Тақырып»: «1 -терезе», «Х»: 10, «Y»: 15, «Ені»: 200, «Биіктік»: 180, «Шекара»: шын, «TitleBar»: шын, «Көрінетін»: шын, «Шағын»: жалған}

және 2 анықтаманы ажырататын үтірмен қайтадан қойыңыз.

3. «W1» -ді «W2» -ге, «1 -терезені» «2 -терезеге» өзгертіңіз. «X», «Y», «Width» және «Height» параметрлерін экранның ажыратымдылығы 240 ені 320 биіктікті ескере отырып, әртүрлі мәндерге өзгертіңіз.

4. Файлды сақтап, код генераторын қайта іске қосыңыз.

5. Файлдарды алдыңғы қадамдағыдай көшіріңіз, қайта құрыңыз және қайта қосыңыз. Енді сіздің дисплейде 2 терезе болады.

5 -қадам: Басқару элементін қосу

Басқару элементін қосу
Басқару элементін қосу

Енді біз сіздің жаңа терезеге бірнеше басқару элементтерін қосамыз. Алдыңғы қадамдағыдай файлды өңдеңіз.

1. W1 терезесінің спецификациясына соңғы параметрден кейін үтір қосыңыз («Шағын»: жалған), содан кейін осы мәтінді қосыңыз

«MenuBar»: дұрыс, «MenuBarEnabled»: шын, «MenuItems»: [«Fred», «Bert», «Pete», «Alf», «Ian»], «Түймелер»: [{«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 *хабар) {MW_ASSERT (хабар! = (жарамсыз *) 0, «Нөл көрсеткішінің параметрі»); / * Келесі жолда компилятордың ескертулері тоқтатылады, себебі айнымалы қазіргі уақытта қолданылмайды */ (void) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Терезенің инициализация кодын осында қосыңыз * / break; case MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Терезе мәзірінің өңдеу кодын осында қосыңыз * / break; жағдай MW_BUTTON_PRESSED_MESSAGE: if (message-> sender_handle == button_B1_handle) { / * Осы басқару элементінің өңдегіш кодын осында қосыңыз * /} үзіліс; әдепкі: / * MISRA -ны бақытты ұстау * / break; }}

Мұны терезе менеджері терезеге бірдеңе болғанын хабарлауы қажет болған кезде шақырады. Бұл жағдайда біз терезенің жалғыз батырмасы басылғанын білуге мүдделіміз. Хабарлама түрлерінің коммутаторынан MW_BUTTON_PRESSED_MESSAGE регистрін көресіз. Бұл код түйме басылған кезде жұмыс істейді. Бұл терезеде бір ғана түйме бар, бірақ одан да көп болуы мүмкін, сондықтан оның қай батырмада екендігі тексеріледі. Бұл жағдайда бұл тек B1 батырмасы болуы мүмкін (аты JSON файлындағы түйменің атауына қайтадан сәйкес келеді).

Осы жағдай белгісінен кейін түс таңдаушы диалогын ашу үшін кодты қосыңыз, бұл:

mw_create_window_dialog_colour_chooser (10, 10, «Түс», MW_HAL_LCD_RED, жалған, хабарлама-> алушының_қолы);

Параметрлер келесідей:

  • 10, 10 - диалог экранындағы орын
  • «Түс» - диалогтың тақырыбы
  • MW_HAL_LCD_RED - диалог басталатын әдепкі түс
  • жалған дегеніміз үлкен өлшемді көрсетпейді (оны шын етіп орнатып көріңіз және айырмашылықты көріңіз)
  • message-> алушының тұтқасы-бұл диалогтың иесі, бұл жағдайда бұл терезе. Терезенің тұтқасы функцияның хабарлама параметрінде. Бұл терезеде диалог жауабы жіберіледі.

Пайдаланушы терезе менеджері таңдаған түстің мәнін білу үшін диалогтағы OK түймесін басқанда, біздің терезеге таңдалған түсі бар хабарлама жібереді. Сондықтан біз бұл хабарды коммутатор мәлімдемесіндегі келесі жағдайда ұстауымыз керек:

MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE жағдайы:

{mw_hal_lcd_colour_t selected_colour = хабар-> хабар_мәліметтері; (жарамсыз) selected_colour; } үзіліс;

Біз таңдалған түспен ештеңе жасамаймыз, сондықтан компилятордың ескертуіне жол бермеу үшін оны босқа шығарамыз. Бұл функцияның соңғы коды енді келесідей:

void window_W1_message_function (const mw_message_t *хабарламасы)

{MW_ASSERT (хабарлама! = (Жарамсыз*) 0, «Нөл көрсеткішінің параметрі»); / * Келесі жолда компилятордың ескертулері тоқтатылады, себебі айнымалысы қазір қолданылмайды */ (void) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Терезенің инициализация кодын осында қосыңыз * / break; case MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Терезе мәзірінің өңдеу кодын осында қосыңыз * / break; case MW_BUTTON_PRESSED_MESSAGE: if (message-> sender_handle == button_B1_handle) { / * Осы басқару элементінің өңдеуші кодын осында қосыңыз * / mw_create_window_dialog_colour_chooser (10, 10, «Түс», MW_HAL_LCD_RED,) } үзіліс; жағдай MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE: {mw_hal_lcd_colour_t selected_colour = message-> message_data; (жарамсыз) selected_colour; } үзіліс; әдепкі: / * MISRA -ны бақытты ұстау * / break; }}

Кодты іске қосу жоғарыдағы суретте көрсетілген. Сіз диалогты көрсеткенде, сіз оған жауап беруіңіз және басқа ештеңе жасамас бұрын оны өшіруіңіз керек екенін байқауыңыз мүмкін. Бұл модальды мінез -құлық деп аталады. MiniWin -дегі диалогтар және әрқашан жаһандық модальды, сізде тек бір ғана көрсетілім болуы мүмкін. Мұнда қосымша түсініктеме бар …

kk.wikipedia.org/wiki/Modal_window

7 -қадам: Терезеде сурет салу

Терезеде сурет салу
Терезеде сурет салу

Әзірге біз тек басқару элементтерін қолдандық, олар өздерін сызады. Біздің терезеге арнайы сурет салу уақыты келді. Сіз тартуға болатын бөлік жиектердің ішінде (егер бар болса, олар міндетті емес), айналдыру жолақтарының ішінде (егер анықталса, қосымша) және тақырып жолағының астында (егер бар болса, бұл міндетті емес). Терезе терминологиясында ол клиенттік аймақ деп аталады.

MiniWin -те қолдануға болатын графикалық командалар кітапханасы бар. Олардың барлығы терезеден хабардар. Бұл терезе көрініп тұр ма, басқа терезелермен көмескіленді ме, экранның қосулы ма, жартылай өшірулі ме, жоқ па, немесе сіз сурет салатын жердің координаты клиенттік аймақта немесе одан тыс жерде ме деп алаңдамайсыз.. Мұның бәрі сізге қамқорлық. Сіз клиенттік аймақтың сыртында сурет сала алмайсыз.

Терминологиядағы клиенттік аймақтарға сурет салу кескіндеме деп аталады және әр терезеде сурет салатын бояу функциясы бар. Сіз бояу функциясына қоңырау шалмайсыз, терезе менеджері мұны сізге қажет кезде жасайды. Бұл терезе жылжытылғанда немесе басқа терезенің орналасуы немесе көрінуі өзгерген кезде қажет. Егер сізге терезені қайта бояу қажет болса, себебі терезе мазмұны тәуелді болатын кейбір деректер өзгерген (яғни, терезе менеджеріне емес, қайта бояу қажет екенін білесіз), онда сіз терезе менеджеріне қайта бояудың қажет екенін айтасыз және ол шақырады сіздің бояу функциясы. Сіз оны өзіңіз атамайсыз. (Мұның бәрі келесі бөлімде көрсетілген).

Алдымен сіз бояу функциясын табуыңыз керек. Код генераторы оны сіз үшін жасайды және ол алдыңғы бөлімде өзгертілген хабарламаларды өңдеу функциясының дәл үстінде. Жобаға өтіп, W1.c файлын қайтадан ашыңыз.

Бұл файлда window_W1_paint_function () функциясын табасыз. Бұл келесідей көрінеді:

windows_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).width, mw_get_window_client_rect (window_handle). биіктігі); / * Терезені бояу кодын осында қосыңыз */}

Бұл код ретінде шығарылады және клиенттің аймағын ақ түспен толтырады. Клиент аймағына сары толтырылған шеңбер сызуға рұқсат етіңіз. Алдымен біз графикалық контекст ұғымын түсінуіміз керек (терезедегі басқа нәрсе). Біз графикалық контексте сызу параметрлерін орнатамыз, содан кейін шеңбердің жалпы сызбасын шақырамыз. Бұл мысалда біз белгілеуіміз керек - бұл шеңбердің жиегі, жиек сызығының стилі, жиектің түсі, шеңбердің толтырылуы, түсі мен толтыру үлгісі. Сіз жоғарыдағы кодты көре аласыз, ол клиенттік аймақты шекарасыз толтырылған ақ төртбұрышпен толтыруға ұқсас. Графикалық контексттегі мәндер бояу функциясының әр шақыруы арасында есте сақталмайды, сондықтан мәндерді әр уақытта орнату қажет (олар бояу функциясымен есте қалады).

Жоғарыдағы кодта толтыру қосулы және толтыру үлгісі өшірілгенін көруге болады, сондықтан оларды қайта орнатудың қажеті жоқ. Біз шекараны, шекара сызығының стилін қатаң, шекараның алдыңғы түсін қара етіп, түсін сарыға толтыруымыз керек:

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 құрылымы

{ / * Деректер мүшелерін осында қосыңыз * / char dummy; /* Кейбір компиляторлар бос құрылымдарға шағымданады; мүшелеріңізді қосқанда */} window_W1_data_t жойыңыз; static window_W1_data_t window_W1_data;

Бұл жерде біз өз деректерімізді кэштейміз, осылайша ол қоңырауларда сақталады және терезе деректері ретінде белгілі. Біз мұнда тек таңдалған түсті сақтауымыз керек:

typedef құрылымы

{ / * Деректер мүшелерін осында қосыңыз * / mw_hal_lcd_colour_t selected_colour; } window_W1_data_t; static window_W1_data_t window_W1_data = {MW_HAL_LCD_YELLOW};

Біз оған бастапқы сары түс береміз. Енді хабарлама функциясында таңдалған түсті осында сақтау үшін кодты сәл өзгертеміз:

MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE жағдайы:

{window_W1_data.chosen_colour = message-> message_data; } үзіліс;

Содан кейін біз бұл функцияны шеңберді келесідей сызғанда осы мәнді қолдану үшін өзгертеміз:

mw_gl_set_solid_fill_colour (window_W1_data.chosen_colour);

Енді біз терезенің мазмұны байланысты болатын деректерді өзгерттік, сондықтан терезе менеджеріне терезені қайта бояу қажет екенін хабарлауымыз керек. Біз мұны хабарлама функциясында OK диалогтық хабарламасы алынған кезде жасаймыз, мысалы:

mw_paint_window_client (хабар-> алушының_қолдауы);

Бұл терезенің тікелей боялуына әкелмейді. Бұл терезе менеджеріне терезені қайта бояу қажет екендігі туралы хабарлама жіберетін қызметтік функция (егер сіз оған кірсеңіз, мұның қалай болатынын көре аласыз). Бұл жағдайда қайта бояу қажет терезенің өзі, ал терезенің тұтқасы хабарлама өңдегіш функциясының хабарлама параметрінде болады.

Егер жоғарыдағы кейбір код үзінділері қайда баратынына сенімді болмасаңыз, бүкіл файл енді осылай көрінеді:

#қосу

#include «miniwin.h» #include «miniwin_user.h» #include «W1.h» typedef struct { / * Деректер мүшелерін осында қосыңыз * / mw_hal_lcd_colour_t таңдалған_түс; } window_W1_data_t; static 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).width, 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, «Нөл көрсеткішінің параметрі»); / * Келесі жолда компилятордың ескертулері тоқтатылады, себебі айнымалысы қазір қолданылмайды */ (void) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Терезенің инициализация кодын осында қосыңыз * / break; case MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Терезе мәзірінің өңдеу кодын осында қосыңыз * / break; case MW_BUTTON_PRESSED_MESSAGE: if (message-> sender_handle == button_B1_handle) { / * Осы басқару элементінің өңдеуші кодын осында қосыңыз * / mw_create_window_dialog_colour_chooser (10, 10, «Түс», MW_HAL_LCD_RED,) } үзіліс; жағдай MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE: {window_W1_data.chosen_colour = message-> message_data; mw_paint_window_client (хабар-> алушының_қолы); } үзіліс; әдепкі: / * MISRA -ны бақытты ұстау * / break; }}

Қайта құрыңыз және іске қосыңыз, сіз шеңбердің толтыру түсін орната аласыз.

Терезе деректерінің бұл мысалы бастапқы файлдың жоғарғы жағындағы тұрақты деректер құрылымында сақталатын деректерді пайдаланады. Егер сізде бұл мысалдағыдай терезенің бір данасы болса, бұл жақсы, бірақ егер сізде бірнеше даналар болса, онда олардың барлығы бірдей деректер құрылымын бөліседі. Бір даналық деректердің болуы мүмкін, сондықтан бір терезе түріндегі бірнеше дананың өзіндік деректері болады. Бұл құжаттар каталогында орналасқан MiniWin құжаттамасында түсіндірілген. Файл үлгісі оны бір терезе түріндегі бірнеше суретті көрсету үшін қолданады (негізгі нұсқаулықтың жоғарғы жағында көрсетілгендей).

9 -қадам: Қаріптің соңғы қарпі

Кейбір қызықты қаріптер
Кейбір қызықты қаріптер

MiniWin TrueType қаріптерін көрсетуді қолдайды. Егер сіздің пайдаланушы интерфейсін жақсы ететін бір нәрсе болса, бұл тартымды қаріптер. Бұл соңғы қадам MiniWin терезесінде TrueType қарпін қалай көрсету керектігін көрсетеді.

TrueType қаріптерін көрсетудің екі әдісі бар. Бірі - оларды бұрын шеңбер үшін жасалғандай тікелей клиенттік аймаққа салу, екіншісі - терезеге мәтін ұясының басқару элементін қосу. Біз соңғысын жасаймыз, себебі бұл оңайырақ.

Енді біз JSON конфигурация файлына мәтіндік терезені басқару элементін қосамыз. Оны 2 -терезенің анықтамасына қосыңыз, осылайша:

Бұл сияқты:

{

«Аты»: «W2», «Тақырып»: «2 -терезе», «Х»: 50, «Y»: 65, «Ені»: 100, «Биіктік»: 80, «Шекара»: шын, «TitleBar»: true, «Visible»: true, «Minimed»: false, «TextBoxes»: [{«Name»: «TB1», «X»: 0, «Y»: 0, «Width»: 115, «Биіктігі»: 50, «Негіздеме»: «Орталық», «BackgroundColour»: «MW_HAL_LCD_YELLOW», «Алдыңғы Түс»: «MW_HAL_LCD_BLACK», «Қаріп»: «mf_rlefont_BLKCHCRY16», «Қосылған»: шын, «}} Көрінетін»

MiniWin бағдарламасында TrueType қаріптері туралы қысқаша сөз. Қаріптер.ttf файлдарына келеді. Үлкен компьютерлердегі терезе менеджерлерінде олар қажет болғанда дисплейге шығарылады. Бұл көп өңдеу қуаты мен жадты қажет етеді және шағын құрылғыларға жарамайды. MiniWin-де олар нүктелік кескіндерге алдын ала өңделеді және компиляция кезінде бекітілген қаріп өлшемі мен стилінде (қалың, курсив және т.б.) байланыстырылады, яғни компиляция кезінде қандай өлшем мен стильде қандай қаріптерді қолдану керектігін шешу қажет. Бұл сіз жүктеген MiniWin zip файлындағы екі қаріп үлгісі үшін жасалды. Егер сіз басқа қаріптерді басқа өлшемдер мен стильдерде қолданғыңыз келсе, docs қалтасындағы MiniWin құжаттамасын қараңыз. Windows және Linux жүйелеріне арналған MiniWin-де.ttf файлдарын бастапқы код файлдарына алдын ала өңдеуге арналған құралдар бар, оларды жобаңызға енгізуге болады.

Екінші жылдам сөз - қаріптердің көпшілігі авторлық құқық болып табылады, соның ішінде Microsoft Windows жүйесінде табуға болады. Оларды жеке пайдалану үшін өз еркіңізбен қолданыңыз, бірақ сіз жариялайтын кез келген нәрсе, қаріптердің лицензиялануына рұқсат беретініне көз жеткізуіңіз керек, бұл MiniWin -ге кіретін 2 қаріпке қатысты, бірақ Microsoft -тың қаріптері емес!

Кодқа оралу! Бұрынғыдай файлдарды жасаңыз, тастаңыз, құрыңыз және қайта жасаңыз, сонда сіз 2 -терезеде сары фонда жалған қаріппен әдепкі мәтін бар екенін көресіз. W2.c. 2 -терезенің бастапқы файлын өңдеу арқылы мәтінді өзгертуге мүмкіндік береді.

Біз жаңа ғана құрған мәтін ұясымен байланысуымыз керек және мұны істеу әдісі - 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, «Қараңғы және боранды түн болды …», MW_CONTROL_MESSAGE); үзіліс;

Бұл параметрлер:

  • MW_TEXT_BOX_SET_TEXT_MESSAGE - Бұл біз басқаруға жіберетін хабар түрі. Олар miniwin.h -те көрсетілген және құжаттамада құжатталған.
  • message-> алушының_қолы - бұл хабарлама кімнен - бұл терезе - оның өңдегіші хабарлама өңдеуші функциясына жіберілген хабарлама параметрінде.
  • text_box_TB1_handle - Біз хабарды кімге жібереміз - мәтін ұясының басқару элементі. Олар miniwin_user.h құрылған файлында көрсетілген.
  • 0UL - деректер мәні, бұл жағдайда ештеңе жоқ.
  • «Қараңғы және боранды түн болды …» - Көрсеткіш мәні - жаңа мәтін.
  • MW_CONTROL_MESSAGE - Басқару болып табылатын алушының түрі.

Міне бітті. Әдеттегідей қайта құрыңыз және қайта қосыңыз, сонда сіз жоғарыдағы суреттегідей мәтіндік терезені аласыз.

Хабарлама жіберу MiniWin үшін маңызды (барлық терезе менеджерлері үшін). Қосымша мысалдар алу үшін zip файлындағы жобаларды қараңыз және толық түсініктеме алу үшін құжаттамадағы MiniWin хабарламалары бөлімін оқыңыз.

10 -қадам: Әрі қарай жүріңіз

Image
Image

Бұл MiniWin -ге негізгі кіріспе үшін. MiniWin мұнда көрсетілгеннен әлдеқайда көп нәрсені жасай алады. Мысалы, осы нұсқаулықта пайдаланылатын тақтадағы экран кішкентай, ал басқару элементтері кішкентай, оларды диббермен бірге қолдану қажет. Дегенмен, басқа мысалдар мен жабдықтар үлкен дисплейлерде үлкенірек басқару элементтерін пайдаланады (2 өлшемі бар) және оларды саусақпен басқаруға болады.

Мұнда көрсетілгендерге қарағанда бақылаудың басқа да көптеген түрлері бар. Қосымша басқару үшін код генераторы қалтасындағы JSON файлдарының әр түрлі мысалын қараңыз. Барлық бақылау түрлері осы мысалдарда қарастырылған.

Windows -та көптеген нұсқалар бар. Шекара, тақырып жолағы және белгішелер конфигурациялануы мүмкін. Сізде айналдыру жолақтары мен жылжу терезесінің клиенттік аймақтары болуы мүмкін, терезенің бір типті бірнеше терезелері жалаңаш болуы мүмкін (тек клиенттік аймақ, шекара немесе тақырып жолағы жоқ), бұл олардың дисплейде компиляция уақытында бекітілгенін білдіреді (Үлкен белгішелері бар осы бөлімдегі суретті қараңыз - бұл 6 жалаңаш терезе).

MiniWin динамикалық жадты пайдаланбайды. Бұл оны шағын шектеулі құрылғыларға жарамды етеді және кейбір ендірілген жобалар үшін талап болып табылады. MiniWin және ол шығаратын код сонымен қатар MISRA 2012 толық талапқа сәйкес келеді.

Қосымша ақпарат алу үшін құжаттаманың құжаттар қалтасынан, сондай -ақ zip файлындағы басқа қосымшалардың мысалынан қараңыз. Мұнда MiniWin -дің барлық мүмкіндіктерін қалай пайдалану керектігін және MiniWin -ді FatFS пен FreeRTOS -пен қалай біріктіру керектігін көрсететін мысалдар келтірілген.

Ұсынылған: