- 在线时间
- 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>
6 z5 D' `5 _# f+ u; S- j; Y& G* |# w< >具体如下:</P>+ X' u1 ~! P0 m" o M8 |
< >在窗口类的CreateParam()成员函数中加入如下语句:
6 S( T; t1 n# N* C3 eParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; i ?/ y3 R$ E' u$ o7 [; @) l1 }
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
% B; ?' q9 E) H* ~8 n! T8 T仍在窗口类的CreateParam()成员函数,加入如下语句:0 s2 b/ x C4 x- x+ F% P) g$ d
ChangeResolution(800,600);/ k& l T( {* X
Params.Width=800;+ W+ S5 t( T' i
Params.Height=600;
0 S. N% V) V) [: p I& B4 D% DParams.X=Params.Y=0;' j2 |6 M% y4 C+ S5 |' o
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
+ e7 H: M8 u$ H6 P- k5 Z* u$ t W然后修改窗体大小使之占满全屏。 & z3 u9 {. e9 H( @ Q8 W. D- A8 \
ChangeResolution()是一个自编的小函数,其原理如下: 0 z1 j/ m6 M/ Y% z/ f
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 - b7 |* j/ ]6 `1 |" g" e; H
用WINAPI:ChangeDisplaySettings()修改显示模式。
& u3 }- E# V6 y ]6 U. G' u) rChangeResolution()的完整代码:</P>
r+ ?& G: o+ R# @. x9 s< >BOOL ChangeResolution(DWORD w, DWORD h) {
' J7 F' N" ]% B& [ X$ s; pDEVMODE devMode;
3 X! ~0 }, h3 e0 OLONG modeSwitch;" U' L5 ~% m/ @$ }, i
LONG i;
# Y9 E) y1 s9 D m; I! MCHAR buf[256];
% i1 N( _7 G0 Ni = 0;
5 P+ j9 l/ }* f1 v1 `5 E; R6 \do {7 Y) t* q5 i3 A% ?; R/ c
modeSwitch = EnumDisplaySettings(NULL, i, &devMode);
$ z- M7 C t5 ^: o& Yi++;1 h3 E" a y5 M* e4 ?- k' U
} while(( (devMode.dmBitsPerPel!=16)
- F% ]4 w0 U5 M||(devMode.dmPelsWidth != w)
! _. H2 `% N# f- E; g||(devMode.dmPelsHeight != h) )
9 L/ T; f" a9 ^4 e; Y&& (modeSwitch) );
+ v# e% y( U2 G' ^/* Okay see if we found a mode */* F9 Y0 f$ ?4 O1 m8 j
if (!modeSwitch) { }6 O4 W( U1 D: c# I3 v8 j
else {$ N( y7 m* [8 a+ H3 {8 Y! z. k/ \
modeSwitch = ChangeDisplaySettings(&devMode, 0);
! C0 A0 q$ i. a O0 W) ?if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
6 f- O! t7 V6 `- x7 c7 p5 k6 p{9 Y: }( o3 O9 x9 C( \' G# K, w
//Might be running in Windows95, let's try without the hertz change
# o: d3 f' j# gdevMode.dmBitsPerPel = 16;1 _! ~& R! H8 ?6 j, d" c
devMode.dmPelsWidth = w;
" g# J& @, _4 bdevMode.dmPelsHeight = h;
o6 h' u: q( X& o/ P4 B& Q# qdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
) i3 t) X) d; r. R8 e: ImodeSwitch = ChangeDisplaySettings(&devMode, 0);
+ c# O; C1 A8 h/ R}
1 e3 |$ j6 Q4 }6 |/ Y}
9 a# \" M0 m+ _/ d5 Q& c' H# `return TRUE;5 ], R5 r. g4 }6 q7 K6 q$ ]( k
}
: O& i8 U0 z) E* Z7 K+ L: C样本程序
% B: ~/ J/ m2 K- r说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P> |
zan
|