这两个函数的具体应用如下: SetWindowLong函数 GetWindowLong函数
Delphi 窗口化游戏
var
Thwnd:HWND;//声明变量 句柄变量
devmode1:DEVMODE;//屏幕分辨率变量
style,exstyle:longint;//窗口属性变量
begin
//得到游戏句柄
Thwnd:=findwindow('CLIENT',nil);
//设置分辨率
if EnumDisplaySettings(0,0,devmode1) then
begin
devmode1.dmPelsWidth:=1024;
devmode1.dmPelsHeight:=768;
devmode1.dmBitsPerPel:=32;
devmode1.dmDisplayFrequency:=75;
ChangeDisplaySettings(devmode1,0);
end;
//得到窗口原来的属性
style:=GetWindowLong(Thwnd,GWL_STYLE);
//定义新属性
style:=WS_OVERLAPPEDWINDOW or WS_VISIBLE ;
//更改窗口属性
SetWindowLong(Thwnd,GWL_STYLE,style);
//得到窗口扩展属性
exstyle:=GetWindowLong(Thwnd,GWL_EXSTYLE);
//定义新扩展属性
exstyle:=WS_EX_APPWINDOW or WS_EX_WINDOWEDGE;
//更改窗口扩展属性
SetWindowLong(Thwnd,GWL_EXSTYLE,exstyle);
//更改的屏幕以屏幕的0,0为坐标,大小为800*600
SetWindowPos(Thwnd,HWND_NOTOPMOST,0,0,1020,768,SWP_SHOWWINDOW);
ShowWindow(Thwnd,SW_SHOWNORMAL);
VC++代码
long style;
long exstyle;
DEVMODE devmode;
HWND hwndmu=::GetForegroundWindow();
if(EnumDisplaySettings(0, 0, &devmode))
{
devmode.dmPelsWidth=1024;
devmode.dmPelsHeight=768;
devmode.dmBitsPerPel=32;
devmode.dmDisplayFrequency=75;
ChangeDisplaySettings(&devmode,0);
}
//修改窗体的style属性
style= GetWindowLong(hwndmu,GWL_STYLE);
style=style | WS_CAPTION ;
SetWindowLong(hwndmu,GWL_STYLE,style);//修改窗体的exstyle属性
exstyle=GetWindowLong(hwndmu,GWL_EXSTYLE);
exstyle=exstyle | WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
SetWindowLong(hwndmu,GWL_EXSTYLE,exstyle);//设置窗体的位置,取消其最前端显示,为图简单
807,632是我自己随便设的//当然最好是先用AdjustWindowRect函数调整一下大小
::SetWindowPos(hwndmu,HWND_NOTOPMOST,0,0,1024,768,SWP_SHOWWINDOW);
::ShowWindow(hwndmu,SW_SHOWNORMAL);//修改窗体的回调函数地址到我们自己定义的回调函数