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

Вызвать функцию из другой функции.Работа с мышью[Из подменю в меню. Консоль] - C++

Восстановить пароль Регистрация
 
hop_hey
1 / 1 / 1
Регистрация: 18.11.2012
Сообщений: 54
05.03.2013, 16:53     Вызвать функцию из другой функции.Работа с мышью[Из подменю в меню. Консоль] #1
Добрый день, пишу курсовую работу, у меня есть несколько функций, например:
Главное меню: Играть (пользователь заходит сюда и попадает в это меню: процедуры аля "Новая игра, рекорды и помощь."), Об авторе,Заставка.
Мне необходимо вернуться из любого пункта из меню играть обратно в главную программу. Не получается. Это черновой вариант работы, в консольном приложении, если удастся написать на консоль, то буду пытаться написать более красиво и с графикой какой-нибудь..
Если не понятна опись темы, скомпилируйте код и поймете о чем я говорю... Подскажите, может как-то по другому реализовать можно?
И еще один вопросик, можно ли найти (смотрел на msdn и по сайтам, не нашел) какую-либо процедуру что бы отслеживать позицию курсора относительно в консоли, и обработчик события для нажатия клавиши. В общем что бы навигация в меню была реализована при помощи мыши.
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
#include "stdafx.h"
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <locale>
#include <iostream>
#include <Windows.h>
    using namespace std;
void gotoxy(int x, int y)
{
  COORD Gon={x,y};
  HANDLE hwD = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleCursorPosition(hwD,Gon);
}
float recordgame(int c)
{
int mass[3][5];
int i;
cout<<"------------------------------------------------------------------------------"<<endl;
cout<<"|                          Таблица результатов                                 |"<<endl;
cout<<"------------------------------------------------------------------------------"<<endl;
cout<<"|    Имя лошади    |    Время круга    |    Лучший Круг    |    Общее время    |"<<endl;
cout<<"------------------------------------------------------------------------------"<<endl;
for (i=c;i<3;i++)
{
 
    //Реализовать ввиде структуры.
cout<<"|";
}
_getch();
return 0;
}
int help_game()
{
    system("CLS");
    gotoxy(30,0);
    setlocale(LC_ALL,"Russian");
    system("color 7");
 cout<<"Справка по игре ""Ипподром"<<endl;
 cout<<"1|Общее сведения об игре.\nИгра Представляет собой эмулятор ипподрома, в ней имеются лошади, скачющаие по так называемому полю, есть тсарт и финиш. Лошадь можно назвать любимым именем"<<endl<<endl;
 cout<<"2|Начало.\nПользователь вводит имя лошади, которое в дальнейшем отображается на экране полностью, или сокращенно. Когда начинаются гонки, лошадки ""скачут по игровому полю, изменяя свою скорость. Кто первый приходит к финишу, тот и выигрывает гонку.\n"<<endl;
 cout<<"3|Подстчет результатов и скорость скачки.\nСкорость скачки задается генератором случайных значений. Подсчет результатов ведется по финишной лашди."<<endl;
 cout<<endl<<"4|Навигация.\nНавигация осуществляется c помощью мыши стандартно - левая кнопка выбор/поддтвердить, правая отменить/назад"<<endl;
 cout<<endl<<"5|Выход в меню реализуется написанием в главном меню слова Выход"<<endl;
 return 0;
}
int gamemenu(int p)
{
    int i;
    int logo[4][38];//Ипподром
     system("color 30");
    for(p=0;p<100;p++);
    {
        cout<<logo[p];
    }
    system("CLS");
    system("color 6");
    gotoxy(30,12);
cout<<"Новая игра"<<endl;
gotoxy(30,13);
cout<<"Справка по игре"<<endl;
help_game();
gotoxy(30,14);
cout<<"Рекорды"<<endl;
//recordgame(0);
_getch();
return 0;
}
 
int menu()
{
    system("CLS");
    gotoxy(25,0);
     HANDLE parametrtext;
     parametrtext = GetStdHandle(STD_OUTPUT_HANDLE); 
     SetConsoleTextAttribute(parametrtext,FOREGROUND_GREEN|FOREGROUND_INTENSITY);
    cout<<"Пожалуйста, выберите пункт меню:";
    _getch();//system("Pause");
    gamemenu(0);
    /*1. Игра(Ссылка на игровое меню, )*/
    return 0;
 
}
 
int loadscreen(int g)
{
    int x=0, y=0;
    gotoxy(30,11);
    cout<<"Идет загрузка приложения.\n";
    gotoxy(30,12);
    cout<<"\tПожалуйста, подождите.\n";
    gotoxy(30,13);
    setlocale( LC_ALL, "C" );
     HANDLE parametrtext;
     parametrtext = GetStdHandle(STD_OUTPUT_HANDLE); 
     SetConsoleTextAttribute(parametrtext,FOREGROUND_BLUE|FOREGROUND_INTENSITY);
    for (g=0;g<25;g++)
    {
     cout<<(char)177;
     Sleep(150);    
    }
    cout<<"\n";
    setlocale(LC_ALL,"Russian");
    gotoxy(20,20);
    system("color 2");
    cout<<"Приложение загружено. Для входа нажмите Enter";//system("PAUSE");
    _getch();
    menu();
        return 0;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    loadscreen(0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 16:53     Вызвать функцию из другой функции.Работа с мышью[Из подменю в меню. Консоль]
Посмотрите здесь:

C++ как вызвать Main из другой функции???
C++ Как вызвать из 1 функции параметры другой?
Возникла необходимость в основном коде вызвать функцию и чтобы код продолжал выполнение, НЕ ДОЖИДАЯСЬ окончания работы этой функции C++
C++ Как вызвать функцию из функции main?
C++ Указатель на функцию в вызове другой функции
Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? C++
C++ Главное меню с подменю и поиск
Можно ли передать указатель на функцию как параметр другой функции? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fair7
8 / 8 / 0
Регистрация: 31.12.2010
Сообщений: 81
04.06.2014, 00:05     Вызвать функцию из другой функции.Работа с мышью[Из подменю в меню. Консоль] #2
где-то в интернете такой исходник нашёл
C++ (Qt)
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
118
#include <windows.h>
#include <iostream>
using namespace std;
 
int main()
{
    HANDLE hIn;
    HANDLE hOut;
    COORD MouseWhere  = {19, 0};
    COORD DClickWhere = {19, 1};
    COORD LeftWhere   = {19, 2};
    COORD RightWhere  = {19, 3};
    COORD WheelWhere  = {19, 4};
    COORD LoopWhere   = {0, 5};
    COORD EndWhere    = {0, 6};
    bool Continue = TRUE;
    DWORD EventCount;
    int LoopCount = 0;
    int KeyEvents = 0;
    INPUT_RECORD InRec;
    DWORD NumRead;
 
    hIn = GetStdHandle(STD_INPUT_HANDLE);
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
 
    cout << "Mouse is at     : " << endl;
    cout << "Double Click at : " << endl;
    cout << "Left button is  :  Up" << endl;
    cout << "Right button is :  Up" << endl;
    cout << "Wheel scrolled  : " << flush;
 
    while (Continue)
    {
        SetConsoleCursorPosition(hOut,
                                 LoopWhere);
        cout << LoopCount++ << "         " << flush;
        Sleep(10); // To slow it down!!
 
        GetNumberOfConsoleInputEvents(hIn,
                                      &EventCount);
        while (EventCount > 0)
        {
            ReadConsoleInput(hIn,
                             &InRec,
                             1,
                             &NumRead);
 
            if (InRec.EventType == KEY_EVENT)
            {
                if (InRec.Event.KeyEvent.uChar.AsciiChar == 'x')
                {
                            SetConsoleCursorPosition(hOut,
                                                     EndWhere);
                            cout << "Exiting..." << endl;
                            Continue = FALSE;
                }
            }
            else if (InRec.EventType == MOUSE_EVENT)
            {
                if (InRec.Event.MouseEvent.dwEventFlags == 0)
                {
                    SetConsoleCursorPosition(hOut,
                                             LeftWhere);
                    if (InRec.Event.MouseEvent.dwButtonState & 0x01)
                    {
                        cout << "Down" << flush;
                    }
                    else
                    {
                        cout << "Up  " << flush;
                    }
                    SetConsoleCursorPosition(hOut,
                                             RightWhere);
                    if (InRec.Event.MouseEvent.dwButtonState & 0x02)
                    {
                        cout << "Down" << flush;
                    }
                    else
                    {
                        cout << "Up  " << flush;
                    }
                }
                else if (InRec.Event.MouseEvent.dwEventFlags == MOUSE_MOVED)
                {
                    SetConsoleCursorPosition(hOut,
                                             MouseWhere);
                    cout << InRec.Event.MouseEvent.dwMousePosition.X << "," <<
                            InRec.Event.MouseEvent.dwMousePosition.Y << "  " << flush;
                }
                else if (InRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
                {
                    SetConsoleCursorPosition(hOut,
                                             DClickWhere);
                    cout << InRec.Event.MouseEvent.dwMousePosition.X << "," <<
                            InRec.Event.MouseEvent.dwMousePosition.Y << "  " << flush;
                }
                else if (InRec.Event.MouseEvent.dwEventFlags == MOUSE_WHEELED)
                {
                    SetConsoleCursorPosition(hOut,
                                             WheelWhere);
                    if (InRec.Event.MouseEvent.dwButtonState & 0xFF000000)
                    {
                        cout << "Down" << flush;
                    }
                    else
                    {
                        cout << "Up  " << flush;
                    }
                }
            }
 
            GetNumberOfConsoleInputEvents(hIn,
                                          &EventCount);
        }
    }
 
    return 0;
}
Добавлено через 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <windows.h>
#include <stdio.h>
 
VOID ErrorExit(LPSTR);
VOID KeyEventProc(KEY_EVENT_RECORD); 
VOID MouseEventProc(MOUSE_EVENT_RECORD); 
VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD); 
 
int main(VOID) 
{ 
    HANDLE hStdin; 
    DWORD cNumRead, fdwMode, fdwSaveOldMode, i; 
    INPUT_RECORD irInBuf[128]; 
    int counter=0;
 
    // Get the standard input handle. 
 
    hStdin = GetStdHandle(STD_INPUT_HANDLE); 
    if (hStdin == INVALID_HANDLE_VALUE) 
        ErrorExit(TEXT("GetStdHandle")); 
 
    // Save the current input mode, to be restored on exit. 
 
    if (! GetConsoleMode(hStdin, &fdwSaveOldMode) ) 
        ErrorExit(TEXT("GetConsoleMode")); 
 
    // Enable the window and mouse input events. 
 
    fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT; 
    if (! SetConsoleMode(hStdin, fdwMode) ) 
        ErrorExit(TEXT("SetConsoleMode")); 
 
    // Loop to read and handle the input events. 
 
    while (counter++ <= 100) 
    { 
        // Wait for the events. 
 
        if (! ReadConsoleInput( 
                hStdin,      // input buffer handle 
                irInBuf,     // buffer to read into 
                128,         // size of read buffer 
                &cNumRead) ) // number of records read 
            ErrorExit(TEXT("ReadConsoleInput")); 
 
        // Dispatch the events to the appropriate handler. 
 
        for (i = 0; i < cNumRead; i++) 
        {
            switch(irInBuf[i].EventType) 
            { 
                case KEY_EVENT: // keyboard input 
                    KeyEventProc(irInBuf[i].Event.KeyEvent); 
                    break; 
 
                case MOUSE_EVENT: // mouse input 
                    MouseEventProc(irInBuf[i].Event.MouseEvent); 
                    break; 
 
                case WINDOW_BUFFER_SIZE_EVENT: // scrn buf. resizing 
                    ResizeEventProc( 
                        irInBuf[i].Event.WindowBufferSizeEvent); 
                    break; 
 
                case FOCUS_EVENT:  // disregard focus events 
 
                case MENU_EVENT:   // disregard menu events 
                    break; 
 
                default: 
                    ErrorExit(TEXT("Unknown event type")); 
                    break; 
            } 
        }
    } 
 
    return 0; 
}
 
VOID ErrorExit (LPSTR lpszMessage) 
{ 
    fprintf(stderr, "%s\n", lpszMessage); 
    ExitProcess(0); 
}
 
VOID KeyEventProc(KEY_EVENT_RECORD ker)
{
    printf("Key event: ");
 
    if(ker.bKeyDown)
        printf("key pressed\n");
    else printf("key released\n");
}
 
VOID MouseEventProc(MOUSE_EVENT_RECORD mer)
{
#ifndef MOUSE_HWHEELED
#define MOUSE_HWHEELED 0x0008
#endif
    printf("Mouse event: ");
    
    switch(mer.dwEventFlags)
    {
        case 0:
            printf("button press\n");
            break;
        case DOUBLE_CLICK:
            printf("double click\n");
            break;
        case MOUSE_HWHEELED:
            printf("horizontal mouse wheel\n");
            break;
        case MOUSE_MOVED:
            printf("mouse moved\n");
            break;
        case MOUSE_WHEELED:
            printf("vertical mouse wheel\n");
            break;
        default:
            printf("unknown\n");
            break;
    }
}
 
VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD wbsr)
{
    printf("Resize event\n");
}
Добавлено через 4 минуты
ещё один по КюТе
C++ (Qt)
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
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    HANDLE hStdin; 
    DWORD cNumRead, fdwMode, fdwSaveOldMode, i; 
    INPUT_RECORD irInBuf[128];
    hStdin = GetStdHandle(STD_INPUT_HANDLE); 
    GetConsoleMode(hStdin, &fdwSaveOldMode)  ;     
    fdwMode = fdwSaveOldMode & ENABLE_MOUSE_INPUT; 
    SetConsoleMode(hStdin, fdwMode)  ;    
    while (1) 
    {  
        ReadConsoleInput(  hStdin,   irInBuf,  250,    &cNumRead) ;   
        for (i = 0; i < cNumRead; i++) 
        {
            if (irInBuf[i].EventType==MOUSE_EVENT) 
            {                    
                switch (irInBuf[i].Event.MouseEvent.dwEventFlags)
                {
                case MOUSE_MOVED: cout<<"Moved";
                    break;
                case DOUBLE_CLICK: cout<<"Double Click";
                    break;
                case MOUSE_WHEELED: cout<<"Wheel";
                    break;
                default: cout<<"Click (pressed or released)";
                    break;              
                }
                printf(" (X=%d, Y=%d)\n",  irInBuf[i].Event.MouseEvent.dwMousePosition.X,irInBuf[i].Event.MouseEvent.dwMousePosition.Y);
             }
        } 
    }
 
    return 0; 
}
Добавлено через 44 секунды
более толкового у меня к сожалению нету

Добавлено через 2 минуты
те что под Qt в Borland-е выдаёт такое сообщение
.drectve `-aligncomm:"___hexdig_D2A",5' unrecognized
Добавлено через 14 минут
может быть ответ будет вот здесь
HTML5
1
http://www.cyberforum.ru/c-beginners/thread561098.html
Yandex
Объявления
04.06.2014, 00:05     Вызвать функцию из другой функции.Работа с мышью[Из подменю в меню. Консоль]
Ответ Создать тему
Опции темы

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