Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

23.05.2011, 01:52. Просмотров 1179. Ответов 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 секунд
Как решить проблему?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 01:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Мышь откидывает в левый угол(windows.h) (C++):

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

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

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

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

Как обнулить левый угол в хроме - HTML, CSS
Такая проблема, Есть код &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt; ...

Форма не устанавливается в левый верхний угол - C#
Почему при запуске форма каждый раз появляется в новом месте? using System; using System.Windows.Forms; using System.Drawing; ...

4
Digit@ll
Brainsbreaker
884 / 362 / 31
Регистрация: 01.02.2011
Сообщений: 1,586
23.05.2011, 05:38 #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);
        }
1
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
23.05.2011, 21:19  [ТС] #3
Не вот же черным по белому... А тыкните мордой, ибо если бы я видел в чем проблема, иначе я бы уже давно бы решил ее, ага?
Спасибо за подсказку, решил проблему еще днем.

SetPosCursor и SetCursorPos(моя функция) оказывается разные вещи. Просто перепутал вот и все, а не черным по белому.
Проблема решена.
0
Digit@ll
Brainsbreaker
884 / 362 / 31
Регистрация: 01.02.2011
Сообщений: 1,586
23.05.2011, 22:43 #4
VladSharikov, не психуй , человеку свойственно ошибаться.
SetCursorPos не твоя функция, и предназначена она не для окна, а для экрана. Все зависит от того, как ты хочешь реализовать свое меню.
Я ж не виноват, что больше никто не ответил...(
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
24.05.2011, 00:09  [ТС] #5
Да я не психую. Просто вы, уважаемый, попытались, как мне показалось, ткнуть меня в дерьмо.
Наверняка, если бы все было понятно, я бы не писал.
А за ответ спасибо.
0
24.05.2011, 00:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2011, 00:09
Привет! Вот еще темы с ответами:

Левый нижний угол монитора размытый... - Видеокарты
вобщем хотел повысить ФПС в контре до 100,нашел ссылку в нете на драйвер установил его,после етого в левой часте монитора чат в КСе и...

PyQt5 Размещение QGridLayout со сдвигом в левый верхний угол - Python
Подскажите, при размещении виджетов на сетке они заполняют весь родительский виджет. Как-то так: Как настроить сетку, чтоб...

Почему блок ушел в верхний левый угол? - HTML, CSS
Почему этот блочный элемент ушел в верхний левый угол? Вот код html. Скриншот странцы ниже &lt;body&gt; &lt;header class=&quot;site-header&quot;...

Установка консоли в верхний левый угол экрана - C++ WinAPI
Как установить консоль на позицию верхнего левого угла экрана ?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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