- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
< >其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
8 J& h+ V8 Y/ D6 i" I' N6 I< >具体如下:</P>
. G6 M% }2 Z1 G2 u7 q9 n< >在窗口类的CreateParam()成员函数中加入如下语句:
# J2 q( U% t1 z a/ G4 `* HParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;1 Z7 q+ i3 H; [
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
0 p. T+ j9 W/ P H6 K6 P# J仍在窗口类的CreateParam()成员函数,加入如下语句:
, w8 |% \6 y3 @9 D7 ?ChangeResolution(800,600);7 p- ?. M) v( N0 b, o
Params.Width=800;
1 M) D- e {/ NParams.Height=600;
6 k+ K8 a1 h7 k5 `Params.X=Params.Y=0;) M; u3 D( z3 a0 |5 z3 t6 M# G) d
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
) @3 J$ n7 |3 l- ]; ?2 H) g然后修改窗体大小使之占满全屏。 ; [* e: F' X. E$ R' I# Y
ChangeResolution()是一个自编的小函数,其原理如下: ( a& V3 M2 [6 i/ n: p. r h
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 8 f& z( H8 S5 Z/ ?
用WINAPI:ChangeDisplaySettings()修改显示模式。 4 v! k! ? F( g1 f; |- _: L5 W
ChangeResolution()的完整代码:</P>( R' D/ x' q) R L
< >BOOL ChangeResolution(DWORD w, DWORD h) {
. R p. X: r. ]& GDEVMODE devMode;( i ~) m# d0 U* Z2 M
LONG modeSwitch;
9 S0 j, W5 _% i% l0 K" R0 tLONG i;4 u/ X2 Q2 Z, J J
CHAR buf[256];! D( C5 Q- e3 {+ }) N2 U/ h
i = 0;
$ g/ e3 l6 g3 H6 `do {
: v* n3 E: D+ {0 w; ImodeSwitch = EnumDisplaySettings(NULL, i, &devMode);
% r& _+ ~2 i! B# i' \: p/ ji++;
8 c- m; Y/ H' t! r# F} while(( (devMode.dmBitsPerPel!=16)5 E4 h8 b! S4 O3 Z5 e# k
||(devMode.dmPelsWidth != w), s3 [, i. a2 c# J$ f3 ^; A
||(devMode.dmPelsHeight != h) )
8 B+ Z; g+ T4 |&& (modeSwitch) );3 S. S5 V# D% M
/* Okay see if we found a mode */8 F2 W& D6 |6 t* E2 g
if (!modeSwitch) { }
! K4 W1 `, i7 s" jelse {1 e/ R: m B, B7 a% ^. L) z
modeSwitch = ChangeDisplaySettings(&devMode, 0);4 F) g1 p3 K# z( G: i1 M
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)& m8 \1 }( L- O% g% i+ r
{/ D' K) Z- I) k* S& j
//Might be running in Windows95, let's try without the hertz change6 F. v4 j6 [5 c; a; I
devMode.dmBitsPerPel = 16;4 I* a% U* ~0 |8 o% [. N- V" G
devMode.dmPelsWidth = w;8 Z1 S! B) y! ?# L
devMode.dmPelsHeight = h;4 L6 ]1 U" X7 G4 G4 t1 f- d
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;2 q* {4 e4 @2 U( q4 [! F
modeSwitch = ChangeDisplaySettings(&devMode, 0);
1 J b% V2 J% F& c" E}
$ |& M: @. W& l' O) O3 Q+ f2 x}# T8 V; `, f" u! v5 i& [ ~
return TRUE;
4 q, L! M1 ^; W/ j1 b} . `8 ?; [& ]7 X0 ^1 V& G6 b$ `
样本程序
" X* i! |. O* Q/ }1 X# R P5 ^( Y说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P> |
zan
|