Форум — Ответы     (  К темам )
 ?  Игорь: 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 там немного посложней, но и возможностей побольше Я правда пока в начале пути
но если будет желание буду рад поделиться своими изысками :-))