- 在线时间
- 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>8 u2 b/ q1 ^! ^
< >具体如下:</P>" Y, C/ p& x' Q A/ I) X
< >在窗口类的CreateParam()成员函数中加入如下语句:
* I' H) }8 ]3 K4 n+ l, Q# ~Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
# |0 @& U) W( z2 m3 W将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 - @4 B( T, A6 J- t5 l6 k9 D$ X6 Q7 R
仍在窗口类的CreateParam()成员函数,加入如下语句:4 `2 B: r! Y( f- Z
ChangeResolution(800,600);! ^, s. K& @3 H) v; E3 d% T% ~
Params.Width=800;/ G0 m/ a" M. P/ W* M
Params.Height=600;4 e$ ]9 q: k/ t& r1 P: _
Params.X=Params.Y=0;/ \6 `" y* V q8 I) `: a! }. |
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)4 B+ M( V. w; i% x( z* L4 V
然后修改窗体大小使之占满全屏。
8 p `/ ~+ q" z: e$ hChangeResolution()是一个自编的小函数,其原理如下:
. ]5 ^: B* _; W8 |用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
; d0 F) m# ?& m' C% t( H用WINAPI:ChangeDisplaySettings()修改显示模式。 # ^1 Z' j5 Y) |) h
ChangeResolution()的完整代码:</P>$ C2 ?) A. m* z* k% G8 X
< >BOOL ChangeResolution(DWORD w, DWORD h) {
% @. p; L/ C/ X/ fDEVMODE devMode;; o6 I+ f2 q: ~" k1 q4 _) v" W
LONG modeSwitch;/ `' R, J, u9 h- E) c4 |
LONG i;7 z& l) T2 ^# Z
CHAR buf[256];8 H( c: r6 X! c2 _5 O
i = 0;. V7 {% z7 ?" Q$ f6 W# @
do {( Y6 X% A5 E4 r4 |; S! B
modeSwitch = EnumDisplaySettings(NULL, i, &devMode);
/ ?& _3 ?5 }- A8 Y5 u* _7 ui++;
( t6 T" o1 {- n- z* y5 |1 ?} while(( (devMode.dmBitsPerPel!=16)6 K: @; e) Z$ d6 W6 N- s
||(devMode.dmPelsWidth != w)
/ Y8 A! P5 e, M* L||(devMode.dmPelsHeight != h) )
& B; \) h- b1 i3 s) C9 C. b&& (modeSwitch) );9 \, H( h, d8 Z1 R$ G6 O) G+ k
/* Okay see if we found a mode */) h) v, w# t4 d7 R, x
if (!modeSwitch) { }
% d1 ?' d0 \" oelse {
5 s" H% ]8 l0 a3 B+ {: x( qmodeSwitch = ChangeDisplaySettings(&devMode, 0);
" Z V: e1 h7 u* e- [if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
' C C4 l0 a! Y% m* q2 ?1 I( |7 L' H+ S{
; x: f8 j. f* i9 h5 N9 ]//Might be running in Windows95, let's try without the hertz change' m1 x% A; f* h0 ?# P
devMode.dmBitsPerPel = 16;
7 `* s- F7 G! V2 {: PdevMode.dmPelsWidth = w;4 r) q: x4 Z- r( b; a* Y& ?- z4 O
devMode.dmPelsHeight = h;0 ]: A+ y9 ~( {6 u% N8 l+ \
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;5 q/ s% `. s, q( u% n- B& b
modeSwitch = ChangeDisplaySettings(&devMode, 0);
) k) F. @: q" t) B/ I}9 U0 i1 i$ a, p6 I! [5 ]
}1 H1 ]+ s- W4 m9 j' ]2 a% L
return TRUE;
h2 {: v4 m8 C/ v}
4 G6 C) y, F5 c2 x; S3 x6 j& e样本程序
P! ~1 U% e5 ], y7 q0 x说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P> |
zan
|