当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

全屏幕OpenGL程序[VC/C++编程]

赞助商链接



  本文“全屏幕OpenGL程序[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

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


  以上是“全屏幕OpenGL程序[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 全屏幕OpenGL程序
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .