全屏幕OpenGL措施
当前位置:以往代写 > C/C++ 教程 >全屏幕OpenGL措施
2019-06-13

全屏幕OpenGL措施

全屏幕OpenGL措施

其实在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型就不会再看到它了。

    关键字:

在线提交作业