QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>7 `2 W8 ?! I3 j& c9 q
<>具体如下:</P>1 ~$ r- `0 v. [1 w7 V: q
<>在窗口类的CreateParam()成员函数中加入如下语句:
% F' N9 x2 g# OParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
( E# y/ [6 }6 R& k9 x将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
1 B2 Q" ]9 C3 t仍在窗口类的CreateParam()成员函数,加入如下语句:/ ?  n4 a& c0 ]# L" q  B' b! f
ChangeResolution(800,600);1 P3 ^" P7 K/ ~. i6 b
Params.Width=800;
5 \' k; E! |* f6 \Params.Height=600;
' D2 ^, R5 _$ ^; D7 m; GParams.X=Params.Y=0;
) z4 S! }6 A8 t0 g' ^& \$ g第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
$ K! d9 x/ G: z1 Q) ]然后修改窗体大小使之占满全屏。 0 i, Z. _+ G2 A4 z9 m
ChangeResolution()是一个自编的小函数,其原理如下:
6 Y8 _6 y2 y. [" F9 O0 ]用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 1 H; S( _  |1 z8 |; X
用WINAPI:ChangeDisplaySettings()修改显示模式。 ' Q- j7 h) U, ^9 m
ChangeResolution()的完整代码:</P>
- s% J) }* {: t' R$ x6 F<>BOOL ChangeResolution(DWORD w, DWORD h) {
4 O8 L' ~6 F$ P4 E. V- f6 XDEVMODE devMode;6 G; H' i) U, c, F; P
LONG modeSwitch;
6 K" h" F, k: o7 D+ }5 ALONG i;
& x' C) ]' l% ^+ p6 w0 NCHAR buf[256];# q" V2 `- p, }  i9 m. V) u/ w+ }; r8 a
i = 0;! n7 w" o2 q$ k* P
do {
' I: e# l( {; ^) N- g/ ImodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
) k! a/ E2 j" ji++;8 X! Q$ J* H) |5 A1 m
} while(( (devMode.dmBitsPerPel!=16)6 a, M5 n, c( H) |
||(devMode.dmPelsWidth != w)
) U: P5 g3 \# d4 U8 g0 n1 M||(devMode.dmPelsHeight != h) )) W$ T# C* }5 R2 P: ~  |  r
&amp;&amp; (modeSwitch) );: J% G/ w; H: x" H" i! N' X
/* Okay see if we found a mode */
7 b! P5 y9 _) e2 e# B' Y3 rif (!modeSwitch) { }' K3 `0 A/ R) K; X; B' c% F
else {. t/ F. ~$ p3 p  v
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);+ K+ d7 c. B* J
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)8 g/ L2 ^& Z  N  R
{* p6 ?2 i4 g4 Q' L' t& ?* b8 ~
//Might be running in Windows95, let's try without the hertz change9 d5 n3 G/ H" ]3 P
devMode.dmBitsPerPel = 16;# M$ w9 S, f# _6 {' V( Z
devMode.dmPelsWidth = w;
. |; A' j  ~3 r; G, tdevMode.dmPelsHeight = h;' l- ^7 E# }* g( X( |& M6 [6 n
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
2 Y  [" G# U2 i; umodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
2 D4 m% T: ]- L" H1 X; N2 T}* v8 j4 h+ m: K/ E
}
) f6 m6 P& l0 e0 Areturn TRUE;
8 M, V6 H( W5 R0 o}
' L" ~( Y2 Q4 I" v7 q/ K; P% s* I样本程序
7 |6 A( S( f, I0 ~, R说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-8-8 20:55 , Processed in 0.300180 second(s), 52 queries .

回顶部