QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
% w) X% n( [5 N<>具体如下:</P>8 g0 f' B# a+ C# r
<>在窗口类的CreateParam()成员函数中加入如下语句:+ p( O- u! X. S3 x( N, ~
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
; j$ H" g! P2 U0 h, x将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
" Q: @" X3 P" I+ H仍在窗口类的CreateParam()成员函数,加入如下语句:
. h- X/ D3 G5 z5 R3 \ChangeResolution(800,600);4 L  Y, ^8 J3 f. O$ K: q: Y
Params.Width=800;
- K- R9 S% V! NParams.Height=600;9 a# w; v$ n: S# x7 v8 Y, z
Params.X=Params.Y=0;
) H* h0 L, m% y* Z% H& I第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
- ?; @  B  a! T! J& D然后修改窗体大小使之占满全屏。
5 H1 p2 v+ b5 v, U& L/ TChangeResolution()是一个自编的小函数,其原理如下:
( f7 x9 w# X5 u0 \用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 % g, Y) L: G; M  N. M. p- w0 W
用WINAPI:ChangeDisplaySettings()修改显示模式。 3 g) r4 s& s% P5 n" U) j
ChangeResolution()的完整代码:</P># R4 Q7 D, }/ `, S3 u
<>BOOL ChangeResolution(DWORD w, DWORD h) {) Z/ t9 |1 \% p" l) Y
DEVMODE devMode;
/ {# [' K! h4 \9 c6 G1 @LONG modeSwitch;
, s% i; y+ ~* J6 Y- fLONG i;
( A' T5 P9 s- N% Y/ X9 o; J+ d: r2 ^CHAR buf[256];
* L) |# i. @' Z% H! J$ e7 |1 V! X+ vi = 0;
! I" b6 W6 W; w& Wdo {! `8 v) Y* L6 C+ t, c: B
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);. G1 _8 {7 K/ J/ ^
i++;
$ c- a9 Q' v  ]4 r6 |7 w( |} while(( (devMode.dmBitsPerPel!=16)
# g6 }* R" y$ a7 x( H||(devMode.dmPelsWidth != w)
; E  e+ t7 y6 R/ h& W4 t  w! y+ P||(devMode.dmPelsHeight != h) )
: j# C; q7 ]( O) j&amp;&amp; (modeSwitch) );% u  e: b; j# `. X* S& ~0 L; J' E! i
/* Okay see if we found a mode */8 {8 r/ y8 \, S, H6 m
if (!modeSwitch) { }- N5 s) ~. l; m5 o
else {' X) y9 Y9 S/ }5 V- K
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);6 h, j8 y0 \. |
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
- c/ S9 P% ~8 E" |/ O2 `{
- u6 ]' V% q0 S//Might be running in Windows95, let's try without the hertz change
5 ]# f* L7 x8 m+ vdevMode.dmBitsPerPel = 16;
2 a/ r  j7 |" A6 xdevMode.dmPelsWidth = w;6 L9 I* ~" k  g' w: M- l; w
devMode.dmPelsHeight = h;1 }2 G5 m( p1 p5 ]" q' m: J
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
% s$ U3 P* ?. Z/ ?0 mmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);' t8 w) q) p" P% Z% y/ X7 }
}
, B2 D& h8 F" \0 _3 F. i1 f0 N}/ B$ S8 n$ p, @; @! @: k4 q
return TRUE;
' [: S2 D/ `9 H9 E  {2 b7 P7 Q}
$ v" ?. s: @8 \9 b5 f: L2 t样本程序
5 W8 Q0 P6 f) {/ E说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-5-11 18:08 , Processed in 0.369280 second(s), 52 queries .

回顶部