- 在线时间
- 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>
% w) X% n( [5 N< >具体如下:</P>8 g0 f' B# a+ C# r
< >在窗口类的CreateParam()成员函数中加入如下语句:+ p( O- u! X. S3 x( N, ~
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
; j$ H" g! P2 U0 h, x将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
" Q: @" X3 P" I+ H仍在窗口类的CreateParam()成员函数,加入如下语句:
. h- X/ D3 G5 z5 R3 \ChangeResolution(800,600);4 L Y, ^8 J3 f. O$ K: q: Y
Params.Width=800;
- K- R9 S% V! NParams.Height=600;9 a# w; v$ n: S# x7 v8 Y, z
Params.X=Params.Y=0;
) H* h0 L, m% y* Z% H& I第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
- ?; @ B a! T! J& D然后修改窗体大小使之占满全屏。
5 H1 p2 v+ b5 v, U& L/ TChangeResolution()是一个自编的小函数,其原理如下:
( f7 x9 w# X5 u0 \用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 % g, Y) L: G; M N. M. p- w0 W
用WINAPI:ChangeDisplaySettings()修改显示模式。 3 g) r4 s& s% P5 n" U) j
ChangeResolution()的完整代码:</P># R4 Q7 D, }/ `, S3 u
< >BOOL ChangeResolution(DWORD w, DWORD h) {) Z/ t9 |1 \% p" l) Y
DEVMODE devMode;
/ {# [' K! h4 \9 c6 G1 @LONG modeSwitch;
, s% i; y+ ~* J6 Y- fLONG i;
( A' T5 P9 s- N% Y/ X9 o; J+ d: r2 ^CHAR buf[256];
* L) |# i. @' Z% H! J$ e7 |1 V! X+ vi = 0;
! I" b6 W6 W; w& Wdo {! `8 v) Y* L6 C+ t, c: B
modeSwitch = EnumDisplaySettings(NULL, i, &devMode);. G1 _8 {7 K/ J/ ^
i++;
$ c- a9 Q' v ]4 r6 |7 w( |} while(( (devMode.dmBitsPerPel!=16)
# g6 }* R" y$ a7 x( H||(devMode.dmPelsWidth != w)
; E e+ t7 y6 R/ h& W4 t w! y+ P||(devMode.dmPelsHeight != h) )
: j# C; q7 ]( O) j&& (modeSwitch) );% u e: b; j# `. X* S& ~0 L; J' E! i
/* Okay see if we found a mode */8 {8 r/ y8 \, S, H6 m
if (!modeSwitch) { }- N5 s) ~. l; m5 o
else {' X) y9 Y9 S/ }5 V- K
modeSwitch = ChangeDisplaySettings(&devMode, 0);6 h, j8 y0 \. |
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
- c/ S9 P% ~8 E" |/ O2 `{
- u6 ]' V% q0 S//Might be running in Windows95, let's try without the hertz change
5 ]# f* L7 x8 m+ vdevMode.dmBitsPerPel = 16;
2 a/ r j7 |" A6 xdevMode.dmPelsWidth = w;6 L9 I* ~" k g' w: M- l; w
devMode.dmPelsHeight = h;1 }2 G5 m( p1 p5 ]" q' m: J
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
% s$ U3 P* ?. Z/ ?0 mmodeSwitch = ChangeDisplaySettings(&devMode, 0);' t8 w) q) p" P% Z% y/ X7 }
}
, B2 D& h8 F" \0 _3 F. i1 f0 N}/ B$ S8 n$ p, @; @! @: k4 q
return TRUE;
' [: S2 D/ `9 H9 E {2 b7 P7 Q}
$ v" ?. s: @8 \9 b5 f: L2 t样本程序
5 W8 Q0 P6 f) {/ E说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P> |
zan
|