2014-01-27 5 views
1

Я прочитал в своем курсе, что getxy() является предопределенной функцией, но она не работает с Microsoft visual 2013. Так что я делаю поиск, и у меня есть тот фрагмент кода, который будет работать но я должен понять это. Так может кто-нибудь объяснить это подробно.Функция gotoxy(), определенная пользователем в C++

void gotoxy(int x, int y) 
{ 
HANDLE hConsoleOutput; 
COORD dwCursorPosition; 

cout.flush(); 
dwCursorPosition.X = x; 
dwCursorPosition.Y = y; 
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
SetConsoleCursorPosition(hConsoleOutput, dwCursorPosition); 
} 
+0

'dwCursorPosition' - это просто координатный POD, который необходимо отправить на [SetConsoleCursorPosition] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686025 (v = vs.85). ASPX). Итак, вы очищаете буфер вывода консоли, получаете POD ready; верните дескриптор на выход консоли и установите положение в окне с помощью SetConsoleCursorPosition. – Gasim

ответ

4

Ваш учебный материал примерно на 3 года устарел, я бы предположил, и нацелен на DOS, даже Windows 1.0.

В любом случае, функция, которая у вас есть, представляет собой реализацию, которая по-прежнему работает на современных системах Windows, даже если она слишком устарела на 20 лет.

Первая строка определяет HANDLE hConsoleOutput;. Он не может инициализировать переменную, которая должна быть выполнена следующим образом: HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);. Этот дескриптор нужен позже.

Вторая строка определяет координатное положение COORD dwCursorPosition;. Такая же проблема должна была быть инициализирована: COORD dwCursorPosition = { x,y };

cout.flush() гарантирует, что все старые выходные данные перед вызовом записываются в старом местоположении курсора.

Следующие три утверждения фиксируют неинициализированные переменные и не должны были быть необходимы, если это было сделано правильно. Наконец, последний вызов делает реальную работу с сообщением Windows, где печатать дальше.

Смежные вопросы