|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Мышь в С++ в консольном приложении в текстовом режиме |
|
C/C++ - Мышь в С++ в консольном приложении в текстовом режиме
|
Новый участник Сообщения: 38 |
Возможно ли такое? И как это организовать
|
|
Отправлено: 17:57, 23-11-2009 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Smile, там есть каретка, ей можно управлять.
Ну, а если хочется работать ещё и с мышью то вот |
Отправлено: 18:21, 23-11-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 38
|
Профиль | Сайт | Отправить PM | Цитировать |
Отправлено: 18:33, 23-11-2009 | #3 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Smile, любопытно. Особенно #include<dos.h>, впрочем файл то нашёлся, а вот 'REGPACK' : undeclared identifier так что не для всех компиляторов ИМХО.
P.S. IDE - Microsoft Visual C++ 2008 Express Edition |
Отправлено: 19:01, 23-11-2009 | #4 |
Новый участник Сообщения: 38
|
Профиль | Сайт | Отправить PM | Цитировать Ну я ее не использую так как мой колледж отстает в развитии. Попробуй библиотеку dos.h c Turbo C.
|
|
Отправлено: 17:42, 25-11-2009 | #5 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Smile спасибо, доступ к Turbo C есть.
А замена dos.h врятле позволит скомпилировать без ошибок предложенный код, ибо компиляторы слишком разные. Там даже указанно, что б не пробовали применять код в более новых компиляторах от Борланд, куда уж там от MS. Ну, а для MSVC будем примерно так ![]() #include <windows.h> #include <stdio.h> LRESULT CALLBACK ConsoleFunc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_MOUSEMOVE: POINT curPoint = {0}; GetCursorPos(&curPoint); RECT winRect = {0}; GetWindowRect(hWnd, &winRect); CONSOLE_SCREEN_BUFFER_INFO csbi = {0}; GetConsoleScreenBufferInfo((HANDLE)wParam, &csbi); COORD coord = {0}; coord.X = (SHORT)(((curPoint.x - winRect.left) * csbi.dwSize.X)/650); coord.Y = (SHORT)(((curPoint.y - winRect.top) * csbi.dwSize.Y)/325); wchar_t Coords[25]=L""; swprintf(Coords, 25, L"%i %i (MAX = {%i %i})", coord.X, coord.Y, csbi.dwSize.X, csbi.dwSize.Y); SetConsoleTitle(Coords); //wprintf(L"%i %i", coord.X, coord.Y); //wprintf(L"\b\b\b\b\b\b"); coord.Y -= 100; WORD wColors = 112; DWORD cWritten; WriteConsoleOutputAttribute((HANDLE)wParam, &wColors, 1, coord, &cWritten); coord.X +=1; WriteConsoleOutputAttribute((HANDLE)wParam, &wColors, 1, coord, &cWritten); break; } return 0; } int main(int argc, wchar_t *argv[]) { HWND hWndConsole = GetConsoleWindow(); WNDPROC OldWndProc = (WNDPROC)GetWindowLongPtr(hWndConsole, GWLP_WNDPROC); SetWindowLongPtr (hWndConsole, GWLP_WNDPROC, (LONG_PTR)ConsoleFunc); HANDLE hStdin = GetStdHandle (STD_INPUT_HANDLE); INPUT_RECORD inrec = {0}; DWORD cWritten; FlushConsoleInputBuffer(hStdin); HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); do { ReadConsoleInput(hStdin, &inrec, 1, &cWritten); CallWindowProc (ConsoleFunc, hWndConsole, WM_MOUSEMOVE, (WPARAM)hStdout, 0L); } while(inrec.Event.KeyEvent.wVirtualKeyCode != VK_ESCAPE); SetWindowLongPtr(hWndConsole, GWLP_WNDPROC, (LONG_PTR)OldWndProc); return 0; } Значения 650 и 325 получены экспериментальным путём, обеспечивают коррекцию координат, разделяя пиксель координату на экране. Переводя, таким образом, в позицию в консольном окне, где значения по горизонтали от 0 до 80 и от 0 до 300 по вертикали. Конкретные граничные значение уточняет функция GetConsoleScreenBufferInfo() |
Отправлено: 00:29, 26-11-2009 | #6 |
Новый участник Сообщения: 38
|
Профиль | Сайт | Отправить PM | Цитировать А может бы и получилось)))
|
Отправлено: 16:41, 26-11-2009 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Частота обновления экрана в текстовом режиме | DTF | Общий по Linux | 1 | 29-04-2007 19:56 | |
*SOFT* | Псевдографика в консольном приложении | MAXY | Программирование и базы данных | 20 | 28-01-2006 11:53 | |
Как в Си изменять цвет букв и фона в текстовом режиме | FatalBSD | Программирование и базы данных | 3 | 08-07-2004 14:09 | |
Разрешение в текстовом режиме | netmax | Программирование и базы данных | 1 | 12-04-2003 18:48 | |
Проблемы с видео в текстовом режиме | GateKeeper | Общий по Linux | 7 | 03-04-2003 05:47 |
|