gpt4 book ai didi

c++ - 确定鼠标光标所在的控制台上的字符

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:23 26 4
gpt4 key购买 nike

众所周知,控制台缓冲区大小由一个二维数组组成。我正在尝试在点击按钮上实现(绘制的按钮不是子窗口),但我遇到了准确性问题。

因为 Console Window 是可移动和可调整大小的,所以我必须将 Mouse Cursor 位置相对于 Console Window 左上角(我我找到了一种以像素为单位准确执行此操作的方法)。但是现在问题来了。当我试图找出 Mouse Cursor 在哪个 character square 上时,它变得不准确(大约 3 ~ 5 个像素的错误),这是实现 点击按钮

这些是我使用的功能。另请记住,我们需要事先声明 GetCurrentConsoleFont()。 (找到它 here )

为了便于测试,我在主 ( see full code) 中实现了一个“画我的东西”的小游戏。

/** This returns the cursor position relative to any window (not just the console).*/
POINT GetCursPosRelWin(HWND hWindow)
{
POINT rCoord;

RECT windowCoord;
HWND hConsole = GetConsoleWindow();
GetWindowRect(hConsole,&windowCoord);

POINT ptCursor;
GetCursorPos(&ptCursor);

rCoord.x = ptCursor.x - windowCoord.left;
rCoord.y = ptCursor.y - windowCoord.top;
return rCoord;
}

WORD GetCurrentFontHeight()
{
CONSOLE_FONT_INFO cfi;
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
return cfi.dwFontSize.Y;
}
WORD GetCurrentFontWidth()
{
CONSOLE_FONT_INFO cfi;
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
return cfi.dwFontSize.X;
}

那么,有没有办法让这个方法更加准确呢?

编辑:这是我设法找到的最准确的方法,尽管它仍然不是很精确。

/** See the full code for a better understanding */
/** In the main function as parameters of MoveConsoleCursor() */
MoveConsoleCursor(
(SHORT)((double)(ptCursor.x/GetCurrentFontWidth() - ((ptCursor.x/GetCurrentFontWidth())%10)/10 )),
(SHORT)((double)(ptCursor.y/GetCurrentFontHeight() - 0.5))
);

最佳答案

您可以将 GetCursPosRelWin 更改为:

POINT GetCursPosRelWin(HWND hWindow)
{
POINT ptCursor;
GetCursorPos(&ptCursor);

ScreenToClient(hWindow, &ptCursor);

return ptCursor;
}

MoveConsoleCursor 调用:

MoveConsoleCursor(ptCursor.x / GetCurrentFontWidth(), ptCursor.y / GetCurrentFontHeight());

这会将光标放在正方形的中心,前提是滚动条没有移动。否则,您必须考虑滚动条偏移量。

关于c++ - 确定鼠标光标所在的控制台上的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50381934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com