其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
BCB中实现全屏幕

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

 

 

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

具体如下:

  1. 在窗口类的CreateParam()成员函数中加入如下语句:
    Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
    将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
  2. 仍在窗口类的CreateParam()成员函数,加入如下语句:
    ChangeResolution(800,600);
    Params.Width=800;
    Params.Height=600;
    Params.X=Params.Y=0;
    第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
    然后修改窗体大小使之占满全屏。
  3. ChangeResolution()是一个自编的小函数,其原理如下:
    1. 用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
    2. 用WINAPI:ChangeDisplaySettings()修改显示模式。
  4. 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)
    */
    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;
    }



相关文章

相关软件