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

Глобальная переменная(не пойму как точно сделать) - C++

Восстановить пароль Регистрация
 
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
25.05.2011, 23:55     Глобальная переменная(не пойму как точно сделать) #1
Привет.. Делаю менюшку... Ну как в .... Блокноте "Файл, Правка, Справка".
Меню выпадающее, тоесть нажимаем на файл - там открыть, закрыть, удалить(например-например).
Правка - стереть, выделить все.
дак вот... нужно чтобы когда я нажал на меню Файл, выпадала менюшка, в этой менюшке я мог нажать какую-то еще ссылочку. Тоже самое с правкой.

Все в общем то нормально, сделал функцию в которой считывается позиция, если например X < 19, Y = 1(что соответствует меню Файл - Открыть), если X<19, Y = 2(Файл-Закрыть).
Все хорошо, когда нажимаю меню и на ссылку Открыть запускается программа "открыть", но когда я не нажимаю на файл, а просто жму в поле X<19, Y = 1 также запускается программа открыть, хотя так быть не должно.

Вообще все понятно, я указал поля и когда в них попадет мышка и кликнет туда запустится программа.
Поэтому я решил сделать дополнительную глобальную переменную static int return_code = -1. Когда вызывается функция создания вертикального меню(то есть когда нажимаю на файл или правка) return_code становится 1 или 2. И значится(я выше писал у меня размечены поля) в коде я написал если return_code = 1, то дальше размечаю поля для "Файл", если ретурн код = 2, то размечаю поля для "Правка".

Все круто в теории. На практике нихера не получается. Я нажимаю Файл ретурн становится 1, нажимаю на "Открыть" ретурн становится -1, программа не запускается.
как решить проблему, уважаемый?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2011, 23:55     Глобальная переменная(не пойму как точно сделать)
Посмотрите здесь:

C++ Глобальная переменная
C++ Глобальная переменная
Глобальная переменная C++
C++ Динамический массив как глобальная переменная
C++ глобальная переменная не хочет быть глобальной
глобальная переменная из другой dll C++
C++ Глобальная переменная
C++ Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grrrrr
25.05.2011, 23:59
  #2

Не по теме:

уважаемый, из Вашего набора слов ничего не понятно, ну или понятно, но только вам.

VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
26.05.2011, 00:22  [ТС]     Глобальная переменная(не пойму как точно сделать) #3
А вам нужно расписать как для малолетних детей?

Вы почитайте с включенной головой, поди поможет, как написать это проще я не представляю.

Добавлено через 13 минут
Для grrr и кто не в состоянии прочитать. Копия первого сообщения, но теперь с тегами B.

Всем привет.
Делаю курсовик. Часть написание курсовика это создание меню. Меню должно быть выпадающим, то есть когда нажмем на какой-либо пункт выпадет еще одно меню.

Как я все это реализовал?
Есть функция MakeVertMenu в которую мы передадим какой-то параметр. Например для меню Файл этот параметр 1, а для Правка параметр 2. Внутри функции в зависимости от параметра(1 или 2) я вывожу или пункты меню для Файла или для меню Правка.

Как собственно работает это все?
Я разметил поля, то есть для того чтобы запустить программу Файл-Открыть нужно кликнуть в поле X < 10, Y = 1, чтобы запустить программу Файл-Закрыть нужно нажать в поле X<10, Y=2.

Проблема
Все в общем-то хорошо, когда я нажимаю на файл, выпадает меню. Когда нажимаю на Файл-Открыть запускается нужная программа. Проблема в чем? Когда меню Файл закрыто и я нажму в поле X<10, y = 2 или x<10, y = 1, программа тоже запустится. Вообще так и должно быть, я разметил поля и когда нажимаю на них запускаются программы.

Как пытался эту проблему решить?
Я сделал глобальную переменную static int return_code = -1; Когда мы нажимаем на файл (то есть вызываем MakeVertMenu(1)), return_code становится 1, а когда на Правка(MakeVertMenu(2)) retun_code станет 2. В коде(там где размечены поля) я написал условия. Если return_code = 1, то разметить поля так. Если return_code = 2, разметить так. В конце этих условиях строка return_code = -1;

В теории все в порядке. На практике ничего не выходит.
Когда нажимаю на Файл return_code становится 1, а после, когда нажимаю на Файл-Открыть программа не запускается, а return_code становится -1 и все.

Выручайте, уважаемые.

Код в студию.
Считываем позицию мыши и размечаем поля:
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
void MouseEventProc(MOUSE_EVENT_RECORD mer) {
    COORD xy;
    switch(mer.dwEventFlags) {
    case 0:
        if(mer.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) {
            xy.X = mer.dwMousePosition.X;
            xy.Y = mer.dwMousePosition.Y;
            if(xy.Y == 1 && xy.X <= 18) {
                SetConsoleCursorPosition(hStdout, xy);
                SetPosCursor(20, 20);
                printf("Vertical Menu Selected # 1");
            }
            if(xy.Y != 0) {
                SetConsoleCursorPosition(hStdout, xy);
                SetPosCursor(20,20);
                printf("                ");
                SetPosCursor(20,20);
                printf(" x = %d     y = %d", xy.X, xy.Y);
                SetPosCursor(0, 1);
                MakeHorizontalMenu(4);
                MakeVerticalMenu(0);
                return_code = -1;
            }
 
/////////////////////////////////// Первое вертикальное меню ///////////////////////////////////
                if(xy.X <= 18 && xy.Y == 0) {
                    SetPosCursor(20,20);
                    printf("Menu select #1          ");
                    MakeHorizontalMenu(0);
                    
                    MakeVerticalMenu(0);
                    MakeVerticalMenu(1);
 
                }
 
                if(return_code == 1) {
                    if(xy.X <= 18 && xy.Y == 1) {
                        SetPosCursor(20,20);
                        printf("Vertical menu select #1         ");
                        MakeHorizontalMenu(0);
                    }
 
                    if(xy.X <= 18 && xy.Y == 2) {
                        SetPosCursor(20,20);
                        printf("Vertical menu select #2         ");
                        MakeHorizontalMenu(0);
                    }
                                        return_code = -1;
                }
/////////////////////////////////// Конец первого вертикального меню ///////////////////////////////////
 
/////////////////////////////////// Второе вертикальное меню ///////////////////////////////////
                if(xy.X > 18 && xy.X < 29 && xy.Y == 0) {
                    SetPosCursor(20, 20);
                    printf("Menu select #2          ");
                    MakeHorizontalMenu(1);
 
                    MakeVerticalMenu(0);
                    MakeVerticalMenu(2);
 
                }
                
                if(return_code == 2) {
 
                    if(xy.X > 18 && xy.X < 29 && xy.Y == 1) {
                        SetPosCursor(20, 20);
                        printf("Vertical Menu 2 select #1           ");
                        MakeHorizontalMenu(1); 
                    }
 
                    if(xy.X > 18 && xy.X < 29 && xy.Y == 2) {
                        SetPosCursor(20, 20);
                        printf("Vertical Menu 2 select #2           ");
                        MakeHorizontalMenu(1);
                    }
 
                    if(xy.X > 18 && xy.X < 29 && xy.Y == 3) {
                        SetPosCursor(20, 20);
                        printf("Vertical Menu 2 select #3           ");
                        MakeHorizontalMenu(1);
                    }
 
                    if(xy.X > 18 && xy.X < 29 && xy.Y == 4) {
                        SetPosCursor(20, 20);
                        printf("Vertical Menu 2 select #4           ");
                        MakeHorizontalMenu(1);
                    }
                                        return_code = -1;
                }
/////////////////////////////////// Конец второго вертикального меню ///////////////////////////////////
 
                if(xy.X >=77 && xy.X < 80 && xy.Y == 0) {
                    MakeHorizontalMenu(2);
                    SetPosCursor(20, 20);
                    printf("Exit        / Press any key!");
                    _getch();
                    exit(1488);
                }
        }
    }
    SetPosCursor(20, 22);
    cout << return_code << "    ";
}
Функция MakeVertMenu для создания вертикального меню.
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
void MakeVerticalMenu(int menu_selected) {
    
    if(menu_selected == 0) {
        int i = 0;
        while(i != 5) {
            SetPosCursor(0, 1+i); printf("\t\t\t\t\t\n");
            i++;
        }
        SetPosCursor(0, 1);
 
    }
 
    if(menu_selected == 1) {
        CHAR *names[] = {"Element count   ", "Default values  "};
 
        for(int i = 0; i < 2; i++) {
            if(i == menu_selected)
                SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_INTENSITY);
            if(i != menu_selected)
                SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
            SetPosCursor(0, i+1);
            cout << names[i];
        }
 
        return_code = 1;
    }
 
    if(menu_selected == 2) {
        CHAR *names[] = {"Base class    ", "String ident  ",
                        "Self class    ", "Operands      "};
 
        for(int i = 0; i < 4; i++) {
            SetPosCursor(18, i+1);
            cout << names[i];
        }
        return_code = 2;
    }
        
}
Yandex
Объявления
26.05.2011, 00:22     Глобальная переменная(не пойму как точно сделать)
Ответ Создать тему
Опции темы

Текущее время: 18:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru