C ++如何获取窗口大小(宽度和高度)?

时间:2013-11-15 16:36:48

标签: c++

我正在尝试创建一个图形,我需要知道用户运行代码的窗口大小。我正在尝试缩放数据,因此数据只显示窗口的大小,没有包裹或滚动。我在Windows上,但我想使用类似于Linux等效的东西

int lines = atoi(getenv("LINES") ;
int cols  = atoi(getenv("COLUMNS") ;

所以我可以缩放数字并显示这样的图表

320 a ============================================================
160 b ==============================
 80 c ===============
 40 d =======
 20 e ===
 10 f =
  5 g 
  2 h 
  1 i 
  2 j 
 17 k ===
 41 l =======
 67 m ============
 97 n ==================
127 o ========================
157 p =============================
191 q ====================================
227 r ===========================================
257 s ================================================
283 t =====================================================
331 u ==============================================================
367 v =====================================================================
373 w ======================================================================
379 x ========================================================================
383 y ========================================================================
389 z ==========================================================================

有什么东西适用于Windows和Linux吗?我正在使用Visual Studio 2012。

3 个答案:

答案 0 :(得分:1)

使用 GetConsoleScreenBufferInfo 或其中一个兄弟姐妹。 您对“返回”结构的dz Size字段感兴趣。 阅读文档:http://msdn.microsoft.com/en-us/library/windows/desktop/ms683171(v=vs.85).aspx

答案 1 :(得分:0)

使用GetWindowRect

RECT rect;
if(GetWindowRect(hwnd, &rect))
{
  int width = rect.right - rect.left;
  int height = rect.bottom - rect.top;
}

答案 2 :(得分:0)

您已经拥有适用于Linux的解决方案。

在Windows上,您需要的API调用是GetConsoleScreenBufferInfo

这会返回一个CONSOLE_SCREEN_BUFFER_INFO结构,您可以从中读出dwSize成员:

  

包含控制台屏幕缓冲区大小的COORD结构,以字符列和行为单位。