Как я могу перезаписать ту же часть консоли в собственном компоненте Windows консольное приложение C++, не пользуясь сторонней библиотекой?

Я исправил это, добавив ChangeDetectionStrategy из углового ядра.

import {  Component, ChangeDetectionStrategy } from '@angular/core';
@Component({
  changeDetection: ChangeDetectionStrategy.OnPush,
  selector: 'page1',
  templateUrl: 'page1.html',
})
13
задан Patrick Johnmeyer 5 September 2008 в 06:09
поделиться

5 ответов

Можно использовать SetConsoleCursorPosition. Необходимо будет назвать GetStdHandle для получения дескриптора к буферу вывода.

8
ответ дан 1 December 2019 в 22:08
поделиться

Если Вы распечатаете использование \r и не будете использовать функцию, которая генерирует новую строку или добавит \n в конец, то курсор вернется к началу строки и просто распечатает по следующей вещи, которую Вы поднимаете. При генерации полной строки, прежде чем печать могла бы уменьшить мерцание также.

ОБНОВЛЕНИЕ: вопрос был изменен на 2 строки вывода вместо 1, который заставляет мой ответ больше не завершиться. Более сложный подход, вероятно, необходим. Мировой судья имеет верное представление с Консолью API. Я полагаю, что следующий сайт детализирует многие вещи, необходимо будет выполнить цель. Сайт также упоминает, что ключ к сокращению мерцания должен представить все вне экрана прежде, чем отобразить его. Это верно каждый раз, когда Вы отображаете что-либо на экране, является ли это текстом или графикой (2D или 3D).

http://www.benryves.com/tutorials/?t=winconsole

5
ответ дан 1 December 2019 в 22:08
поделиться

Joseph, мировой судья, и CodingTheWheel все обеспечили ценную справку.

Для моего простого случая самый простой подход, казалось, был основан на ответе CodingTheWheel:

// before entering update loop
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
GetConsoleScreenBufferInfo(h, &bufferInfo);

// update loop
while (updating)
{
  // reset the cursor position to where it was each time
  SetConsoleCursorPosition(h, bufferInfo.dwCursorPosition);

  //...
  // insert combinations of sprintf, printf, etc. here
  //...
}

Для более сложных проблем полный ответ консоли API as provided by JP's, при взаимодействии с примерами, обеспеченными по ссылке из ответа Joseph, может оказаться полезным, но я считал работу необходимой использовать CHAR_INFO слишком утомительный для такого простого приложения.

7
ответ дан 1 December 2019 в 22:08
поделиться

В Linux можно выполнить это путем печати \b и/или \r к stderr. Вы, возможно, должны были бы экспериментировать для нахождения правильной комбинации вещей в Windows.

0
ответ дан 1 December 2019 в 22:08
поделиться

В случае, если предложение Joseph не дает Вам достаточно гибкости, взглянуло на Консоль API: http://msdn.microsoft.com/en-us/library/ms682073 (По сравнению с 85) .aspx.

3
ответ дан 1 December 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: