- 在线时间
- 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>) o, D' Q& r: v% a* Z; M- W
< >具体如下:</P>
: P0 A2 P- T$ E- v" n; \5 @< >在窗口类的CreateParam()成员函数中加入如下语句:
. Y( |& z) ^; M( ?Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
! P' O% _$ O5 R7 ?将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 4 q1 _3 [9 F$ k8 R* P* S ]2 d
仍在窗口类的CreateParam()成员函数,加入如下语句:
: x+ O) ]8 ^' V' LChangeResolution(800,600);6 S3 i: S1 i! p) e
Params.Width=800;
. d9 Y5 z9 w# p" L' g* PParams.Height=600;0 t1 K: X3 V- _/ O
Params.X=Params.Y=0;
+ ^! K% X( r4 I! M: f第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
: c% \! n: \* D w然后修改窗体大小使之占满全屏。
$ f* ^" @4 L/ J! d8 w) k( _ChangeResolution()是一个自编的小函数,其原理如下:
) _. e f9 Z$ Q; K$ Z8 \% B2 q" j用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
# m, D& w0 W9 o. {5 m用WINAPI:ChangeDisplaySettings()修改显示模式。
6 v+ G7 h k/ Q4 XChangeResolution()的完整代码:</P>+ o# _4 e! u9 c" b- D; o
< >BOOL ChangeResolution(DWORD w, DWORD h) {
9 r( U: X% \. d: l8 d8 rDEVMODE devMode;
7 F" S. H7 K) P) ?) i8 M1 CLONG modeSwitch;* z5 K9 u" E4 _1 ]. ?: _
LONG i;* b5 Z6 W; r" J$ y; s
CHAR buf[256];
. C; [4 Y8 J6 t. R, k+ l! xi = 0;
2 ~! k9 M8 |+ c! {/ {# K2 f' } Qdo {
/ K6 p0 S) _- f, M: x! Q9 b& X+ gmodeSwitch = EnumDisplaySettings(NULL, i, &devMode);
: p9 {# l. v' t9 H" ]0 Ii++;) [6 W$ q8 B$ c
} while(( (devMode.dmBitsPerPel!=16)4 l) J3 q3 `# P u
||(devMode.dmPelsWidth != w)3 F2 u* T* o; y; z& W J1 _6 g1 Q
||(devMode.dmPelsHeight != h) )
* O& }& ^6 i$ `/ L8 r: s&& (modeSwitch) );1 h P. s9 E" N4 G
/* Okay see if we found a mode */
% p5 D0 G9 H7 U+ A3 ]: ~! @' Cif (!modeSwitch) { }# l1 p; F- c9 E* b% C" T
else {
1 L+ Q2 E3 j6 d/ t: K( jmodeSwitch = ChangeDisplaySettings(&devMode, 0);# O- s. y( ~7 |# P4 u! s' ^
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
/ N# {* P- l! m) \1 k{: I, x+ f4 f% G e5 a3 n
//Might be running in Windows95, let's try without the hertz change
F/ P8 V) a0 q0 `. Z) xdevMode.dmBitsPerPel = 16;7 t- ? ?& E( t* o( B% G
devMode.dmPelsWidth = w;6 f! ]+ d, n: ~7 Z
devMode.dmPelsHeight = h;
k+ U$ M& Y1 ~) G+ t1 MdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
* r: l$ Q$ ^9 X9 S- WmodeSwitch = ChangeDisplaySettings(&devMode, 0);
$ K/ e1 b; e$ h}9 R3 O9 e9 ?+ C4 q
}
* Y9 V) U7 d, L A: O) j0 vreturn TRUE;
1 U7 n6 Q1 [5 c, {}
S J5 D$ @/ x2 o4 x样本程序
* E, ^6 m, T S! V ` `说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P> |
zan
|