Форум — Ответы ( К темам )
? | Игорь: Console Application (20-02-2003 17:00:00) |
Друзья! Кто-нибудь подскажет как написать консольное приложение, чтобы в нем был нормальный полноценный ввод с клавиатуры, как это сделано например в FAR'е. Поскольку в консольном приложении нет очереди сообщений. Что самому создавать очередь и вещать CALLBACK ? | |
Павел (20-02-2003 20:37:57) | |
Не понял проблемы, что значит "полноценный ввод с клавиатуры" ? Открываете C++Builder, File->New->Other и на вкладке New выбираете Concole Wizard. А для ввода с клавиатуры используете или стандартные функции ввода языка C или С++ в зависимости от того, что вы выбрали. | |
SergeyS (20-02-2003 20:48:38) | |
Вообще то у консольных программ есть своя особенная очередь сообщений. Она содержит содержит события от клавиатуры, мыши, события об изменения размера буфера и ещё пару типов служедных сообщений. Доступ к этой очереди выполняется функцией ReadConsoleInput. Подробнее функции консоли описаны в Win32 Help в разделе Console Functions. Хотя я согласен с Павлом: "полноценный ввод" можно реализовать стандартными функциями C или C++. | |
Игорь (21-02-2003 09:03:38) | |
Спасибо Павел и SergeyS! Единственное что мне хотелось бы понять как я получу код нажатой клавиши это же не BIOS, а языковой ввод фильтрует базар всякие там стрелочки, функциональные клавиши и контролы он интерпретирует, а мне хотелось бы какой-нибудь bioskey(), хотя идея насчет ReadConsoleInput мне нравиться надо почитать в WinAPI | |
Павел (21-02-2003 19:56:17) | |
Не вижу сложностей обработки нажатия стрелок и других клавиш, в чем проблема ? Функций в C, C++ для этого достаточно, нужно только их узучить. Если уж Вы хотите писать консольное приложение на С, С++ то это просто необходимо сделать. Вот пример ввода с консоли, в том числе нажатие стрелок ВВЕРХ, ВНИЗ, ВЛЕВО, ВПРАВО. //--------------------------------------------------------------------------- #pragma hdrstop #include <stdio.h> #include <conio.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { int c; int extended = 0; c = getch(); if (!c){ extended = getch(); switch(extended){ case 'H': printf("UP"); break; case 'P': printf("DOWN"); break; case 'M': printf ("RIGHT"); break; case 'K': printf("LEFT"); break; }} else printf("The character: %c isn't extended\n",c); getch(); return 0; } //--------------------------------------------------------------------------- | |
Игорь (26-02-2003 09:57:55) | |
Спасибо Павел Большое! Я правда пошел путем консольного интерфейса WinAPI там немного посложней, но и возможностей побольше Я правда пока в начале пути но если будет желание буду рад поделиться своими изысками :-)) |