ShowWindow vs SWP_SHOWWINDOW vs WS_VISIBLE

时间:2013-04-28 11:23:01

标签: winapi

以下显示窗口的方法有什么区别:

  • ShowWindow 功能。
  • 带有 SetWindowPos 标志的 SWP_SHOWWINDOW 功能。
  • SetWindowLong WS_VISIBLE 添加到 GWL_STYLE

还有其他方法吗?

2 个答案:

答案 0 :(得分:5)

我认为它们大致相同,但每种功能都有其他功能:

    SetWindowLong添加到WS_VISIBLE
  1. GWL_STYLE可能是最不感兴趣的:如果有一个功能完全符合您的需要,为什么会混淆样式位。
  2. 带有SetWindowPos
  3. SWP_SHOWWINDOW允许您通过单个原子操作显示窗口并同时设置其位置和大小,以便没有人 - 程序或用户 - 可以看到可见 - 不动或不可见的窗口。
  4. ShowWindow函数涉及很多魔法,尤其是第一次在程序中调用它。另外,它有SW_SHOWDEFAULT标志,很少使用,但任何其他方法都无法使用,AFAIK。
  5. 还有其他方法可以让窗口可见。从我的脑海中开始:

    1. 设置WS_VISIBLE标志创建它。
    2. DeferWindowPosSetWindowPos具有相同的标记。

答案 1 :(得分:1)

SetWindowLong函数设置初始窗口样式,即窗口是否会在创建后立即显示。 MSDN表示在创建窗口后,您必须使用其他两个函数来设置visible属性。典型的用途是:

case WM_CREATE:
{
    long style = GetWindowLong(hWnd, GWL_STYLE);
    SetWindowLong(hWnd, GWL_STYLE, style | WS_DLGFRAME);

    return 0;
}

ShowWindowSetWindowPos在窗口可见性方面具有重叠功能。如果您必须在设置其可见性的同时沿x,y或z方向移动窗口,请使用SetWindowPos。我个人发现需要指定必要的uFlags参数使得这个函数使用起来有点麻烦,但是MSDN是你的朋友; - )

如果另一方面你根本不需要移动窗口但是要最大化,最小化,恢复等,请使用ShowWindow。由于它只将窗口句柄和nCmdShow常量作为参数,因此它是一个易于使用的功能。