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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
#1

Мышь откидывает в левый угол(windows.h) - C++

23.05.2011, 01:52. Просмотров 1158. Ответов 4
Метки нет (Все метки)

Привет!

Пишу курсовик и столкнулся с проблемкой. В общем делаю меню. Все вроде бы работает идеально. Есть одна проблема. Когда я вызываю функцию MakeVerticalMenu(int pos); курсов(в смысле саму мышь) откидывает в левый верхний угол экрана. При чем не в самый угол, а прижимает к левой стенке, но чуть ниже верхней границы.

Код привожу весь.
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
void Header();
 
void KeyEventProc(KEY_EVENT_RECORD ker);
void MouseEventProc(MOUSE_EVENT_RECORD mer);
void SetPosCursor(int x, int y);
void MakeHorizontalMenu(int pos);
void MakeVerticalMenu(int pos);
 
HANDLE hStdin,
    hStdout,
    hStderror; 
 
int main(void) {
 
    Header();
    
    return 0;
 
}
 
 
 
void SetPosCursor(int x, int y) {
    COORD xy;
    xy.X = x;
    xy.Y = y;
    SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    SetConsoleCursorPosition(hStdout, xy);
 
}
 
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 != 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);
            } else {    
                if(xy.X <= 18) {
                    SetPosCursor(20,20);
                    printf("Menu select #1          ");
                    MakeHorizontalMenu(0);
                    
                    MakeVerticalMenu(0);
                    MakeVerticalMenu(1);
                }
                if(xy.X > 18 && xy.X < 29) {
                    SetPosCursor(20, 20);
                    printf("Menu select #2          ");
                    MakeHorizontalMenu(1);
 
                    MakeVerticalMenu(0);
                    MakeVerticalMenu(2);
                }
                if(xy.X >=77 && xy.X < 80) {
                    MakeHorizontalMenu(2);
                    SetPosCursor(20, 20);
                    printf("Exit        / Press any key!");
                    _getch();
                    exit(1488);
 
                }
 
            }
        }
    }
}
 
void KeyEventProc(KEY_EVENT_RECORD ker) {
 
    char ch = ker.uChar.AsciiChar;
    SetPosCursor(20, 20);
 
    switch(ch) {
    case 'q':
        exit(1488);
    }
}
 
void MakeHorizontalMenu(int menu_selected) {
    CHAR *names[] = {"Initialization    ", "Testing    ", "\t\t\t\t\t\t     [x]"};
    SetPosCursor(0, 0);
    for(int i = 0; i < 3; i++) {
        if(i == menu_selected) 
            SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_INTENSITY);
        if(i != menu_selected)
            SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        cout << names[i];
    }
    
}
 
void MakeVerticalMenu(int menu_selected) {
    
    if(menu_selected == 0) {
        int i = 0;
        while(i != 5) {
            SetCursorPos(0, i); printf("\t\t\t\t\t\n");
            i++;
        }
        SetCursorPos(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];
        }
    }
 
    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];
        }
    }
        
}
 
 
void Header() {
 
    DWORD dwNewMode, dwOldMode, dw;
    INPUT_RECORD InRec;
    SetConsoleTitle(L"KURSOVIK #1");
    hStdin = GetStdHandle(STD_INPUT_HANDLE);
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
 
    MakeHorizontalMenu(4);
 
    GetConsoleMode(hStdin, &dwOldMode);
    dwNewMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
    SetConsoleMode(hStdin, dwNewMode);
    while(true) {
        ReadConsoleInput(hStdin, &InRec, 1, &dw);
        switch(InRec.EventType) {
        case KEY_EVENT:
            KeyEventProc(InRec.Event.KeyEvent);
            break;
        case MOUSE_EVENT:
            MouseEventProc(InRec.Event.MouseEvent);
            break;
        }
    }
    SetConsoleMode(hStdin, dwOldMode);
 
}
Добавлено через 13 секунд
Как решить проблему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 01:52     Мышь откидывает в левый угол(windows.h)
Посмотрите здесь:

Переместить самый максимальный элемент массива в левый верхний угол - C++
Облазил кучу тем, но везде идет перестановка столбцов и строк, но это не то. Пожалуйста помогите, как сделать чтобы самый максимальный...

Переставляя строки и столбцы матрицы, перенести ее минимальный элемент в левый верхний угол - C++
Тема: Функции2. 9. Пусть дано матрицу nxm, заполненную псевдослучайными числами в заданном диапазоне. Переставляя строки и столбцы,...

Нарисовать прямоугольник, чтобы верхний левый угол был расположен в заданной точке - C++
Help!!!! Нужно нарисовать прямоугольник, чтобы верхний левый угол был расположен в точке (50;50), а правый нижний - в точке (100;100).

Путём перестановки элементов матрицы поместить её максимальный элемент в левый верхний угол - C++
Помогите пожалуйста бездарю( дана целочисленная квадратная матрица размером 4х4 написать программу, содержащую функцию, которая путём...

Левый и правый двоичный поиск - C++
Помогите, пожалуйста, не проходит 1 тест, не понимаю из-за чего :( Дано два списка чисел, числа в первом списке упорядочены по...

Левый операнд должен быть левосторонним значением - C++
Пролистал форум, не смог найти ответа. #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; int main () { double...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Digit@ll
Brainsbreaker
881 / 359 / 30
Регистрация: 01.02.2011
Сообщений: 1,572
23.05.2011, 05:38     Мышь откидывает в левый угол(windows.h) #2
Ну вот же, черным по белому:
C++
1
2
3
4
5
6
7
8
9
10
void MakeVerticalMenu(int menu_selected) {
        
        if(menu_selected == 0) {
                int i = 0;
                while(i != 5) {
                        SetCursorPos(0, i); printf("\t\t\t\t\t\n");
                        i++;
                }
                SetCursorPos(0, 1);
        }
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
23.05.2011, 21:19  [ТС]     Мышь откидывает в левый угол(windows.h) #3
Не вот же черным по белому... А тыкните мордой, ибо если бы я видел в чем проблема, иначе я бы уже давно бы решил ее, ага?
Спасибо за подсказку, решил проблему еще днем.

SetPosCursor и SetCursorPos(моя функция) оказывается разные вещи. Просто перепутал вот и все, а не черным по белому.
Проблема решена.
Digit@ll
Brainsbreaker
881 / 359 / 30
Регистрация: 01.02.2011
Сообщений: 1,572
23.05.2011, 22:43     Мышь откидывает в левый угол(windows.h) #4
VladSharikov, не психуй , человеку свойственно ошибаться.
SetCursorPos не твоя функция, и предназначена она не для окна, а для экрана. Все зависит от того, как ты хочешь реализовать свое меню.
Я ж не виноват, что больше никто не ответил...(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2011, 00:09     Мышь откидывает в левый угол(windows.h)
Еще ссылки по теме:

Левый операнд должен быть левосторонним значением - C++
выдает ошибку : 1&gt;c:\users\dandel1onka\documents\visual studio...

Ошибка: левый операнд должен быть левосторонним - C++
Имеется задача: печатать числа от 1 до 20, через каждое 5-ое число переходить на новую строку. #include &lt;iostream&gt; #include &lt;locale.h&gt; ...

Вывести левый треугольник/трапецию квадратной матрицы - C++
Нужно вывести с помощью перебора в цикле, левый треугольник или трапецию квадратной матрицы, с его границами

левый операнд-должен быть левосторонним значением - C++
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Xнач. до Xкон. с шагом dX. #include &lt;cstdio&gt; #include...

Совершить в бинарном дереве обход Правый - Корень - Левый - C++
Нужно совершить обход Правый корень левый в бинарном дереве. #include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; #include &quot;conio.h&quot; #include...

Ошибка: Левый операнд должен быть левосторонним значением - C++
int MenuMain() { int count = 3; char ** list = new char * ; list = new char = Rus(&quot;Провести распознавание&quot;); list = new...


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

Или воспользуйтесь поиском по форуму:
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
24.05.2011, 00:09  [ТС]     Мышь откидывает в левый угол(windows.h) #5
Да я не психую. Просто вы, уважаемый, попытались, как мне показалось, ткнуть меня в дерьмо.
Наверняка, если бы все было понятно, я бы не писал.
А за ответ спасибо.
Yandex
Объявления
24.05.2011, 00:09     Мышь откидывает в левый угол(windows.h)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru