QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
: }/ t: D9 X' K+ U<>具体如下:</P>. u4 B2 ]7 ]$ A) q
<>在窗口类的CreateParam()成员函数中加入如下语句:% y7 Y  j' s/ O+ p0 i, i7 {
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;" i3 j% s5 J5 Y4 A, o* m
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
$ I7 P# \' _1 J' ]$ p# n仍在窗口类的CreateParam()成员函数,加入如下语句:  r. X& q& O" D' r* O+ ^; R
ChangeResolution(800,600);9 P1 R; I( A3 t0 A( f. W; }
Params.Width=800;9 \, H  x2 `: B$ ~
Params.Height=600;
6 U! Z' }* J( \% D( D' qParams.X=Params.Y=0;
- \& h  n; J& M; ?第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)9 P$ ~! n3 Q! c
然后修改窗体大小使之占满全屏。
/ F$ [) q. S8 \  AChangeResolution()是一个自编的小函数,其原理如下:
, e/ J: c6 x# {4 o4 d0 g- \  M用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 3 f8 v4 }* w, H  N- \9 L/ U/ p
用WINAPI:ChangeDisplaySettings()修改显示模式。
/ D& P& U3 N: FChangeResolution()的完整代码:</P>
; y4 g$ b0 \5 c<>BOOL ChangeResolution(DWORD w, DWORD h) {! }( G8 k1 ]% u: \
DEVMODE devMode;) w2 A1 j* T+ l7 f: m4 N  y( r
LONG modeSwitch;
( x- ~. g( w& S' h4 r, xLONG i;
0 s9 @1 p, T9 b9 X# G) pCHAR buf[256];
+ [# D9 R. T8 [3 t/ K/ [i = 0;: ^. g8 u! n7 G' l5 C1 o1 s6 v  k
do {5 X8 o( |7 B/ Y) o1 s
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
3 p1 v' R( Q4 e, c& J$ E& ^i++;7 q6 P! d/ H" D) [+ l$ x8 N/ `+ [
} while(( (devMode.dmBitsPerPel!=16)& z! _5 P4 J2 v- L- q2 V1 h
||(devMode.dmPelsWidth != w)1 T" p: c& B7 i: r- l# f
||(devMode.dmPelsHeight != h) )
" ~% B6 C; G! Q  r3 O* q8 p" m# w&amp;&amp; (modeSwitch) );( M4 r8 k" j9 u2 G% J5 v! T$ v- v
/* Okay see if we found a mode */
6 p+ @: Q* X6 M) Eif (!modeSwitch) { }
4 _: u6 `! ~& G7 M3 e2 \) n0 b* ielse {" R$ |5 p9 r4 w
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);0 y, L! Q. i5 P( ]
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)% l( ?# B3 L! ~- T
{6 a( C+ L* T4 K# J3 G! E% Y+ s  H
//Might be running in Windows95, let's try without the hertz change* v" g7 w& C. C6 s: F6 ]6 o& `' y6 T
devMode.dmBitsPerPel = 16;
" Q; i7 O. |" ?: O& C3 x* W1 e( E- EdevMode.dmPelsWidth = w;
6 Q: X' q7 g8 ^4 L. o( ?2 ddevMode.dmPelsHeight = h;  p% q; J( Y1 s0 q
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;" R' n0 R& @& y4 V- b
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
9 c/ C: [- _5 ~4 }}1 U, }7 x2 X- A. v" u- N
}* X, z" j- E) {6 [
return TRUE;7 [* A) U+ q& m
}
2 x2 U& Z+ \$ A7 M5 f; g$ j样本程序
+ T$ z) X; v1 t9 ^" f# h说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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 12:03 , Processed in 0.401657 second(s), 52 queries .

回顶部