5

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

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

还有其他方法吗?

4

2 回答 2

7

我认为它们大部分是相同的,但每个都有额外的功能:

  1. SetWindowLongwith WS_VISIBLEadded to 可能GWL_STYLE是最不有趣的:如果有一个功能可以完全满足您的需求,为什么还要乱用样式位。
  2. SetWindowPoswithSWP_SHOWWINDOW允许您显示窗口并同时设置其位置和大小,使用单个原子操作,这样任何人 - 程序或用户 - 都可能看到可见-未移动或移动-不可见的窗口。
  3. ShowWindow函数涉及很多魔法,尤其是在程序中第一次调用它时。此外,它具有SW_SHOWDEFAULT很少使用但不适用于任何其他方法的标志,AFAIK。

还有其他方法可以使窗口可见。从我的脑海中:

  1. WS_VISIBLE使用标志集创建它。
  2. DeferWindowPos具有与 相同的标志SetWindowPos
于 2013-04-28T11:54:40.883 回答
2

SetWindowLong函数设置初始窗口样式,即窗口在创建后是否立即出现。MSDN说,创建窗口后,您必须使用其他两个函数来设置可见属性。一个典型的用途是:

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 常量作为参数,因此它是一个易于使用的函数。

于 2013-04-28T11:56:36.917 回答