全屏幕OpenGL程式

2008-02-23 05:35:52来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

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

具体如下:

在窗口类的CreateParam()成员函数中加入如下语句:
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_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_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
modeSwitch = ChangeDisplaySettings(&devMode, 0);
}
}
return TRUE;
}
样本程式
说明:通常这个程式运行时会看到屏幕底部有道白线,这是任务栏造成的,假如您将他的总在最前面(always on top)去掉或将本程式窗口作成Always On Top型就不会再看到他了。




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 轻轻松松产生 Makefile

下一篇: 两个小时学会DirectDraw编程

热门词条
热门标签