- 在线时间
- 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>
9 r# I: u0 b% E# C7 L< >具体如下:</P>
) {& f! R( Z! R6 i" d+ |# L! ^' f* t< >在窗口类的CreateParam()成员函数中加入如下语句:- a7 X( s; j" u; K1 w
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
) z% P) ~+ H" Z% r& p* {" a5 n$ J将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
) V& D$ N0 I3 b, y5 I仍在窗口类的CreateParam()成员函数,加入如下语句:7 ?! E+ }7 P r# L h
ChangeResolution(800,600);/ c; a" V" s# m) h1 ^% O* p
Params.Width=800;% I, r8 T5 Z) C; C
Params.Height=600;0 U3 _0 P0 a0 V; Q% J" @
Params.X=Params.Y=0;
9 W' l# Z2 }$ ~+ V9 g$ n第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值) T& _8 r6 Q3 M" Q7 f# z
然后修改窗体大小使之占满全屏。
j7 G7 e, F6 \% p, z+ e1 N# R& JChangeResolution()是一个自编的小函数,其原理如下: ; E) s9 M- u: z. @
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 % X3 y2 x. E6 r
用WINAPI:ChangeDisplaySettings()修改显示模式。
: K( p9 }, l9 i3 l r* W8 VChangeResolution()的完整代码:</P># v9 {2 X( y9 C
< >BOOL ChangeResolution(DWORD w, DWORD h) {- c( M" Y. J$ L5 Q1 @# L( h9 ^/ `
DEVMODE devMode;
* S* S l$ T$ S4 v7 NLONG modeSwitch;
& r* S V) n) rLONG i;
7 P9 x- ]( @# u2 WCHAR buf[256];
! G. R, ?9 `% q9 }$ pi = 0;
+ S3 z7 C3 d6 f9 h" q* P$ ~do {
8 T b+ T; A7 Q+ O; u# L1 b2 J5 `modeSwitch = EnumDisplaySettings(NULL, i, &devMode);
- e& E( x. R% A0 I2 S; \i++;
X; I1 J! [1 a. Y4 c# v8 O1 O. M} while(( (devMode.dmBitsPerPel!=16)$ N: Z) W J: s; B, O, I+ ?5 c, D5 L1 w
||(devMode.dmPelsWidth != w)
7 v; A& u- M: L||(devMode.dmPelsHeight != h) )0 l) [1 g6 E7 V d
&& (modeSwitch) );
% I% E8 y8 V- {' g: N! u, n/* Okay see if we found a mode */
) R1 k6 f0 W+ k; x# v" K. f Bif (!modeSwitch) { }7 w, ?4 C C/ m# ^& ~2 k
else {
) o4 ~5 c' f: w) \% E/ m4 ]! MmodeSwitch = ChangeDisplaySettings(&devMode, 0);
! ^! v- Y. }" R( f4 Tif (modeSwitch!=DISP_CHANGE_SUCCESSFUL)2 t% D. X3 s5 _8 i8 c, [* x
{: S! I$ D" r7 E1 z" L
//Might be running in Windows95, let's try without the hertz change
8 o3 J7 q$ M- U+ s4 kdevMode.dmBitsPerPel = 16;! h6 M- i9 S6 n! ~1 I$ c" E/ C( X
devMode.dmPelsWidth = w;
7 q# o0 a: k& |+ P2 l$ adevMode.dmPelsHeight = h;
8 m* U- m! `/ HdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
+ K2 ]) J9 s; B# s0 a0 T5 y# ]modeSwitch = ChangeDisplaySettings(&devMode, 0);
' n3 o* e, M0 R) O8 d4 j! z}
: E8 V- _+ W+ x/ e$ T}6 Z) x! Y4 H9 p! i5 K: k& X
return TRUE;
5 M+ C. R# x0 U, j m0 `* Z6 P} ; g: E" g& Q5 S: w$ {6 b# v
样本程序 8 {) r3 x+ L+ X ^ s3 f$ Y0 t1 b
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P> |
zan
|