以下显示窗口的方法有什么区别:
ShowWindow
功能。SetWindowPos
标志的 SWP_SHOWWINDOW
功能。SetWindowLong
WS_VISIBLE
添加到 GWL_STYLE
。还有其他方法吗?
答案 0 :(得分:5)
我认为它们大致相同,但每种功能都有其他功能:
SetWindowLong
添加到WS_VISIBLE
的GWL_STYLE
可能是最不感兴趣的:如果有一个功能完全符合您的需要,为什么会混淆样式位。SetWindowPos
的SWP_SHOWWINDOW
允许您通过单个原子操作显示窗口并同时设置其位置和大小,以便没有人 - 程序或用户 - 可以看到可见 - 不动或不可见的窗口。ShowWindow
函数涉及很多魔法,尤其是第一次在程序中调用它。另外,它有SW_SHOWDEFAULT
标志,很少使用,但任何其他方法都无法使用,AFAIK。还有其他方法可以让窗口可见。从我的脑海中开始:
WS_VISIBLE
标志创建它。DeferWindowPos
与SetWindowPos
具有相同的标记。答案 1 :(得分:1)
SetWindowLong
函数设置初始窗口样式,即窗口是否会在创建后立即显示。 MSDN表示在创建窗口后,您必须使用其他两个函数来设置visible属性。典型的用途是:
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常量作为参数,因此它是一个易于使用的功能。