QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
+ s) \$ |% L2 a; ?<>具体如下:</P>( O, V9 [4 q/ m2 ]' d" D) w, ~4 Y
<>在窗口类的CreateParam()成员函数中加入如下语句:$ S; l- v% b7 n; m
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;! h' i0 t) g! x" I! L: M0 t
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 ( {" ]5 }9 `. _# p8 z
仍在窗口类的CreateParam()成员函数,加入如下语句:3 O, x+ N1 Z0 a, b+ J% S/ u* E, t
ChangeResolution(800,600);
, a% D5 f/ \6 S" YParams.Width=800;% N* p! d6 r6 h' y
Params.Height=600;# c  |3 p9 e& C+ _
Params.X=Params.Y=0;2 R2 x) N% V: l& R, W0 h
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)8 y6 n% o8 ?# H0 e
然后修改窗体大小使之占满全屏。 ' C' E; ^3 p+ }8 {$ Q$ T  s
ChangeResolution()是一个自编的小函数,其原理如下:
) r3 C4 J6 W: E  ?, s用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
$ I. K" s4 v; m) T+ f用WINAPI:ChangeDisplaySettings()修改显示模式。
0 p+ f2 |# }( CChangeResolution()的完整代码:</P>8 ?2 p! d+ Y7 k1 m
<>BOOL ChangeResolution(DWORD w, DWORD h) {
1 G7 ?8 t' W2 K/ c- DDEVMODE devMode;( W- n) y/ s! Z
LONG modeSwitch;' X0 \" ?$ I, @5 J% A. f; Q
LONG i;
* V+ k- C2 g$ NCHAR buf[256];! W: v8 a$ P8 I0 }
i = 0;
; }) [. U2 M6 O0 r/ pdo {
- j$ M0 N$ {1 [modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);( j# _/ m+ \- c8 Q1 v! \
i++;
  s+ A4 y2 c4 B& S. a} while(( (devMode.dmBitsPerPel!=16)
' M0 V$ S7 X9 K- v' U# g& R||(devMode.dmPelsWidth != w)! @# f% ?! m2 N
||(devMode.dmPelsHeight != h) )/ v$ k! E( i! V2 T
&amp;&amp; (modeSwitch) );# K3 w' h0 A1 V, N
/* Okay see if we found a mode */
" w/ V2 i/ o$ V5 g: yif (!modeSwitch) { }2 t$ S! W+ s! t% B
else {
0 V6 O. g6 f9 d0 K. ~modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
5 ~5 P% F+ [8 j0 uif (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
4 b; Q* S1 ^7 r5 {, N& {  {% R; y{
! K; n9 S) z6 I9 A7 f( Y7 |//Might be running in Windows95, let's try without the hertz change) H: ]6 _' h0 J+ j. a$ d
devMode.dmBitsPerPel = 16;9 [4 L( u; @  o' y2 u
devMode.dmPelsWidth = w;
: j& }1 p& f4 {8 E; ~& a" O$ mdevMode.dmPelsHeight = h;2 V; e, \4 ]) C0 q  g7 `
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
: w1 h- ^$ b  FmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
' l) A3 R7 r: S$ ^6 o3 T$ i}- ~: l! x; P+ C
}
5 ?1 F, U/ V" S5 h* Hreturn TRUE;$ o) p  j$ n) t3 l9 t6 b8 [5 R) k0 C
} - q7 b3 K$ k4 x  p) B
样本程序
' m( Y" c# N$ m7 ~( d" e3 V% K7 a说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-6-11 02:55 , Processed in 0.370682 second(s), 51 queries .

回顶部