读书人

fsAlwaysontopsetwindowpos(.hwnd_t

发布时间: 2013-06-26 14:29:32 作者: rapoo

fsAlwaysontop,setwindowpos(...hwnd_topmost) 均无效果
将窗口的formstyle属性设置为fsAlwaysontop,无法将窗口置顶
用setwindowpaos api也不行

有谁遇到过这种情况?

[解决办法]
你建个新程序, 设formstyle 为 fsAlwaysontop试试
[解决办法]
重写CreateParams怎样?


procedure CreateParams(var params: TCreateParams); override;

procedure TForm1.CreateParams(var params: TCreateParams);
begin
inherited;
params.ExStyle:= params.ExStyle or WS_EX_TOPMOST;
end;

[解决办法]
如果是在游戏开启的全屏下可能不行。


function BringWindowToTopEx(hWnd: HWND): Boolean;
begin
if IsIconic(hWnd) then //最小化
ShowWindow(hWnd, SW_RESTORE);
if GetForegroundWindow <> hWnd then
SetForegroundWindow(hWnd);//enabled
//BringWindowToTop(hWnd);//not enabled
//ForceForegroundWindow(hWnd);//enabled
{SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);//enabled}
//SwitchToThisWindow(hWnd, True);//enabled
Result := GetForegroundWindow = hWnd;
end;

function BringWindowToTopMost(hWnd: HWND; bTopMost: Boolean): Boolean;
begin
if IsIconic(hWnd) then //最小化
ShowWindow(hWnd, SW_RESTORE);
if bTopMost then
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE)
else
SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;

function BringWindowToTopXY(hWnd: HWND; X, Y: Integer;
hWndInsertAfter: HWND): Boolean;
begin
Result := BringWindowToTopEx(hWnd);
Result := SetWindowPos(hWnd, hWndInsertAfter, X, Y, 0, 0, SWP_NOSIZE)
and Result;
end;

读书人网 >.NET

热点推荐