QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
( K$ U6 c5 e* S<>具体如下:</P>
/ W( q0 f7 K/ @0 B" _7 S9 `<>在窗口类的CreateParam()成员函数中加入如下语句:
8 X+ c4 h2 w% K3 F* p- L3 _Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
1 S' j$ q9 b# D, M. N, R# c将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 & u0 }0 a8 d1 k' e2 i: K
仍在窗口类的CreateParam()成员函数,加入如下语句:
% j, W3 [  x3 V  ]: b2 sChangeResolution(800,600);
0 n. m4 l3 T7 uParams.Width=800;# L% f+ `, \/ t( h
Params.Height=600;# e* V8 E; e5 z1 f& m' y. N
Params.X=Params.Y=0;
# t+ [$ ]5 V( @' I% c+ V9 V第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
7 Q8 e, n6 |0 J9 J然后修改窗体大小使之占满全屏。 0 r  l6 d, t! d& g# w
ChangeResolution()是一个自编的小函数,其原理如下:
9 Z' o+ F# @' D. u0 E0 w$ i用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 ' \- f5 B, h& m9 T! G9 ?% j( V
用WINAPI:ChangeDisplaySettings()修改显示模式。
- I4 e0 X! E0 p3 ~& f/ {, lChangeResolution()的完整代码:</P>
. v. I" _' i( E& g1 z( C<>BOOL ChangeResolution(DWORD w, DWORD h) {
" t) m3 q* y" ]( [7 TDEVMODE devMode;
( y3 E9 J+ a$ g$ s9 ILONG modeSwitch;
. v) C+ V! p  I# g* d0 E9 u$ kLONG i;
" I: S5 D: K+ D' {CHAR buf[256];
2 g) e/ z7 B+ {' i3 ^2 Hi = 0;* a: Q: Z$ M; h
do {
) y. ~  V0 c: r, _( SmodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
" @0 O1 t9 O/ I+ L# D& ti++;# p9 y7 u) e, }9 y1 N3 k
} while(( (devMode.dmBitsPerPel!=16)9 S, X7 B- r6 [& z: R
||(devMode.dmPelsWidth != w)
1 q6 L+ Z1 p0 m6 N, y||(devMode.dmPelsHeight != h) )5 |+ p' J) @7 Q) }( f) ]
&amp;&amp; (modeSwitch) );- L3 _( U6 q1 m7 L: `5 x4 |* v, d
/* Okay see if we found a mode */
% Z$ C& m2 {. nif (!modeSwitch) { }
5 u! ]+ S% h( g0 Z7 U5 Ielse {
6 F+ z6 B& M6 \modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);+ i( v- m* }$ i% L3 o8 ?% b+ t/ |
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
/ {" Z- D" x7 r  a8 @" u{
2 N' o6 z8 F* g) d  z. ]//Might be running in Windows95, let's try without the hertz change+ D0 S4 H$ L! F+ b) R
devMode.dmBitsPerPel = 16;
: q8 R+ Y3 a6 z# FdevMode.dmPelsWidth = w;' C* u  z" m; ]+ ?
devMode.dmPelsHeight = h;  D3 ^$ B/ U+ h) S) O1 i9 j
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;1 Z' a$ t& t8 s& G* a9 j5 C
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);4 g* J4 {' L! K0 M  W/ n% F
}
' S+ O! p; r) a4 {1 p  {6 A}
, p$ P" E" [" C4 c: C2 _& I) Creturn TRUE;+ }- e5 f, w. a# q, y( x7 r
}
5 H* e9 K; F7 J4 `& w. p样本程序
2 W. G, G7 W; Z- ^, g5 d6 C说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-4-20 13:43 , Processed in 0.367245 second(s), 52 queries .

回顶部