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