控制台到窗口中的第二个显示器



我正在为windows编写MFC应用程序。在开发过程中,我使用控制台窗口进行调试输出。我想要的是设置这个控制台,使它在启动时作为默认值显示在第二个显示器上。有可能吗??

您可以获得包含应用程序窗口的监视器的句柄:

HMONITOR hMyMonitor = ::MonitorFromWindow(MyHwnd, MONITOR_DEFAULTTOPRIMARY);

然后,您可以使用EnumDisplayMonitors函数枚举所有监视器

在MONITORENUMPROC回调函数中,将其监视器句柄与hMyMonitor进行比较。如果不同,您会找到另一台显示器。现在,您可以使用GetMonitorInfoW函数来获取包含的MONITORINFO结构

rcWork

一种RECT结构,用于指定显示监视器的工作区域矩形,用虚拟屏幕坐标表示。

最后,您可以使用GetConsoleWindow获得控制台的句柄,并使用MoveWindow 将其移动到您想要的任何位置

经过一番摆弄,我最终得到了这个:

#ifdef _DEBUG
CONSOLE_FONT_INFOEX cfi;
cfi.cbSize = sizeof(cfi);
cfi.nFont = 0;
cfi.dwFontSize.X = 0;                   // Width of each character in the font
cfi.dwFontSize.Y = 24;                  // Height
cfi.FontFamily = FF_DONTCARE;
cfi.FontWeight = FW_NORMAL;
wcscpy_s(cfi.FaceName, L"Consolas"); // Choose your font
// Make a console window
bool o = AllocConsole();
SetConsoleOutputCP( CP_UTF8 );      // UTF-8 please
// and a larger font so that I can read it :)
SetCurrentConsoleFontEx( GetStdHandle( STD_OUTPUT_HANDLE ), FALSE, &cfi );
HWND hWConsol = GetConsoleWindow();
::MoveWindow( hWConsol, -800, 0, 800, 800, true );
#endif

更正代码,作为魅力工作:(谢谢!

最新更新