QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>) o, D' Q& r: v% a* Z; M- W
<>具体如下:</P>
: P0 A2 P- T$ E- v" n; \5 @<>在窗口类的CreateParam()成员函数中加入如下语句:
. Y( |& z) ^; M( ?Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
! P' O% _$ O5 R7 ?将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 4 q1 _3 [9 F$ k8 R* P* S  ]2 d
仍在窗口类的CreateParam()成员函数,加入如下语句:
: x+ O) ]8 ^' V' LChangeResolution(800,600);6 S3 i: S1 i! p) e
Params.Width=800;
. d9 Y5 z9 w# p" L' g* PParams.Height=600;0 t1 K: X3 V- _/ O
Params.X=Params.Y=0;
+ ^! K% X( r4 I! M: f第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
: c% \! n: \* D  w然后修改窗体大小使之占满全屏。
$ f* ^" @4 L/ J! d8 w) k( _ChangeResolution()是一个自编的小函数,其原理如下:
) _. e  f9 Z$ Q; K$ Z8 \% B2 q" j用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
# m, D& w0 W9 o. {5 m用WINAPI:ChangeDisplaySettings()修改显示模式。
6 v+ G7 h  k/ Q4 XChangeResolution()的完整代码:</P>+ o# _4 e! u9 c" b- D; o
<>BOOL ChangeResolution(DWORD w, DWORD h) {
9 r( U: X% \. d: l8 d8 rDEVMODE devMode;
7 F" S. H7 K) P) ?) i8 M1 CLONG modeSwitch;* z5 K9 u" E4 _1 ]. ?: _
LONG i;* b5 Z6 W; r" J$ y; s
CHAR buf[256];
. C; [4 Y8 J6 t. R, k+ l! xi = 0;
2 ~! k9 M8 |+ c! {/ {# K2 f' }  Qdo {
/ K6 p0 S) _- f, M: x! Q9 b& X+ gmodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
: p9 {# l. v' t9 H" ]0 Ii++;) [6 W$ q8 B$ c
} while(( (devMode.dmBitsPerPel!=16)4 l) J3 q3 `# P  u
||(devMode.dmPelsWidth != w)3 F2 u* T* o; y; z& W  J1 _6 g1 Q
||(devMode.dmPelsHeight != h) )
* O& }& ^6 i$ `/ L8 r: s&amp;&amp; (modeSwitch) );1 h  P. s9 E" N4 G
/* Okay see if we found a mode */
% p5 D0 G9 H7 U+ A3 ]: ~! @' Cif (!modeSwitch) { }# l1 p; F- c9 E* b% C" T
else {
1 L+ Q2 E3 j6 d/ t: K( jmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);# O- s. y( ~7 |# P4 u! s' ^
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
/ N# {* P- l! m) \1 k{: I, x+ f4 f% G  e5 a3 n
//Might be running in Windows95, let's try without the hertz change
  F/ P8 V) a0 q0 `. Z) xdevMode.dmBitsPerPel = 16;7 t- ?  ?& E( t* o( B% G
devMode.dmPelsWidth = w;6 f! ]+ d, n: ~7 Z
devMode.dmPelsHeight = h;
  k+ U$ M& Y1 ~) G+ t1 MdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
* r: l$ Q$ ^9 X9 S- WmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
$ K/ e1 b; e$ h}9 R3 O9 e9 ?+ C4 q
}
* Y9 V) U7 d, L  A: O) j0 vreturn TRUE;
1 U7 n6 Q1 [5 c, {}
  S  J5 D$ @/ x2 o4 x样本程序
* E, ^6 m, T  S! V  `  `说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-7-17 23:15 , Processed in 0.484165 second(s), 51 queries .

回顶部