gpt4 book ai didi

c++ - 如何防止控制台窗口超出屏幕?

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:32 25 4
gpt4 key购买 nike

如果控制台应用程序启动并且系统为它创建控制台窗口,但有时这个窗口是在这样的坐标中创建的,它的一些内容会滑出右屏幕边缘。然后用户必须使用鼠标来显示所有内容。

如何应对?什么功能用于检测控制台窗口的右上角坐标?然后我将能够检查它是否在屏幕之外并将窗口移动到所需的距离。

移动窗口用什么函数?或者也许有一种解决方案可以防止窗口移出屏幕?

最佳答案

这是一个完全支持多显示器和任务栏的实现,它可以按照您的描述进行操作。

#include <Windows.h>

int main()
{
ClampConsoleToScreen();
return 0;
}

void ClampConsoleToScreen()
{
HWND window = GetConsoleWindow();
RECT windowRect;
GetWindowRect(window, &windowRect);
HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTOPRIMARY);
MONITORINFO mi;
memset(&mi, 0, sizeof(mi));
mi.cbSize = sizeof(mi);
GetMonitorInfo(monitor, &mi);

int adj, any;

adj = 0;
any = 0;
if (windowRect.right > mi.rcWork.right)
{
// Get negative adjustment value to move it left onto screen
adj = mi.rcWork.right - windowRect.right;
}
if (windowRect.left < mi.rcWork.left)
{
// Get positive adjustment value to move it right onto screen
adj = mi.rcWork.left - windowRect.left;
}
windowRect.left += adj;
windowRect.right += adj;
any |= adj;

adj = 0;
if (windowRect.bottom > mi.rcWork.bottom)
{
// Get negative adjustment value to move it up onto screen
adj = mi.rcWork.bottom - windowRect.bottom;
}
if (windowRect.top < mi.rcWork.top)
{
// Get positive adjustment value to move it down onto screen
adj = mi.rcWork.top - windowRect.top;
}
windowRect.top += adj;
windowRect.bottom += adj;
any |= adj;

if (any)
{
MoveWindow(window,
windowRect.left,
windowRect.top,
windowRect.right - windowRect.left,
windowRect.bottom - windowRect.top, TRUE);
}
}

关于c++ - 如何防止控制台窗口超出屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10850377/

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