QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>% S2 Q% n  N! G8 T( n
<>具体如下:</P>
0 z! l7 X; G+ J. W; I<>在窗口类的CreateParam()成员函数中加入如下语句:
0 m  n4 `! {0 H+ [4 C' [" v6 OParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;5 w, }5 _& y( l0 _& c6 k
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
3 N  q: j9 L6 b4 f# n仍在窗口类的CreateParam()成员函数,加入如下语句:' l# o. Y' C+ W+ N% E% }5 ]: S
ChangeResolution(800,600);! V7 }1 K3 K& S8 g; z, f
Params.Width=800;
3 r& p( A- m8 N: P& R9 G" uParams.Height=600;4 \' B6 {; }$ U5 p
Params.X=Params.Y=0;, f; r6 l& Z# Q9 B+ V; m8 l
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)6 z! U0 N1 ~! b( A
然后修改窗体大小使之占满全屏。 0 V% ^( c# i/ ?5 O- F* i7 p/ |
ChangeResolution()是一个自编的小函数,其原理如下: - r+ f5 B9 K$ ^1 ?  [! J0 K
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 7 T1 U6 ^4 W- f- J+ `4 L
用WINAPI:ChangeDisplaySettings()修改显示模式。   b: f6 c5 u- f! f$ m" g# O+ w4 \3 p
ChangeResolution()的完整代码:</P>0 k' \( y% q! e5 H- \: z/ D; H
<>BOOL ChangeResolution(DWORD w, DWORD h) {, S; B1 x$ j8 o# s1 z& s! V
DEVMODE devMode;
3 U7 m7 g: {" J  P! X6 Y7 ]LONG modeSwitch;
$ F* T7 U  S$ {% f$ d! CLONG i;
9 N* Z  J) ?  Z/ ^CHAR buf[256];
9 I3 M$ E* Y5 i0 [8 x  j$ g. M# ?i = 0;
; z2 Y  V4 ~7 [9 z6 v0 S+ d8 N( xdo {
3 m3 b: y% K" T, FmodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);8 @: Z* b# v: K. F- \$ G7 B
i++;! [! `/ ?% F6 H7 r5 V' ?
} while(( (devMode.dmBitsPerPel!=16)
  ^) m1 B: ?2 _6 ~) |4 x||(devMode.dmPelsWidth != w)
  ~3 o6 A/ @7 \4 P||(devMode.dmPelsHeight != h) )( d2 F/ e% S' d1 A
&amp;&amp; (modeSwitch) );/ A& t) J5 K+ g$ y% i# R: N
/* Okay see if we found a mode */
+ S0 h( o) L* t; j1 a; X$ F- lif (!modeSwitch) { }$ j3 \! G) S- U) i+ I+ _8 _
else {% D1 j; K* }$ x4 \. k7 B2 |
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);$ h$ w1 q2 l8 i" s/ e6 m' V$ ~
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
; p& ?/ S5 L( s' U0 l9 N# I0 I{6 c; T1 Q( B" f
//Might be running in Windows95, let's try without the hertz change- r" A: y& y% o* p. B% _& R. h
devMode.dmBitsPerPel = 16;* u2 E3 d  o, q' d8 X4 B" A/ b- C
devMode.dmPelsWidth = w;2 J  d" r% \; g3 G9 f
devMode.dmPelsHeight = h;
, b2 b+ P$ \6 Q! ~devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;6 u4 f2 }# X  `4 {- X# e# c
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
$ v/ M, q( ]4 p9 a: v5 p* |  U}5 S+ U+ t2 @# w, H' B
}; O" O% l; Q4 w1 L; b$ @* K
return TRUE;1 M, M& f" v  C: u1 Z' P9 j1 K  p
} 5 l5 @+ M0 p! Y( T! \' }
样本程序 ; l, u; C: r0 j2 @
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-12 12:43 , Processed in 0.445882 second(s), 52 queries .

回顶部