Агуулгын хүснэгт:

Суулгасан цонхны менежер: 10 алхам
Суулгасан цонхны менежер: 10 алхам

Видео: Суулгасан цонхны менежер: 10 алхам

Видео: Суулгасан цонхны менежер: 10 алхам
Видео: Установка ванны. Все секреты. Экран. Скрытый люк. #40 2024, Арваннэгдүгээр
Anonim
Суулгасан цонхны менежер
Суулгасан цонхны менежер
Суулгасан цонхны менежер
Суулгасан цонхны менежер
Суулгасан цонхны менежер
Суулгасан цонхны менежер
Суулгасан цонхны менежер
Суулгасан цонхны менежер

Энэхүү төсөл нь LCD самбар, мэдрэгчтэй дэлгэц бүхий микроконтроллер дээр хөдлөх давхцсан цонхтой цонхны менежерийг хэрхэн хэрэгжүүлэхийг харуулав. Үүнийг хийхийн тулд худалдаанд байгаа програм хангамжийн багцууд байдаг боловч тэдгээр нь мөнгө шаарддаг бөгөөд хаалттай эх сурвалж юм. MiniWin гэж нэрлэгддэг энэхүү төхөөрөмж нь үнэгүй бөгөөд нээлттэй эх сурвалжтай. Энэ нь бүрэн нийцсэн C99 хэл дээр бичигдсэн бөгөөд C эсвэл C ++ програмд ашиглах боломжтой. MiniWin -ийн зорилго нь ашиглахад хялбар, өөрчлөхөд хялбар, өргөтгөх боломжтой, өргөн хүрээний техник хангамжид зөөвөрлөх, хэт их өлсөхгүй байх явдал юм.

Цонхнуудаа удирдах кодыг өгөхөөс гадна MiniWin нь хэрэглэгчийн интерфэйсийг удирдах товчлуур, гулсагч, явцын баар, мод гэх мэт цуглуулгатай байдаг. Та олон төрлийн цонхтой эсвэл нэг төрлийн олон тохиолдолтой байж болно. Цонхнуудыг өөр газар шилжүүлэх, хэмжээг нь өөрчлөх, томруулах, багасгах, хаах боломжтой - том цонхны менежерүүдийн цонхоор хийдэг ердийн бүх зүйл. TrueType фонтыг кернинг болон алслахаас сэргийлсэн фонтууд (текстийг smooooooth харагдуулдаг) бас сэтгэл татам текст үзүүлэхэд дэмждэг.

Цонх бүрт танд үйлчлүүлэгчийн хэсэг байдаг (таны зай хилийн дотор ба дээд баарны доор). Үүн дээр та харилцах цонх хийх хяналтыг нэмж эсвэл хүссэн график номын санг ашиглан хүссэн зүйлээ зурж болно. График номын сангийн бүх функцууд цонхыг мэддэг. Таны цонх хаана байгаа, юу давхцаж байгаа, эсвэл үүнийг багасгасан эсэх талаар санаа зовох хэрэггүй.

Цонхыг өөрийн гараар хийхээс гадна үүнийг хийхэд маш хялбар байдаг зарим стандарт харилцах цонхууд байдаг, жишээ нь баталгаажуулах харилцах цонх (зүгээр л OK эсвэл Тийм/Үгүй гэсэн товчлуурууд), цаг/огноо тохируулагч, файл сонгогч, өнгө сонгогч гэх мэт.

MiniWin нь стандарт цонхны менежерийн зурвасын дарааллын системийг ашигладаг. Windows нь хоорондоо болон цонхны менежертэй мессежээр харилцах боломжтой. Та функцийг шууд хийх гэж дууддаггүй, та дараалалд мессеж нэмж оруулах бөгөөд цонхны менежер үүнийг танд зориулж өгөх болно.

MiniWin-ийг ST, NXP, Renesas микроконтроллер үйлдвэрлэгчдийн мэдрэгчтэй дэлгэц бүхий стандарт хөгжлийн самбар руу зөөсөн. Эдгээр бүх төхөөрөмжийн техник хангамжийн драйверууд болон жишээ төслүүд байдаг. Нэмж дурдахад MiniWin -ийг Windows эсвэл Linux -д зориулж бүтээх боломжтой бөгөөд ингэснээр та суулгагдсан техник хангамжаа авахаасаа өмнө хэрэглэгчийн интерфэйсийн кодыг дуурайж болно.

MiniWin нь код үүсгэгчтэй. Та өөрийн цонх, хяналтыг энгийнээр зааж өгч, хүн унших боломжтой JSON файл үүсгэж болох бөгөөд код үүсгэгч нь файлыг задлан шинжилж кодыг танд бий болгоно (дагаж мөрдөх олон жишээ бий). Энэ нь дөнгөж бүтээж болох Windows эсвэл Linux -ийн бүрэн симулятор програмуудыг бий болгодог бөгөөд таны дуураймал LCD дэлгэц таны MiniWin цонхнууд дээр ажилладаг. Та яг ижил үүсгэсэн кодыг аваад суулгагдсан төсөлд оруулах боломжтой бөгөөд суулгасан техник хангамжийнхаа дараа ижил цонх, хяналтыг харуулсан ижил кодтой болно.

MiniWin нь суулгагдсан төхөөрөмж дээр ажиллах дэмжлэг шаарддаггүй. Энэ бүхэн нэг утсаар ажилладаг. MiniWin -ийг суулгагдсан процессор дээр ажилладаг RTOS -тэй нэгтгэж болох бөгөөд MiniWin -ийг FreeRTOS -тэй нэгтгэсэн жишээ байдаг.

Энэхүү зааварчилгаа нь QVGA мэдрэгчтэй дэлгэцийг хавсаргасан хямд STM32F429 Discovery хавтанг ашиглан MiniWin -ийг STM32 M4 процессор дээр хэрхэн яаж ажиллуулахыг харуулсан болно. Эдгээрийг танай электрон бараа нийлүүлэгчээс хялбархан авах боломжтой.

MiniWin нь дунд болон түүнээс дээш түвшний микро контроллерууд дээр ажилладаг.

Хангамж

STM32F429I-DISC1 хөгжүүлэх самбар ба микро USB кабель

STM32CubeIDE татаж авах үнэгүй.

Алхам 1: Код авах

Код авах
Код авах

Юуны өмнө танд STM32CubeIDE суулгасан байх шаардлагатай. Та үүнийг ST -ийн вэбсайтаас авах боломжтой. Та бүртгүүлэх ёстой бөгөөд үүнийг татаж аваад суулгахад хэсэг хугацаа шаардагдана. Энэ бүхэн үнэгүй.

Үүнийг суулгаж байх үед MiniWin эх сурвалжийг татаж аваад задлаарай. Энэ нь том, гэхдээ та түүний багахан хэсгийг л ашиглах болно. Ногоон "Clone эсвэл Татаж авах" товчийг дарна уу …

github.com/miniwinwm/miniwinwm

дараа нь Zip татаж авахыг сонгоно уу. Агуулгыг задлах.

Алхам 2: Жишээ төсөл бий болгох

Жишээ төслийг бий болгох
Жишээ төслийг бий болгох
Жишээ төслийг бий болгох
Жишээ төслийг бий болгох

Эхлээд жишээ төслүүдийн нэгийг бүтээцгээе. Сайн нэгийг MiniWinSimple гэдэг. STM32CubeIDE -ийг эхлүүлээд дараахь зүйлийг хий.

  1. Файлыг сонгох | Импортлох…
  2. Ерөнхий хэсгийг нээгээд, одоо байгаа төслийг ажлын талбарт сонгоно уу. Дараачийн.
  3. Browse дээр дарж MiniWin -ийг задалсан газар руу очно уу. Дараа нь STM32CubeIDE / MiniWinSimple / STM32F429 хавтас руу очно уу. Фолдер сонгох дээр дарна уу.
  4. Төсөлд: MiniWinSimple_STM32F429 гэж тэмдэглээд Finish дээр дарна уу.
  5. MiniWinSimple_STM32F429 төсөл нь таны Project Explorer дээр гарч ирэх болно. Үүнийг сонгоод Project | Build Project ашиглан бүтээнэ үү.
  6. Одоо USB кабелийг самбар болон компьютерт холбоод Run | Debug ашиглан ажиллуулаад татаж авахдаа Run | Resume -ийг сонгоно уу. Та дэлгэцийн шалгалт тохируулгын дэлгэцийг анх удаа авах болно, ингэснээр LCD дэлгэц дээрх 3 загалмайн төвд хүрнэ үү. Та одоо дэлгэц дээрх цонхтой харилцах боломжтой.

Цонхыг шилжүүлэхийн тулд гарчгийн мөрөнд чирнэ үү. Цонхны хэмжээг өөрчлөхийн тулд гарчгийн мөрний зүүн талд цагаан гурвалжин дүрсийг ашиглана уу. MiniWin -ийн дэлгэц хэтэрхий жижиг тул MiniWin цонхны хэмжээг өөрчлөх боломжгүй. Цонхыг багасгах, томруулах эсвэл хаахын тулд гарчгийн талбарын баруун төгсгөлд байгаа дүрсийг ашиглана уу (хаах идэвхгүй байж магадгүй). Цонхыг багасгах үед та жижигрүүлсэн дүрсүүдийг хөдөлгөж чадахгүй. Тэд зүүн доод талаас баруун тийш хуримтлагддаг.

Алхам 3: Код үүсгэгчийг ажиллуулах

Код үүсгэгчийг ажиллуулж байна
Код үүсгэгчийг ажиллуулж байна

Одоо бид жишиг төслийг өөр цонхнуудыг үүсгэж, шинэ кодыг оруулах замаар өөрчлөх болно. Үүнийг хийхийн тулд бид код үүсгэгчийг ажиллуулах болно.

  1. Тушаал хүлээх мөрийг нээгээд MiniWin -ийг задалсан хавтас руу очоод Tools / CodeGen хавтас руу очно уу.
  2. Windows CodeGen.exe -д зориулсан гүйцэтгэх боломжтой файл аль хэдийн бэлэн болсон байна. Linux -ийн хувьд та үүнийг make гэж бичих замаар бүтээх ёстой. (Хэрэв та татаж авсан програмыг ажиллуулж байгаад санаа зовж байгаа боловч хөрвүүлэгч болон хөгжүүлэлтийн орчныг суулгах шаардлагатай бол үүнийг Windows -ийн эх сурвалжаас үүсгэж болно. Дэлгэрэнгүй мэдээллийг docs фолдер дахь MiniWin баримт бичгээс үзнэ үү).
  3. Энэ фолдерт JSON файлуудын зарим жишээ байна. Бид example_empty.json -ийг ашиглах болно. Үүнийг Windows эсвэл Linux дээр тохируулахын тулд та эхлээд үүнийг засах хэрэгтэй. Үүнийг редактор дээр нээгээд "TargetType" -ийг олохын тулд "Линукс" эсвэл "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", "X": 10, "Y": 15, "Өргөн": 200, "Өндөр": 180, "Хил": үнэн, "TitleBar": үнэн, "Харагдах": үнэн, "Багасгасан": худал}

2 тодорхойлолтыг тусгаарлах таслалаар дахин оруулна уу.

3. "W1" -ийг "W2" болгож, "Window 1" -ийг "Window 2" болгон өөрчилнө үү. "X", "Y", "Width" ба "Height" -ийг дэлгэцийн нарийвчлал нь 240 өргөн, 320 өндөр байх тул өөр өөр утга болгон өөрчилнө үү.

4. Файлыг хадгалаад код үүсгэгчийг дахин ажиллуулна уу.

5. Файлуудыг өмнөх алхам шиг хуулж, дахин бүтээж, дахин ажиллуулна уу. Одоо таны дэлгэц дээр 2 цонх байх болно.

Алхам 5: Хяналт нэмэх

Хяналт нэмж байна
Хяналт нэмж байна

Одоо бид таны шинэ цонхонд зарим хяналтыг нэмж оруулах болно. Өмнөх алхамтай ижил файлыг засна уу.

1. W1 цонхны техникийн үзүүлэлтэд сүүлчийн тохируулгын дараа таслал оруулна уу ("Хассан": худал), дараа нь энэ текстийг нэмнэ үү.

"MenuBar": үнэн, "MenuBarEnabled": үнэн, "MenuItems": ["Фред", "Берт", "Пит", "Альф", "Иан"], "Товчнууд": [{"Нэр": "В1", "Шошго": "Button1", "X": 10, "Y": 10, "Enabled": үнэн, "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 (message! = (void *) 0, "Null pointer parameter"); / * Дараагийн мөр нь хувьсагчийг одоогоор ашиглаагүй байгаа тул хөрвүүлэгчийн анхааруулгыг зогсооно */ (void) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Энд дурын цонх эхлүүлэх кодыг нэмнэ үү * / завсарлага; case MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Цонхны цэсийг зохицуулах кодыг энд нэмэх * / завсарлага; тохиолдолд MW_BUTTON_PRESSED_MESSAGE: if (message-> sender_handle == button_B1_handle) { / * Энэ хяналтын зохицуулагчийн кодыг энд нэмнэ үү / /} завсарлага; анхдагч: / * MISRA -г аз жаргалтай байлга * / завсарлага; }}

Цонхны менежер ямар нэгэн зүйл болсныг цонхны менежерт мэдэгдэх шаардлагатай үед үүнийг энэ цонхны менежер дууддаг. Энэ тохиолдолд бид цонхны цорын ганц товчлуур дарагдсан болохыг мэдэх сонирхолтой байна. Зурвасын төрөлд шилжих мэдэгдэлд та 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 товчлуурыг дарахад манай цонх сонгосон өнгө бүхий мессежийг илгээх болно. Тиймээс бид энэ мессежийг switch -ийн өөр нэг тохиолдолд ийм байдлаар таслах ёстой.

тохиолдолд MW_DIALOG_COLOUR_CHOOSER_OK_MESSAGE:

{mw_hal_lcd_colour_t selected_colour = message-> message_data; (хүчин төгөлдөр бус) selected_colour; } завсарлага;

Бид сонгосон өнгөөр юу ч хийгээгүй байгаа тул хөрвүүлэгчийн анхааруулгаас урьдчилан сэргийлэхийн тулд үүнийг хүчингүй болгож байна. Энэ функцын эцсийн код одоо иймэрхүү харагдаж байна.

хүчингүй цонх_W1_мессеж_функц (const mw_message_t *мессеж)

{MW_ASSERT (message! = (Void*) 0, "Null pointer parameter"); / * Дараагийн мөр нь хувьсагчийг одоогоор ашиглаагүй байгаа тул хөрвүүлэгчийн анхааруулгыг зогсооно */ (void) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Цонхны эхлүүлэх кодыг энд нэмэх * / завсарлага; case MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Цонхны цэсийг зохицуулах кодыг энд нэмэх * / завсарлага; тохиолдолд 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; (хүчин төгөлдөр бус) сонгогдсон өнгө; } завсарлага; анхдагч: / * MISRA -г аз жаргалтай байлга * / завсарлага; }}

Кодыг ажиллуулж байгаа нь дээрх зураг дээр харагдаж байна. Харилцах цонх гарч ирэхэд та өөр зүйл хийхээсээ өмнө хариулах ёстой бөгөөд үүнийг хэрэгсэхгүй болгох хэрэгтэйг та анзаарч магадгүй юм. Үүнийг модаль зан үйл гэж нэрлэдэг. MiniWin дээрх диалогууд болон дэлхийн хэмжээнд үргэлж модаль хэлбэртэй байдаг бөгөөд та нэг удаад ганцхан удаа үзүүлэх боломжтой. Энд илүү дэлгэрэнгүй тайлбар байна …

en.wikipedia.org/wiki/Modal_window

Алхам 7: Цонхоор зураг зурах

Цонхоор зураг зурах
Цонхоор зураг зурах

Одоогийн байдлаар бид зөвхөн хяналтыг ашигласан бөгөөд тэд өөрсдийгөө зурдаг. Манай цонхон дээр захиалгаар зураг зурах цаг болжээ. Таны зурж болох хэсэг нь хилийн дотор (хэрэв байгаа бол тэдгээр нь заавал биш), гүйлгэх баар дотор (хэрэв тодорхойлсон бол заавал биш), гарчгийн мөрний доор (хэрэв байгаа бол энэ нь бас заавал байх болно). Үүнийг цонхны нэр томъёонд үйлчлүүлэгчийн талбар гэж нэрлэдэг.

MiniWin дээр ашиглах боломжтой график командуудын номын сан байдаг. Тэд бүгд цонх мэддэг. Энэ нь цонх харагдахуйц, бусад цонхоор хэсэгчлэн бүрхэгдсэн, дэлгэцийг асаасан, хэсэгчлэн унтраасан эсвэл бүрэн унтраасан, эсвэл зурж буй газрынхаа координат нь үйлчлүүлэгчийн талбар эсвэл түүнээс цааш байгаа бол санаа зовох хэрэггүй гэсэн үг юм.. Энэ бүхэн танд зориулагдсан болно. Та үйлчлүүлэгч талбараасаа гадна зураг зурах боломжгүй.

Цонхны нэр томъёоны үйлчлүүлэгчийн талбар дээр зураг зурах ажлыг будалт гэж нэрлэдэг бөгөөд цонх бүр нь зурж буй будгийн функцтэй байдаг. Та будагны функцийг дууддаггүй, цонхны менежер шаардлагатай үед үүнийг хийдэг. Цонхыг шилжүүлэх эсвэл өөр цонхны байрлал эсвэл харагдах байдлыг өөрчлөх үед энэ нь шаардлагатай болно. Хэрэв танд цонхны агуулга хамааралтай зарим өгөгдөл өөрчлөгдсөн тул цонхыг дахин будах шаардлагатай бол (өөрөөр хэлбэл цонхны менежерийг мэдэхээс илүүтэйгээр дахин будах шаардлагатай гэдгийг та мэднэ), дараа нь цонхны менежерт дахин будах шаардлагатай байгааг хэлээд дуудна. таны будагны функц. Та өөрөө үүнийг дууддаггүй. (Энэ бүгдийг дараагийн хэсэгт харуулав).

Нэгдүгээрт, та будагны функцийг олох хэрэгтэй. Код үүсгэгч нь үүнийг танд зориулан бүтээсэн бөгөөд энэ нь өмнөх хэсэгт өөрчлөгдсөн мессеж боловсруулах функцээс дээгүүр байна. Төсөл рүүгээ ороод W1.c файлыг дахин нээнэ үү.

Энэ файлд цонх_W1_paint_function () функцийг олох болно. Энэ нь иймэрхүү харагдаж байна:

хоосон цонх_W1_paint_function (mw_handle_t window_handle, const mw_gl_draw_info_t *draw_info)

{MW_ASSERT (draw_info! = (Хүчингүй*) 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_color (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: Цонхны өгөгдөл

Цонхны өгөгдөл
Цонхны өгөгдөл

Одоогийн байдлаар бид Window 1 -ийн мессежийн функц (ирж буй мессежийг зохицуулах) болон түүний будагны функцийг (цонхны үйлчлүүлэгчийн талбар дээр зурах) өөрийн кодоо хэрэгжүүлээд байна. Одоо энэ хоёрыг холбох цаг болжээ. Будаг функц дээр зурсан тойргийг товчлуур дарагдсан үед хэрэглэгчийн сонгосон өнгөөр бөглөнө үү. Бид будгийн функцийг дууддаггүй, цонхны менежер үүнийг хийдэг тул бидний зурвасын функц (сонгосон өнгийг мэддэг) будагны функцийг өөрөө дуудаж чадахгүй гэдгийг санаарай. Үүний оронд бид өгөгдлийг кэш хийж, дахин будах шаардлагатай байгааг цонхны менежерт мэдэгдэх хэрэгтэй. Цонхны менежер дараа нь кэшлэгдсэн өгөгдлийг ашиглах боломжтой будаг функцийг дуудах болно.

W1.c -ийн дээд хэсэгт та хоосон өгөгдлийн бүтэц, ийм төрлийн код үүсгэгчээр зарласан объектыг харах болно.

typedef бүтэц

{ / * Өгөгдлийн гишүүдээ энд нэмэх * / char дамми; /* Зарим хөрвүүлэгчид хоосон бүтцийн талаар гомдоллодог; гишүүдээ нэмэх үед үүнийг устга */} 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, "Null pointer parameter"); / * Цонхны үйлчлүүлэгчийн хэсгийг хатуу цагаан өнгөөр дүүргэх */ 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 *message) {MW_ASSERT (message! = (void *) 0, "Null pointer parameter"); / * Дараагийн мөр нь хувьсагчийг одоогоор ашиглаагүй байгаа тул хөрвүүлэгчийн анхааруулгыг зогсооно */ (void) window_W1_data; switch (message-> message_id) {case MW_WINDOW_CREATED_MESSAGE: / * Цонхны эхлүүлэх кодыг энд нэмэх * / завсарлага; case MW_MENU_BAR_ITEM_PRESSED_MESSAGE: / * Цонхны цэсийг зохицуулах кодыг энд нэмэх * / завсарлага; тохиолдолд 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 -г аз жаргалтай байлга * / завсарлага; }}

Дахин бүтээж, ажиллуул, та тойргийн бөглөх өнгийг тохируулах боломжтой байх ёстой.

Цонхны өгөгдлийн энэ жишээ нь эх файлын дээд хэсэгт статик өгөгдлийн бүтцэд хадгалагдсан өгөгдлийг ашигладаг. Хэрэв танд энэ жишээний адил цонхны ганцхан жишээ байгаа бол энэ нь зүгээр юм, гэхдээ хэрэв танд нэгээс олон жишээ байгаа бол тэд бүгд ижил өгөгдлийн бүтцийг хуваалцах болно. Нэг дансны өгөгдөлтэй байх боломжтой тул нэг төрлийн цонхны олон жишээ өөрийн гэсэн өгөгдөлтэй байдаг. Үүнийг docs лавлах санд байгаа MiniWin баримт бичигт тайлбарласан болно. Файлын жишээ нь үүнийг нэг цонхны төрөлд олон зургийг харуулахын тулд ашигладаг (энэ зааврын хамгийн дээд хэсэгт байгаа үндсэн зураг дээр харуулсан шиг).

Алхам 9: Зарим эцсийн фонт хөгжилтэй

Зарим Final Font Fun
Зарим Final Font Fun

MiniWin нь TrueType фонт хөрвүүлэлтийг дэмждэг. Хэрэв таны хэрэглэгчийн интерфэйсийг сайхан харагдуулдаг нэг зүйл байвал энэ нь сэтгэл татам фонт юм. Энэхүү эцсийн алхам нь MiniWin цонхонд TrueType фонтыг хэрхэн яаж үзүүлэхийг харуулж байна.

TrueType фонт үзүүлэх хоёр арга бий. Нэг нь тэдгээрийг өмнө нь тойрог дээр хийсэн шиг харилцагчийнхаа талбар дээр шууд зурах, нөгөө нь таны цонхонд текст хайрцагны удирдлага оруулах явдал юм. Бид сүүлд нь хийж байгаа нь илүү хялбар болсон.

Одоо бид JSON тохиргооны файлдаа текст хайрцагны хяналтыг нэмж оруулах болно. Үүнийг 2 -р цонхны тодорхойлолтод нэмээд дараах байдлаар харагдана.

үүн шиг:

{

"Нэр": "W2", "Гарчиг": "Цонх 2", "X": 50, "Y": 65, "Өргөн": 100, "Өндөр": 80, "Хил": үнэн, "TitleBar": үнэн, "Үзэгдэх": үнэн, "Хамгийн бага": худал, "TextBoxes": [{"Нэр": "TB1", "X": 0, "Y": 0, "Өргөн": 115, "Өндөр": 50, "Үндэслэл": "Төв", "Арын өнгө": "MW_HAL_LCD_YELLOW", "Урд өнгө": "MW_HAL_LCD_BLACK", "Фонт": "mf_rlefont_BLKCHCRY16", "Идэвхжүүлсэн": үнэн, "} Харагддаг":

MiniWin дээрх TrueType фонтуудын тухай товчхон үг. Фонтууд.ttf файлуудад ирдэг. Том компьютер дээрх цонхны менежерүүдэд тэдгээрийг шаардлагатай үед таны дэлгэц дээр харуулдаг. Энэ нь маш их боловсруулалтын хүч, санах ой шаарддаг бөгөөд жижиг төхөөрөмжүүдэд тохиромжгүй байдаг. MiniWin дээр тэдгээрийг bitmap-д урьдчилан боловсруулж, хөрвүүлэх үед тогтмол фонтын хэмжээ, хэв маягаар (тод, налуу гэх мэт) холбож өгдөг, өөрөөр хэлбэл та эмхэтгэх үедээ ямар хэмжээтэй, ямар хэв маягаар ашиглахаа шийдэх ёстой. Энэ нь таны татаж авсан MiniWin зип файлын хоёр жишээ фонтын хувьд танд зориулагдсан болно. Хэрэв та өөр фонт, загварыг өөр хэмжээтэй ашиглахыг хүсвэл docs фолдер дахь MiniWin баримт бичгийг үзнэ үү. Windows болон Linux-д зориулсан MiniWin-д.ttf файлуудыг эх кодын файл болгон урьдчилан боловсруулах хэрэгслүүд байдаг.

Хоёрдахь хурдан үг - ихэнх фонтууд нь зохиогчийн эрх бөгөөд үүнд Microsoft Windows дээрээс олох боломжтой болно. Тэдгээрийг хувийн хэрэгцээндээ дур мэдэн ашиглаарай, гэхдээ таны нийтэлсэн бүх зүйл фонтыг хэвлэсэн лиценз нь MiniWin -д багтсан 2 фонтын хувьд зөвшөөрөгдсөн эсэхийг баталгаажуулах ёстой, гэхдээ Microsoft -ийн фонт биш!

Код руу буцах! Файл үүсгэх, хаях, бүтээх, урьдын адил дахин ажиллуулах, та Window 2 -ийг шар өнгийн дэвсгэр дээр ямар ч утгагүй фонтоор бичсэн болно. Window 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, message-> хүлээн авагчийн_хөндлөн, text_box_TB1_handle, 0UL, "Харанхуй, шуургатай шөнө байсан …", MW_CONTROL_MESSAGE); завсарлага;

Эдгээр параметрүүд нь:

  • MW_TEXT_BOX_SET_TEXT_MESSAGE - Энэ бол бидний удирдлага руу илгээж буй зурвасын төрөл юм. Тэд miniwin.h дээр жагсаагдсан бөгөөд баримт бичигт бичигдсэн болно.
  • message-> receiver_handle - Энэ бол зурвас ирсэн хүн юм - энэ цонх - бариул нь мессеж боловсруулах функцэд дамжуулагдсан мессежийн параметрт байдаг.
  • 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 -ийн 'шаардлагатай' түвшинд бүрэн нийцдэг.

Нэмэлт мэдээлэл авахын тулд баримт бичгийн docs фолдер болон zip файл дахь бусад програмын програмыг үзнэ үү. MiniWin -ийн бүх боломжуудыг хэрхэн ашиглах, MiniWin -ийг FatFS болон FreeRTOS -тэй хэрхэн нэгтгэх талаар энд харуулсан жишээ энд байна.

Зөвлөмж болгож буй: