我正在为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
更正代码,作为魅力工作:(谢谢!