QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
( f& y: `: w& y3 [! Y& _' X' {<>具体如下:</P>% u" Q% x/ d: w1 M7 k; D6 B) g
<>在窗口类的CreateParam()成员函数中加入如下语句:  }# C. j0 }7 u2 s8 K; X
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
9 e/ S- l, |$ |& p( d9 v3 j& m将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
4 K& ]5 m2 p& L/ J1 A! y) x0 p仍在窗口类的CreateParam()成员函数,加入如下语句:
! _  {; v5 c1 Q- ^( ^ChangeResolution(800,600);# G) W4 D- x  j
Params.Width=800;4 _" `- K' I0 N  g
Params.Height=600;
& c( ^' X! p% b1 H3 {1 _9 KParams.X=Params.Y=0;( l7 j- v2 ~* g, D. S0 j1 @
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
. ~% m9 M: D9 P0 j# S* g' F' C然后修改窗体大小使之占满全屏。 ! ]  @! ]" I* Z1 ^" W
ChangeResolution()是一个自编的小函数,其原理如下: 3 U- k+ k/ a4 g" m
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
6 E7 [7 X& y* d( m3 H  j用WINAPI:ChangeDisplaySettings()修改显示模式。 3 ^) `( j. Q! A! ]$ w
ChangeResolution()的完整代码:</P>
8 q  @1 Z6 C) C4 x  ?<>BOOL ChangeResolution(DWORD w, DWORD h) {
6 z$ _1 w% f& DDEVMODE devMode;
* ~" [; s" U+ z. n! PLONG modeSwitch;
+ K' k) R# W2 Y' pLONG i;  V1 y; w  f6 y2 s& f# d2 D! x* p
CHAR buf[256];6 k4 R) \+ O7 f0 I% V1 Z8 \
i = 0;! H2 C3 g, ~* d2 ?( r
do {
1 f. l6 e  X1 `4 }1 u' W0 lmodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
: h* |! e: ]6 N% b4 X2 F1 j( k( \i++;
" b5 L6 ~( M: v- r; h/ U} while(( (devMode.dmBitsPerPel!=16), c1 G1 V7 [" v( M. b1 I
||(devMode.dmPelsWidth != w)2 H( o1 Y" z7 g6 a+ |
||(devMode.dmPelsHeight != h) )
: S( R* ^/ \; r! z4 n4 n2 I&amp;&amp; (modeSwitch) );
: H" l; t- ~- C# _/* Okay see if we found a mode */
3 U/ o6 R/ n3 F. M& `; _4 l* ?2 Eif (!modeSwitch) { }4 |* K/ t" @* y
else {
$ W" g4 m2 Q: w' o( m8 LmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);+ F  u* u% h( P: p3 [$ z5 a* U
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL); R, C4 f+ u0 }2 L2 S6 r8 U
{& j6 @3 `" S9 n6 Z* w' P- s6 @- c7 a6 A
//Might be running in Windows95, let's try without the hertz change
# K* p' m% x' V! d7 J* r+ TdevMode.dmBitsPerPel = 16;
7 M# [7 q- Q8 W; F. i3 {# ^* H- VdevMode.dmPelsWidth = w;% J, Z; d; ]1 I$ j
devMode.dmPelsHeight = h;
+ g* x4 [* H8 B) ^9 h( EdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;1 m) S( ?, z8 ]3 c
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);$ G, A$ i" |9 y/ R
}
; X& O' Z6 e: n7 y}4 L/ ]: O6 N' O8 b+ `, Z
return TRUE;
  ~7 z: b- w2 b. J0 c0 L} 6 k* W. V5 K% w" d3 }6 c! M
样本程序
' w; h9 w: W) ]5 f9 T1 N说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-8-14 11:59 , Processed in 0.560499 second(s), 51 queries .

回顶部