【问题标题】:C++ How to get the window size (width and height)?C ++如何获取窗口大小(宽度和高度)?
【发布时间】:2013-11-29 03:16:07
【问题描述】:

我正在尝试创建一个图表,我需要知道用户正在运行代码的窗口的大小。我正在尝试缩放数据,以便数据仅显示在窗口的大小上,而不显示换行或滚动。我在 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。

【问题讨论】:

标签: c++


【解决方案1】:

使用 GetWindowRect

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

【讨论】:

  • 如果您不知道字体大小,GetWindowRect 返回的像素尺寸毫无意义...
  • 这回答了标题,但没有回答问题,这显然是在处理控制台模式。
  • 是否包含标题栏?
  • 是的,这确实包括标题栏。
【解决方案2】:

使用 GetConsoleScreenBufferInfo 或其同级之一。 您对“返回”结构的 dzSize 字段感兴趣。 在此处阅读文档:http://msdn.microsoft.com/en-us/library/windows/desktop/ms683171(v=vs.85).aspx

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 2014-08-28
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2018-12-11
      相关资源
      最近更新 更多