Форум программистов, компьютерный форум CyberForum.ru

Меню в консоли - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив и матрица http://www.cyberforum.ru/cpp-beginners/thread223810.html
Дано матрицу целых чисел А (n * n). Определить является ли она симметричной относительно главной диагонали. Дан массив слов. Получить слово из последних букв всех слов массива слов P.S У мня екзамен помогите срочно нужно
C++ Составить описание класса для объектов-векторов пожалуйста кто может помочь сейчас, буду очень признателен. Составить описание класса для объектов-векторов, задаваемых кординатами концов в трёхмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами. Написать программу,... http://www.cyberforum.ru/cpp-beginners/thread223807.html
C++ Сортировка строк
#include "stdafx.h" #include "string.h" int _tmain(int argc, _TCHAR* argv) { char s,s1,s2; int i,j,l,k=0,a1,a2; printf ("Vvedite stroku\n"); gets(s);
C++ 'const char[i]' to 'char[j]'
Привет всем. Усердно изучаю плюсы по Стивену Пратта. В ходе изучения возник вопрос, который в книге не освящён. #include <iostream> using namespace std; struct bob { char name; }; int main() {
C++ Упорядочивание матрицы http://www.cyberforum.ru/cpp-beginners/thread223774.html
Ввести с клавиатуры квадратную матрицу из целых чисел размером M X M (M также вводится с клавиатуры). Ввести число K (1<=K<=M). K-ую по счету (считая от 1 до M) строку матрицы упорядочить по убыванию. После этого найти наибольший по модулю из элементов, лежащих на главной диагонали.
C++ Попытка чтения или записи в защищенную память Добрый вечер. Собственно возникает такая ошибка: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена. Происходит это при очередном вызове метода QLength() класса Clerk. #include<cstdio> #include<cstdlib> #include<ctime> #include<cmath> using namespace std; #include"list.h" int M = 3; int MAX_CLIENT = 6; int entered = 0; подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
02.09.2011, 23:45     Меню в консоли
Вот меню накидал, только для Windows.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <windows.h>
#include <shellapi.h>
#define  FOCUS_COLOR  10u   // цвет текста при фокусе комманды меню
#define  STATE_COLOR  14u   // цвет не выделенных комманд меню
#define  MENU_POS_X   14    // начальная позиция меню по-X
#define  MENU_POS_Y   2     // начальная позиция меню по-Y
 
CONSOLE_SCREEN_BUFFER_INFO    ginfo;
HANDLE   gout;
 
char* conv_cp(const char* str, char* buf);
void  additem(const char*  str, WORD color, short& top);
void  set_cursor(char ch, WORD color, WORD focus, short cursor);
void  run_command(short cursor);
void  navigate(short& cursor, short size, short num);
 
 
int  main(void) {
 
     char buf[255];
     CONSOLE_CURSOR_INFO  icur;
     short  posY   = MENU_POS_Y;
     short  cursor = MENU_POS_Y;
 
     gout = GetStdHandle(STD_OUTPUT_HANDLE);
 
     ZeroMemory(&ginfo, sizeof(CONSOLE_SCREEN_BUFFER_INFO));
     GetConsoleScreenBufferInfo(gout, &ginfo);
 
     icur.bVisible = FALSE;
     icur.dwSize   = 1u;
     SetConsoleCursorInfo(gout, &icur);  // убрать курсор из консоля
 
     // строим список комманд меню
     additem(conv_cp("Показать Мой компьютер", buf), STATE_COLOR, posY);
     additem(conv_cp("Запустить калькулятор", buf), STATE_COLOR, posY);
     additem(conv_cp("Открыть страничку www.cyberforum.ru", buf), STATE_COLOR, posY);
     additem(conv_cp("Отправить e-mail", buf), STATE_COLOR, posY);
     additem(conv_cp("Закрыть консоль", buf), STATE_COLOR, posY);
 
     conv_cp("Навигация по меню клавиши вверх и вниз, enter.", buf);
     WriteConsoleA(gout, buf, strlen(buf), &icur.dwSize, NULL); 
 
     set_cursor('>', 12u, FOCUS_COLOR, cursor);
     while(1) {
            if(GetAsyncKeyState(VK_DOWN))   // переместиться вниз
                   navigate(cursor, posY, 1);
 
            if(GetAsyncKeyState(VK_UP))  // переместиться вверх
                   navigate(cursor, posY,-1);
            if(GetAsyncKeyState(VK_RETURN))  // на клавишу Enter исполняются комманды
                  run_command(cursor);
     }
     return 0;
}
 
 
// конвертирование в родную консольную кодировку OEM
char*  conv_cp(const char* str, char* buf) {
    CharToOemA(str, buf);
    return buf;
}; 
 
// добавить комманду в меню
void  additem(const char*  str, WORD color, short& top) {
    DWORD dw  = 0u;
    COORD pos  = { MENU_POS_X, top };
 
    WriteConsoleOutputCharacterA(gout, str, strlen(str), pos, &dw);
    for(; *str; *str++, pos.X++ ) 
          WriteConsoleOutputAttribute(gout, &color, 1, pos, &dw);
    top++;
}
 
// ролловеры - эфекты 
void  set_cursor(char ch, WORD color, WORD focus, short cursor) {
    DWORD dw  = 0u;
    COORD pos = { MENU_POS_X - 1, cursor };
    FillConsoleOutputCharacterA(gout, ch,    1u, pos, &dw);
    FillConsoleOutputAttribute(gout, color, 1u, pos, &dw);
    pos.X++;
    FillConsoleOutputAttribute(gout, focus, 64u, pos, NULL);
}
 
// список комманд - меню
void  run_command(short cursor) {
    switch(cursor - MENU_POS_Y) {
            case 0:  
        WinExec("explorer.exe", SW_SHOWDEFAULT);
        break;
    case 1:  
        WinExec("calc.exe", SW_SHOW);
        break;
    case 2:  
                         ShellExecuteA(GetForegroundWindow(), "open", 
        "http://www.cyberforum.ru/", "", "", SW_SHOWDEFAULT);
        break;
    case 3: 
                         ShellExecuteA(GetForegroundWindow(), "open", 
        "mailto:example@mail.ru?subject=Привет от xAtom !", "", "", SW_SHOWDEFAULT);
        break;
    case 4:  
                         TerminateProcess(GetCurrentProcess(), 0u);
        break;
    }
    Sleep(400u);
}
 
// навигация по списку меню
void  navigate(short& cursor, short size, short num) {
   if(cursor <= MENU_POS_Y && num < 0 || cursor >= size - 1 && num > 0)
         return;
   set_cursor(' ', 12u, STATE_COLOR, cursor);
   cursor += num;
   set_cursor('>', 12u, FOCUS_COLOR, cursor);
   Sleep(400u);
}
Внизу скриншотик.
Миниатюры
Меню в консоли  
 
Текущее время: 22:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru