QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
6 z5 D' `5 _# f+ u; S- j; Y& G* |# w<>具体如下:</P>+ X' u1 ~! P0 m" o  M8 |
<>在窗口类的CreateParam()成员函数中加入如下语句:
6 S( T; t1 n# N* C3 eParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;  i  ?/ y3 R$ E' u$ o7 [; @) l1 }
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
% B; ?' q9 E) H* ~8 n! T8 T仍在窗口类的CreateParam()成员函数,加入如下语句:0 s2 b/ x  C4 x- x+ F% P) g$ d
ChangeResolution(800,600);/ k& l  T( {* X
Params.Width=800;+ W+ S5 t( T' i
Params.Height=600;
0 S. N% V) V) [: p  I& B4 D% DParams.X=Params.Y=0;' j2 |6 M% y4 C+ S5 |' o
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
+ e7 H: M8 u$ H6 P- k5 Z* u$ t  W然后修改窗体大小使之占满全屏。 & z3 u9 {. e9 H( @  Q8 W. D- A8 \
ChangeResolution()是一个自编的小函数,其原理如下: 0 z1 j/ m6 M/ Y% z/ f
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 - b7 |* j/ ]6 `1 |" g" e; H
用WINAPI:ChangeDisplaySettings()修改显示模式。
& u3 }- E# V6 y  ]6 U. G' u) rChangeResolution()的完整代码:</P>
  r+ ?& G: o+ R# @. x9 s<>BOOL ChangeResolution(DWORD w, DWORD h) {
' J7 F' N" ]% B& [  X$ s; pDEVMODE devMode;
3 X! ~0 }, h3 e0 OLONG modeSwitch;" U' L5 ~% m/ @$ }, i
LONG i;
# Y9 E) y1 s9 D  m; I! MCHAR buf[256];
% i1 N( _7 G0 Ni = 0;
5 P+ j9 l/ }* f1 v1 `5 E; R6 \do {7 Y) t* q5 i3 A% ?; R/ c
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
$ z- M7 C  t5 ^: o& Yi++;1 h3 E" a  y5 M* e4 ?- k' U
} while(( (devMode.dmBitsPerPel!=16)
- F% ]4 w0 U5 M||(devMode.dmPelsWidth != w)
! _. H2 `% N# f- E; g||(devMode.dmPelsHeight != h) )
9 L/ T; f" a9 ^4 e; Y&amp;&amp; (modeSwitch) );
+ v# e% y( U2 G' ^/* Okay see if we found a mode */* F9 Y0 f$ ?4 O1 m8 j
if (!modeSwitch) { }6 O4 W( U1 D: c# I3 v8 j
else {$ N( y7 m* [8 a+ H3 {8 Y! z. k/ \
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
! C0 A0 q$ i. a  O0 W) ?if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
6 f- O! t7 V6 `- x7 c7 p5 k6 p{9 Y: }( o3 O9 x9 C( \' G# K, w
//Might be running in Windows95, let's try without the hertz change
# o: d3 f' j# gdevMode.dmBitsPerPel = 16;1 _! ~& R! H8 ?6 j, d" c
devMode.dmPelsWidth = w;
" g# J& @, _4 bdevMode.dmPelsHeight = h;
  o6 h' u: q( X& o/ P4 B& Q# qdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
) i3 t) X) d; r. R8 e: ImodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
+ c# O; C1 A8 h/ R}
1 e3 |$ j6 Q4 }6 |/ Y}
9 a# \" M0 m+ _/ d5 Q& c' H# `return TRUE;5 ], R5 r. g4 }6 q7 K6 q$ ]( k
}
: O& i8 U0 z) E* Z7 K+ L: C样本程序
% B: ~/ J/ m2 K- r说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-9-1 14:47 , Processed in 0.378723 second(s), 51 queries .

回顶部