QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
' @0 t4 R. ~# G( E' H  h8 j0 ?<>具体如下:</P>
( M" w8 T7 y1 ~0 ?1 b7 V; I+ [<>在窗口类的CreateParam()成员函数中加入如下语句:3 u8 H, W8 ^5 o) F9 ~6 k
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;6 ]( v% M, @9 _- s3 d
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
6 ?( A$ |8 r+ u. m* l2 Z仍在窗口类的CreateParam()成员函数,加入如下语句:
" \- v) K: I# `9 |1 tChangeResolution(800,600);% y$ Z/ c  G- e+ M" X
Params.Width=800;' }& g3 d6 D" V) |9 _: v
Params.Height=600;
' _# R# N* H$ j! f% u; _Params.X=Params.Y=0;
4 o4 _6 I/ `, ^2 D3 \: ^' c0 \第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)6 G* J, V1 t6 H
然后修改窗体大小使之占满全屏。
8 T; q/ N% T! v2 GChangeResolution()是一个自编的小函数,其原理如下: * e+ }0 m3 O5 H1 W6 B# i; H) }
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
, C4 V2 J: F6 f7 o/ R5 r用WINAPI:ChangeDisplaySettings()修改显示模式。 - E! d5 e4 \0 n" I# y( I
ChangeResolution()的完整代码:</P>
; A  S- h4 |; C. \<>BOOL ChangeResolution(DWORD w, DWORD h) {
( l+ ]4 M% l2 u7 Q$ l- NDEVMODE devMode;
- O9 u1 p2 y: @; e. w3 KLONG modeSwitch;
2 j6 L8 V9 K& r9 C# X/ f8 }LONG i;
3 \6 ^+ t3 [+ y. m$ W4 DCHAR buf[256];# R+ `' z' I4 H3 G& k4 C" V
i = 0;
+ Z2 m. T6 F' |7 `, Ndo {; x! r$ b3 b" n9 t
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);; ], v0 X9 c$ `& g. A  ]
i++;
  ]# ?- q& J6 K, @} while(( (devMode.dmBitsPerPel!=16)3 E1 t) _4 e9 e0 V
||(devMode.dmPelsWidth != w): m2 g7 F2 A! j7 p
||(devMode.dmPelsHeight != h) )
5 r: T7 @0 C$ ^) ?&amp;&amp; (modeSwitch) );
% N: v' ?+ J/ J8 [, O+ B/* Okay see if we found a mode */
& S) s+ U' {1 t2 f" j7 @& J4 nif (!modeSwitch) { }
5 r8 L. A, d6 [5 n  Gelse {! L4 G# R2 o1 C  K: J: Y) j0 ]! k
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
  ^2 j) @# w0 [! q+ O# A3 \if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)/ r# S$ T: @) Z& g* N4 ^2 d
{
" b, F6 w6 `' c9 Z: O//Might be running in Windows95, let's try without the hertz change
+ V6 @- f9 L4 B& X. q, hdevMode.dmBitsPerPel = 16;
+ j1 J( A+ o& e+ c! h# j( i, ydevMode.dmPelsWidth = w;
6 C% V- a% b4 ydevMode.dmPelsHeight = h;
8 ?8 b0 `# [' i+ ~- e0 ndevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
) ^  @  g( y8 ^- w( EmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);2 c) X+ k6 v& f0 w9 n
}$ P) U2 c) S) \$ W* s
}
/ d: ^: c4 {/ M4 z- Breturn TRUE;, {, H1 E: {: \5 i9 M
} 1 k* C. q1 U3 n9 ^3 z9 w' V
样本程序
  c" i  @0 b' N: L说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-8-8 18:54 , Processed in 0.563618 second(s), 52 queries .

回顶部