如何在Win32控制台应用程序中设置光标位置?最好,我想避免使用Windows控制台功能。 (我整个上午都在那条黑暗的小巷里奔跑;它造成的问题多于解决的问题。)我似乎回忆起当我在大学时使用stdio相对简单,但我现在找不到任何如何做的例子。任何想法或建议将不胜感激。感谢。
其他详细信息
以下是我现在要做的事情:
COORD pos = {x, y};
HANDLE hConsole_c = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL );
char * str = "Some Text\r\n";
DWDORD len = strlen(str);
SetConsoleCursorPosition(hConsole_c, pos);
WriteConsole(hConsole_c, str, len, &dwBytesWritten, NULL);
CloseHandle(hConsole_c)
文本字符串str
永远不会发送到屏幕。我还应该做些什么吗?感谢。
答案 0 :(得分:12)
使用控制台功能,您可以使用SetConsoleCursorPosition
。没有它们(或者至少不直接使用它们),您可以在ncurses库中使用gotoxy
之类的内容。
编辑:它的包装非常简单:
// Untested, but simple enough it should at least be close to reality...
void gotoxy(int x, int y) {
COORD pos = {x, y};
HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(output, pos);
}
答案 1 :(得分:10)
请参阅SetConsoleCursorPosition API
修改强>
使用WriteConsoleOutputCharacter()在控制台中获取活动缓冲区的句柄,并允许您设置其位置。
int x = 5; int y = 6;
COORD pos = {x, y};
HANDLE hConsole_c = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleActiveScreenBuffer(hConsole_c);
char *str = "Some Text\r\n";
DWORD len = strlen(str);
DWORD dwBytesWritten = 0;
WriteConsoleOutputCharacter(hConsole_c, str, len, pos, &dwBytesWritten);
CloseHandle(hConsole_c);
答案 2 :(得分:4)
是的,你忘了打电话给SetConsoleActiveScreenBuffer
。创建自己的究竟是什么意思?使用GetStdHandle(STD_OUTPUT_HANDLE)
获取现有控制台的句柄。
答案 3 :(得分:1)
您可能正在使用ANSI excape code sequences,它不适用于Windows 32位控制台应用程序。
答案 4 :(得分:1)
#include <windows.h>
#include <iostream.h>
using namespace std;
int main(int argc, char *argv[])
{
int x,y;
cin>>x>>y;
SetCursorPos(x,y); //set your co-ordinate
Sleep(500);
mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0); // moving cursor leftdown
mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0); // moving cursor leftup //for accessing your required co-ordinate
system("pause");
return EXIT_SUCCESS;
}