以下显示窗口的方法有什么区别:
ShowWindow
功能。SetWindowPos
带有SWP_SHOWWINDOW
标志的功能。- 添加到的
SetWindowLong
功能。WS_VISIBLE
GWL_STYLE
还有其他方法吗?
以下显示窗口的方法有什么区别:
ShowWindow
功能。SetWindowPos
带有SWP_SHOWWINDOW
标志的功能。SetWindowLong
功能。WS_VISIBLE
GWL_STYLE
还有其他方法吗?
我认为它们大部分是相同的,但每个都有额外的功能:
SetWindowLong
with WS_VISIBLE
added to 可能GWL_STYLE
是最不有趣的:如果有一个功能可以完全满足您的需求,为什么还要乱用样式位。SetWindowPos
withSWP_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 常量作为参数,因此它是一个易于使用的函数。