QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>& M$ |1 f6 _4 x: l/ J5 B# L
<>具体如下:</P>
+ ^' A2 f% r2 F1 a8 l0 |4 ]<>在窗口类的CreateParam()成员函数中加入如下语句:
# K/ M2 n" @" N+ u" m6 xParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
  h% p) @  {7 N3 p将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
; v9 N" X+ p5 G0 @" j# a5 n8 z仍在窗口类的CreateParam()成员函数,加入如下语句:
4 i# W3 B( i9 uChangeResolution(800,600);0 X  [6 b1 g& |4 v
Params.Width=800;
1 z2 a' g  I, [, X3 W! EParams.Height=600;
- b. ?' ?" b$ M  c  R6 dParams.X=Params.Y=0;7 C$ i; C" O) [' N
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
; J  b% f3 k7 a' R% i# _然后修改窗体大小使之占满全屏。 6 t2 ?" Z' q# X; E- o# F& u
ChangeResolution()是一个自编的小函数,其原理如下: & E7 Q0 \. ~4 r
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 ! @7 q/ @4 |" `" e' h- P0 T
用WINAPI:ChangeDisplaySettings()修改显示模式。 . k% X, u5 T; @, I8 G! s* k
ChangeResolution()的完整代码:</P>7 M' L. ]5 j% y; w: F. l
<>BOOL ChangeResolution(DWORD w, DWORD h) {
: G: b3 W* v5 f- o8 mDEVMODE devMode;
7 b' e; X  d) x/ r0 MLONG modeSwitch;
, o$ Q2 b; p6 e. K" aLONG i;
% E* P7 P7 G; h9 }% m* kCHAR buf[256];) P/ h2 C! N( K9 O/ Y
i = 0;
+ |$ I0 C+ M7 l  W4 ]' o& ndo {$ N) D6 c. R, H  A1 z: D9 V
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);. `6 L# \2 L" C
i++;
9 O+ v: ^7 a+ @3 t! w} while(( (devMode.dmBitsPerPel!=16)
, G9 `; }: r5 f||(devMode.dmPelsWidth != w)
* A! r) T1 H5 U& ~% e6 O! ~5 I||(devMode.dmPelsHeight != h) )) v/ v  t; |% p5 R
&amp;&amp; (modeSwitch) );
4 i, e+ y2 R0 P+ h6 `) W/* Okay see if we found a mode */
" s" [& O7 L. e- i% E  [if (!modeSwitch) { }- O4 I0 P! A- o4 X3 ?8 p. t
else {) b' H! A3 ~, `! x
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);+ l4 d; m. g8 w4 W4 }
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)+ @6 k* a2 `( Z, G
{; ?. l+ {" j, E* ~- x
//Might be running in Windows95, let's try without the hertz change
' `) m1 H$ e# adevMode.dmBitsPerPel = 16;/ m, p" n+ f9 g% p  r" G  v' W
devMode.dmPelsWidth = w;: j5 ]7 y+ H# \! S" b0 O' h& r$ [" q
devMode.dmPelsHeight = h;
: ^, O" E' x5 a: R2 GdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;4 ]% U7 ?. P' {6 I
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);- V  H+ }5 T! N6 n
}7 h& b. p$ \1 x8 k* d5 s! Y2 t
}; s7 m8 W7 k. P3 I
return TRUE;
4 E- k$ A6 X4 J6 W6 }}
6 {% \$ a& [1 b" q* C6 v1 O! Y6 v样本程序
" N1 |% w) K( j7 c# |: b说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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, 2025-7-31 10:15 , Processed in 0.453496 second(s), 52 queries .

回顶部