是什么表示一个窗口的下列方法之间的差别:的ShowWindow VS SWP_SHOWWINDOW VS WS_VISIBLE
- 的
ShowWindow
功能。 - The
SetWindowPos
功能与SWP_SHOWWINDOW
标志。 - 与
WS_VISIBLE
的SetWindowLong
功能加入到GWL_STYLE
。
还有其他方法吗?
是什么表示一个窗口的下列方法之间的差别:的ShowWindow VS SWP_SHOWWINDOW VS WS_VISIBLE
ShowWindow
功能。SetWindowPos
功能与SWP_SHOWWINDOW
标志。WS_VISIBLE
的SetWindowLong
功能加入到GWL_STYLE
。还有其他方法吗?
我认为他们大多是相同的,但对于每一个附加的功能:
SetWindowLong
与WS_VISIBLE
加入GWL_STYLE
是proably最无趣:为什么惹样式位,如果有一个功能,正是你所需要的。SetWindowPos
与SWP_SHOWWINDOW
允许您通过单个原子操作同时显示窗口并设置其位置和大小,以便没有人 - 程序或用户 - 可以看到可见不移动或移动不可见的窗口。ShowWindow
函数有很多魔法,尤其是第一次在程序中调用。另外,它具有SW_SHOWDEFAULT
标志,它很少使用,但不适用于任何其他方法AFAIK。还有其他方法可以使窗口可见。从头到尾:
WS_VISIBLE
标志设置创建它。DeferWindowPos
与SetWindowPos
具有相同的标志。SetWindowLong
函数设置初始窗口样式,即如果窗口在创建后立即显示或不显示。 MSDN表示在窗口创建之后,您必须使用其他两个函数来设置可见属性。一个典型的应用是:
case WM_CREATE:
{
long style = GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong(hWnd, GWL_STYLE, style | WS_DLGFRAME);
return 0;
}
ShowWindow
和SetWindowPos
有关于可视窗口的重叠功能。如果您必须在设置其可见性的同时将窗口沿x,y或z方向移动,请使用SetWindowPos
。我个人发现需要指定必要的uFlags参数使得此功能使用起来有点麻烦,但MSDN是您的朋友;-)
如果另一方面您不需要窗口移动,但即将最大化,最小化,还原等,使用ShowWindow
。由于它只将窗口句柄和nCmdShow常量作为参数,因此它是一个易于使用的函数。
你想达到什么目的? – 2013-04-28 11:46:07
我需要编写一个监视其他程序活动的程序,并且我需要知道何时显示一个窗口。我想通过API挂钩实现它,但现在我正在考虑使用消息挂钩并监视WM_WINDOWPOSCHANGED消息。 您是否知道窗口在显示时是否总是收到WM_WINDOWPOSCHANGED消息? – Ben 2013-04-28 15:20:33
你为什么不问这个问题?这就是你想知道的。直接询问。是的,窗户在可见性发生变化时会收到通知。 – 2013-04-28 15:28:23