QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4567|回复: 0
打印 上一主题 下一主题

BCB中实现全屏幕OpenGL

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
8 t$ f$ J& u- T" J- ^* y<>具体如下:</P>: ~+ ]" w4 ~& X& j8 Z
<>在窗口类的CreateParam()成员函数中加入如下语句:5 U; \6 S% i% {7 e9 M: c* i, U9 r: r
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
! v: r" [; g; }* Y7 d( z1 `将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 : C& B3 A; g  B* X/ ^
仍在窗口类的CreateParam()成员函数,加入如下语句:
/ A) z% }& B' r: D! ]6 YChangeResolution(800,600);. @. h' f" j4 Y/ I# @! x
Params.Width=800;
- f9 x5 s# y" P! X; e& D3 ?Params.Height=600;
, Q" ^  |0 I5 v5 X$ B3 B5 S  d6 B( n7 ?Params.X=Params.Y=0;
  e  r1 ^; d; H; c$ j第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)$ {$ F( A5 R' P7 S0 y* a" L8 j
然后修改窗体大小使之占满全屏。 & X( d# j5 n/ d$ J" M
ChangeResolution()是一个自编的小函数,其原理如下: 7 E, T5 ^8 h9 z5 |# [3 `* h4 S% g
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
2 O8 t- m8 F# f4 f; @: L0 z* t0 R用WINAPI:ChangeDisplaySettings()修改显示模式。 % v) v5 ]* S5 R% p2 D
ChangeResolution()的完整代码:</P>+ d' r# O8 l$ r' x6 U* ]
<>BOOL ChangeResolution(DWORD w, DWORD h) {( T- B; o/ q& T
DEVMODE devMode;
! U- H+ h# q3 v& _  y9 iLONG modeSwitch;
  Y3 p: s4 g, Q4 Q9 |LONG i;
$ g8 o  n& C4 _# o2 O& gCHAR buf[256];
7 ?2 e1 G4 Y2 \- \5 ci = 0;# ~) F; k3 `; H* |3 S; Q
do {2 g3 @: ?$ m2 o6 @% a
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
2 @6 g; S7 G  O; e7 K/ F3 w4 L+ oi++;8 ^" `% v6 j; S8 I  V% o, K+ f7 z
} while(( (devMode.dmBitsPerPel!=16)
* a9 z5 l/ }+ I' N||(devMode.dmPelsWidth != w)
0 M5 A( P) k; i# X/ U" q||(devMode.dmPelsHeight != h) )
5 s* N5 G& P8 _+ }' {3 D+ R; u% V) w&amp;&amp; (modeSwitch) );
: q, _4 S0 ?1 M& s4 X9 n/* Okay see if we found a mode */' K, C3 K2 g. O( x/ O: o& e
if (!modeSwitch) { }
7 E9 P& I5 p8 w$ [- @else {
5 p0 D9 _; G. b; x- V# z" B$ fmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);- N: P- @+ M/ d+ R4 w! ]+ ^
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)# `" q- h# h& D6 h
{/ n1 ^. ?: q: s5 {1 f
//Might be running in Windows95, let's try without the hertz change" K  U- C0 k& I3 a/ O0 E
devMode.dmBitsPerPel = 16;' P: i8 N3 o  @* h; }% t
devMode.dmPelsWidth = w;
2 \* `, w8 K4 h. ~5 Y- {. R- [* ~devMode.dmPelsHeight = h;6 {2 A+ z& w8 F& R0 r
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;) s( t' e' R. w, q
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);' J2 e' B+ v  r0 b8 l7 |4 m8 L
}
9 \, U1 I- G& ]# p+ {' {( q# ?}0 H6 l" ~0 w: N! r$ Q
return TRUE;( ?# ^5 _. X8 i: V( j6 H
}
& f: x) Y% a3 w! ^5 G8 r样本程序 8 R( O9 ~/ z3 }
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-20 12:39 , Processed in 0.415073 second(s), 52 queries .

回顶部