全屏幕OpenGL程序

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。

具体如下:

在窗口类的CreateParam()成员函数中加入如下语句:

Params.Style=WS_POPUPWS_CLIPCHILDRENWS_CLIPSIBLINGS;

将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。

仍在窗口类的CreateParam()成员函数,加入如下语句:

ChangeResolution(800,600);

Params.Width=800;

Params.Height=600;

Params.X=Params.Y=0;

第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)

然后修改窗体大小使之占满全屏。

ChangeResolution()是一个自编的小函数,其原理如下:

用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式

用WINAPI:ChangeDisplaySettings()修改显示模式。

ChangeResolution()的完整代码:

BOOL ChangeResolution(DWord w, DWORD h) {

DEVMODE devMode;

LONG modeSwitch;

LONG i;

CHAR buf[256];

i = 0;

do {

modeSwitch = EnumDisplaySettings(NULL, i, &devMode);

i++;

} while(( (devMode.dmBitsPerPel!=16)

(devMode.dmPelsWidth != w)

(devMode.dmPelsHeight != h) )

&& (modeSwitch) );

/* Okay see if we found a mode */

if (!modeSwitch) { }

else {

modeSwitch = ChangeDisplaySettings(&devMode, 0);

if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)

{

//Might be running in Windows95, let's try without the hertz change

devMode.dmBitsPerPel = 16;

devMode.dmPelsWidth = w;

devMode.dmPelsHeight = h;

devMode.dmFields = DM_B99vSPERPEL DM_PELSWIDTH DM_PELSHEIGHT;

modeSwitch = ChangeDisplaySettings(&devMode, 0);

}

}

return TRUE;

}

样本程序

说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,假如你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航