- 在线时间
- 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>
; ]& N8 J3 w2 A. k7 ~/ J& k< >具体如下:</P>
; W% t1 @$ ]. @3 |! C< >在窗口类的CreateParam()成员函数中加入如下语句:- o# t2 }8 }- N7 m) d3 H
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;% w) E7 }' \. b5 J
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 & a3 R- v c9 c# R( R% {
仍在窗口类的CreateParam()成员函数,加入如下语句:
: O& }9 }7 F9 }# U: ~& wChangeResolution(800,600);0 N& U. Q6 }5 z
Params.Width=800;
7 [: s; r8 j3 eParams.Height=600;
/ ?: u) f$ j2 g+ ^! @4 MParams.X=Params.Y=0;) c) K. v0 R7 y/ w, `) V4 ]; \% ^
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
4 _; `, M: z x然后修改窗体大小使之占满全屏。
. E9 L2 h! C& K' z) ?$ f$ LChangeResolution()是一个自编的小函数,其原理如下: ) q* e2 F4 w6 C7 } k$ X3 Z5 G$ C! I
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 7 y0 d6 p5 O2 z+ N9 ^: m% N
用WINAPI:ChangeDisplaySettings()修改显示模式。
& J: Q1 }5 m0 M* fChangeResolution()的完整代码:</P>
/ N% v+ r# X: `* ]< >BOOL ChangeResolution(DWORD w, DWORD h) {, R- P4 D( h# l9 C
DEVMODE devMode;$ W& ~" p; i ~" J
LONG modeSwitch;2 Y' @: }% c# i! s" p
LONG i;
5 [+ U- _2 O5 VCHAR buf[256];7 f4 t! a4 @! p% K3 X
i = 0;
: v2 Q' H4 K ?1 m7 Ydo {$ Z. k& r+ \3 v( n; [! N+ Y
modeSwitch = EnumDisplaySettings(NULL, i, &devMode);
0 Q" `2 n$ A8 _9 l1 q! }i++;' R3 D4 P5 O V* B- Z
} while(( (devMode.dmBitsPerPel!=16)
b' h$ k6 Z5 }( S1 q||(devMode.dmPelsWidth != w)
3 a. e9 S. _, D2 y' E||(devMode.dmPelsHeight != h) )
* L+ B8 Y- E8 y9 M9 ]/ A7 ^&& (modeSwitch) );
( w% g5 _; p/ X* ^3 P/* Okay see if we found a mode */
; k I9 P- ~ _# u- J7 J; Oif (!modeSwitch) { }+ T" s3 y9 P+ q' j0 U7 T! ?
else {4 p6 t+ X4 S3 m
modeSwitch = ChangeDisplaySettings(&devMode, 0);$ [& A+ O+ @' p" m0 \" A2 k
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
: R$ y. p+ S7 ]% j2 m{. J0 o9 `$ M0 z K
//Might be running in Windows95, let's try without the hertz change$ C; M) L6 P% {7 A' t4 j) P, T5 t
devMode.dmBitsPerPel = 16;+ @5 \2 b* y& ~+ D& g4 R
devMode.dmPelsWidth = w;; e* ^0 t, s+ {/ n- R/ P
devMode.dmPelsHeight = h; C" a' B# U7 D
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
6 {) g' K/ R; g! x* Q% BmodeSwitch = ChangeDisplaySettings(&devMode, 0);+ k B9 H8 m- T6 h$ N% I' h3 Q' S
}
# K: v: O- [- w5 x) n}
$ k- l# V; q' e3 z t& Ureturn TRUE;0 g1 t/ w6 t7 j- b$ O9 w6 M
} ( g5 R: A, l5 d7 `
样本程序 ! Q& v. N3 S9 d8 `! h$ M
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P> |
zan
|