程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 全屏幕OpenGL程序

全屏幕OpenGL程序

編輯:關於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型就不會再看到它了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved