2-laboratoriya ishi mavzu: linux serverni sozlash ishdan maqsad


klavishlar paneli (stdscr, TRUE)



Yüklə 2,24 Mb.
səhifə2/8
tarix15.07.2023
ölçüsü2,24 Mb.
#136649
1   2   3   4   5   6   7   8
2 laborotoriya ishi

klavishlar paneli (stdscr, TRUE) - agar siz klaviatura () ni shu tarzda chaqirsangiz, F qatori va kursor tugmachalarining tugmachalarini "tutib olishingiz" mumkin bo‘ladi. stdscr "standart" oynaga ncurses tomonidan belgilangan standart ko‘rsatgichdir. Agar siz TRUE parametri bilan klaviaturani chaqirmasangiz, getch () kabi funksiyalar bosilgan tugma kodi oʻrniga qochish ketma-ketligini qaytaradi.

  • noecho () - agar chaqirilsa, keyingi tugmalar avtomatik ravishda ekranda ko‘rsatilmaydi. Agar siz tugmachalarni bosishni o‘zingiz hal qilmoqchi bo‘lsangiz, bu oddiy rejim (masalan, o‘z menyuingizni amalga oshirish va shunga o‘xshashlar).

    Ncurses kutubxonasi bilan ishlashni tugatish uchun endwin () funksiyasini chaqiring, bu kutubxona tomonidan ajratilgan barcha resurslarni chiqaradi va terminalni kutubxona dasturingiz tomonidan ishga tushirilgunga qadar holatiga qaytaradi.
    Getch() funksiyasi umumiy maqsadlar uchun tugmalar bosishlarini o‘qish uchun va wgetch () ma'lum bir oynadan o‘qish uchun ishlatiladi. Loop shunday ko‘rinadi:
    int ch = 0;
    while (ch! = 'q') {
    // ekranni yangilash
    // va tugmachasini bosish uchun kuting
    // uning kodini ch.da oling
    ch = getch ();
    switch (ch) {
    case 48 ... 57:; // tugma 0 dan 9 gacha bosiladi
    sindirish;
    Case KEY_UP:; // kursor "yuqoriga" bosildi
    sindirish;
    }
    }
    Ushbu misol bosilgan tugmani aniqlashning barcha uch turini qamrab oladi: to‘g‘ridan-to‘g‘ri belgi bo‘yicha, kod bo‘yicha va nomli konstanta bo‘yicha. Agar noecho () funksiyasi o‘chirilgan bo‘lsa, u holda bosilgan tugmalar ekranda ko‘rsatiladi, aks holda ular bo‘lmaydi.
    Matnni konsolga chop etish uchun ko‘pincha printw () funksiyasidan foydalaniladi, u printf () bilan bir xil argumentlarni oladi, ya'ni matnni xohlaganingizcha formatlashingiz mumkin. C ++ satrlari uchun (std: string) ular c_str () funksiyasi orqali string parametrlari sifatida uzatilishi kerak, ya'ni:
    std :: string testi;
    [...]
    printw ("% s \ n", test.c_str ());
    Agar chiziq orqadagi "\ n" belgisisiz chop etilganda, kursor joriy satrda, oxirgi chop etilgan belgida qoladi, shuning uchun printw() ga keyingi qo‘ng‘iroq bu holda joriy qatorni tugatadi. Addch() funksiyasi parametrda berilgan bitta belgini ko‘rsatish uchun ishlatiladi. Siz darhol unga uslub atributlarini o‘rnatishingiz mumkin (belgi mantiqiy OR yordamida atributlar bilan birlashtirilgan):
    addch ('a' | A_BOLD | A_UNDERLINE);
    Belgilangan koordinatalarda belgini quyidagicha ko‘rsatishingiz mumkin:
    move (row, col);
    addch (ch);
    Yoki shunday:
    mvaddch (row, col, ch);
    Matn atributlari rang va uslubdir. Ular printw() ga ham tegishli. Atributlarni qanday o‘zgartirish mumkin?
    Avval siz funksiyani chaqirib (odatda initscr() dan keyin) ncurses "rangli dvigatel" ni yoqishingiz kerak:
    start_color ();
    Buning uchun siz ikkita "rang juftliklari" deb ataladigan narsalarni yaratishingiz kerak. Birinchisiga harflarning qizil rangi fon uchun qora, ikkinchisiga esa harflarning oq rangi va fon uchun qora rang beriladi:
    init_pair (1, COLOR_RED, COLOR_BLACK);
    init_pair (2, COLOR_WHITE, COLOR_BLACK);
    Keling, qatorli ro‘yxat elementlariga ega vektor borligini aytaylik. Keyin siz ushbu elementlarni tsiklda ko‘rsatishingiz kerak, ular uchun kerakli atributlarni o‘rnatasiz. Men kichik ishchi dastur (test.cpp) yordamida misolni tahlil qilaman:
    #include
    #include
    #include
    #include
    using namespace std;
    vector list;

    int current_element;
    void update_screen()
    {
    erase(); //чистим экран
    for (size_t i = 0; i < list.size(); i++)

    {
    if (i == current_element)
    {
    attron(A_BOLD);
    attron (COLOR_PAIR(1));
    printw ("%s\n", list[i].c_str());
    attroff (COLOR_PAIR(1));
    attroff(A_BOLD);
    }
    else {
    attron (COLOR_PAIR(2));
    printw ("%s\n", list[i].c_str());
    attroff (COLOR_PAIR(2));
    }
    }
    }
    int main (int argc, char *argv[])

    {
    initscr();
    start_color();
    keypad (stdscr, TRUE);
    noecho();
    init_pair (1, COLOR_RED, COLOR_BLACK);

    init_pair (2, COLOR_WHITE, COLOR_BLACK);
    list.push_back ("one");
    list.push_back ("two");
    list.push_back ("three");
    current_element = 0;
    int ch = 0;

    while (ch != 'q')
    {
    update_screen();
    ch = getch();
    switch (ch)
    {
    case KEY_UP:
    if (current_element > 0)
    current_element--;
    break;
    case KEY_DOWN:
    if (current_element < list.size()-1)
    current_element++;
    break;
    case '\n':
    break;
    }

    }
    endwin();

    return 0;
    }
    Bular ncurses kutubxonasidan foydalanishda dasturlash asoslari. Umumiy ncurses-ga asoslangan interfeys elementlarini yaratish uchun bir qator yordamchi kutubxonalar ham mavjud: menyular (menyular uchun), panellar (panellar yoki bir-birining ustiga chiqadigan oynalar uchun), shakllar (kirish maydonlari uchun). Ular mos ravishda manba kodiga ulangan:
    #include
    # include

    #include
    Va ular quyidagicha bog‘langan:
    $ gcc test.cpp -lmenu -lpanel -lform -lncurses
    Agar dasturingiz ekranga faqat tugmalar bosish va pozitsion chiqishni o‘qishdan ko‘ra ko‘proq kerak bo‘lsa, ulardan foydalaning.

    Yüklə 2,24 Mb.

    Dostları ilə paylaş:
  • 1   2   3   4   5   6   7   8




    Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2025
    rəhbərliyinə müraciət

    gir | qeydiyyatdan keç
        Ana səhifə


    yükləyin