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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
23.05.2011, 01:52     Мышь откидывает в левый угол(windows.h) #1
Привет!

Пишу курсовик и столкнулся с проблемкой. В общем делаю меню. Все вроде бы работает идеально. Есть одна проблема. Когда я вызываю функцию 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 секунд
Как решить проблему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Digit@ll
Brainsbreaker
 Аватар для Digit@ll
832 / 343 / 27
Регистрация: 01.02.2011
Сообщений: 1,483
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
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
23.05.2011, 21:19  [ТС]     Мышь откидывает в левый угол(windows.h) #3
Не вот же черным по белому... А тыкните мордой, ибо если бы я видел в чем проблема, иначе я бы уже давно бы решил ее, ага?
Спасибо за подсказку, решил проблему еще днем.

SetPosCursor и SetCursorPos(моя функция) оказывается разные вещи. Просто перепутал вот и все, а не черным по белому.
Проблема решена.
Digit@ll
Brainsbreaker
 Аватар для Digit@ll
832 / 343 / 27
Регистрация: 01.02.2011
Сообщений: 1,483
23.05.2011, 22:43     Мышь откидывает в левый угол(windows.h) #4
VladSharikov, не психуй , человеку свойственно ошибаться.
SetCursorPos не твоя функция, и предназначена она не для окна, а для экрана. Все зависит от того, как ты хочешь реализовать свое меню.
Я ж не виноват, что больше никто не ответил...(
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
24.05.2011, 00:09  [ТС]     Мышь откидывает в левый угол(windows.h) #5
Да я не психую. Просто вы, уважаемый, попытались, как мне показалось, ткнуть меня в дерьмо.
Наверняка, если бы все было понятно, я бы не писал.
А за ответ спасибо.
Yandex
Объявления
24.05.2011, 00:09     Мышь откидывает в левый угол(windows.h)
Ответ Создать тему
Опции темы

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