QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
' y$ a1 [. u+ X$ r<>具体如下:</P>6 u( T5 [9 g6 \5 \6 ]# \6 _. [
<>在窗口类的CreateParam()成员函数中加入如下语句:
2 y( d1 N1 v! `" o7 F+ E5 @# F' JParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
' Y; L% R0 L3 f- r/ @6 q. {3 [# e将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
& A; [/ G7 E  \# o仍在窗口类的CreateParam()成员函数,加入如下语句:, k* Q% v" S- J7 l3 i2 g  T
ChangeResolution(800,600);" `" w' \+ A* U# @/ L
Params.Width=800;
9 W) ~3 U+ L- p& s4 eParams.Height=600;2 G/ Y4 _5 s9 ^1 M3 s4 Z+ C! D4 a
Params.X=Params.Y=0;
' k3 e9 s' N- A+ ~  G第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
* l. c' n' S1 B( m& S然后修改窗体大小使之占满全屏。 6 a! I' ~$ S, m; ?0 N
ChangeResolution()是一个自编的小函数,其原理如下: $ Y: o! ^; V: t, T/ C* o1 r. v
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 , s3 W' A4 a/ ^: h7 ?  h
用WINAPI:ChangeDisplaySettings()修改显示模式。
/ @9 t+ |+ }, N6 sChangeResolution()的完整代码:</P>' Y. v1 l& E# n. p
<>BOOL ChangeResolution(DWORD w, DWORD h) {: y0 P8 C! s+ X( u# F& v
DEVMODE devMode;1 E& f( F0 e( k7 z, T( x1 b3 B, o
LONG modeSwitch;
# W5 f5 c' \0 u% uLONG i;
" h$ |; M" D8 ?6 x; O+ XCHAR buf[256];9 @3 ~2 {* z" u
i = 0;7 n+ t9 k5 k$ M# [$ f
do {
& F. J2 C: t7 o" @2 K1 u3 ?modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
  M; ]! @; c+ f4 u7 j# Pi++;" w$ b( L* f8 m
} while(( (devMode.dmBitsPerPel!=16)& L( m( h( s! h; ]0 B
||(devMode.dmPelsWidth != w)5 O% A5 `8 k. }
||(devMode.dmPelsHeight != h) )7 R2 O0 I( x7 i. \
&amp;&amp; (modeSwitch) );
3 l4 @% N* y: a6 K8 D. @0 k/* Okay see if we found a mode */3 i! O6 e, b8 i5 k# A& E# o
if (!modeSwitch) { }" D8 ~' R) T0 O2 F5 j6 N5 ^
else {8 V3 v$ H, h% @% d) r
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);( z* G0 ]) w! ^; r$ I$ i* U
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL). t: s  i+ K7 b4 r
{
; x& a$ Y& s: ]6 U//Might be running in Windows95, let's try without the hertz change
' a% q. m2 L! _; n4 D2 EdevMode.dmBitsPerPel = 16;
1 J8 T* W) M: s& S7 o# F5 `devMode.dmPelsWidth = w;5 B+ G. q; g# r, g( a
devMode.dmPelsHeight = h;
# S# N4 ^" ]! y  y. M0 H+ e: ]devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
2 }( A* }  @8 P( }& P+ zmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
* n6 [' x% M! H2 D& o}
& F* P3 C: ^+ J* R3 e- @* M}* o6 q" c! ]5 ^$ U1 |& G
return TRUE;
4 Q- |" B. l$ t" K8 |0 ]0 n* t} % g) D+ v9 m% @2 W& i
样本程序 : E3 N7 f& T9 [+ c  ?: U$ 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-8-8 19:54 , Processed in 0.826447 second(s), 51 queries .

回顶部