今天有个朋友问我一个问题,现在Delphi创建的子窗体默认子窗体只能在主窗体上面,不能被主窗体遮挡,问如何才可以使主窗体获得焦点的时候可遮挡子窗体,本来以为很简单的问题,其实还是需要了解一个函数。
SetWindowLong是一个Windows API函数。该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。
原型
LONG
SetWindowLong(
HWND
hWnd,
// handle to window
int
nIndex,
// offset of value to set
LONG
dwNewLong
// new value
);
nlndex
要设置其他任何值,可以指定下面值之一:
常量 | 常量值 | 意义 |
---|---|---|
GWL_EXSTYLE | -20 | 设定一个新的扩展风格。 |
GWL_HINSTANCE | -6 | 设置一个新的应用程序实例句柄。 |
GWL_ID | -12 | 设置一个新的窗口标识符。 |
GWL_STYLE | -16 | 设定一个新的窗口风格。 |
GWL_USERDATA | -21 | 设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。 |
GWL_WNDPROC | -4 | 为窗口设定一个新的处理函数。 |
GWL_HWNDPARENT | -8 | 改变子窗口的父窗口,应使用SetParent函数。 |
if fCEF <> nil then
begin
FreeAndNil(fCEF);
end;
fCEF := TfCEF.Create(nil);
fCEF.Show;
因为子窗体创建出来默认所属主窗体,所以要改变子窗体的父窗口
在子窗体中formcreate函数中使用
SetWindowLong(Handle, GWL_HWNDPARENT, 0);
即可。