QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
; ]& N8 J3 w2 A. k7 ~/ J& k<>具体如下:</P>
; W% t1 @$ ]. @3 |! C<>在窗口类的CreateParam()成员函数中加入如下语句:- o# t2 }8 }- N7 m) d3 H
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;% w) E7 }' \. b5 J
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 & a3 R- v  c9 c# R( R% {
仍在窗口类的CreateParam()成员函数,加入如下语句:
: O& }9 }7 F9 }# U: ~& wChangeResolution(800,600);0 N& U. Q6 }5 z
Params.Width=800;
7 [: s; r8 j3 eParams.Height=600;
/ ?: u) f$ j2 g+ ^! @4 MParams.X=Params.Y=0;) c) K. v0 R7 y/ w, `) V4 ]; \% ^
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
4 _; `, M: z  x然后修改窗体大小使之占满全屏。
. E9 L2 h! C& K' z) ?$ f$ LChangeResolution()是一个自编的小函数,其原理如下: ) q* e2 F4 w6 C7 }  k$ X3 Z5 G$ C! I
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 7 y0 d6 p5 O2 z+ N9 ^: m% N
用WINAPI:ChangeDisplaySettings()修改显示模式。
& J: Q1 }5 m0 M* fChangeResolution()的完整代码:</P>
/ N% v+ r# X: `* ]<>BOOL ChangeResolution(DWORD w, DWORD h) {, R- P4 D( h# l9 C
DEVMODE devMode;$ W& ~" p; i  ~" J
LONG modeSwitch;2 Y' @: }% c# i! s" p
LONG i;
5 [+ U- _2 O5 VCHAR buf[256];7 f4 t! a4 @! p% K3 X
i = 0;
: v2 Q' H4 K  ?1 m7 Ydo {$ Z. k& r+ \3 v( n; [! N+ Y
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
0 Q" `2 n$ A8 _9 l1 q! }i++;' R3 D4 P5 O  V* B- Z
} while(( (devMode.dmBitsPerPel!=16)
  b' h$ k6 Z5 }( S1 q||(devMode.dmPelsWidth != w)
3 a. e9 S. _, D2 y' E||(devMode.dmPelsHeight != h) )
* L+ B8 Y- E8 y9 M9 ]/ A7 ^&amp;&amp; (modeSwitch) );
( w% g5 _; p/ X* ^3 P/* Okay see if we found a mode */
; k  I9 P- ~  _# u- J7 J; Oif (!modeSwitch) { }+ T" s3 y9 P+ q' j0 U7 T! ?
else {4 p6 t+ X4 S3 m
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);$ [& A+ O+ @' p" m0 \" A2 k
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
: R$ y. p+ S7 ]% j2 m{. J0 o9 `$ M0 z  K
//Might be running in Windows95, let's try without the hertz change$ C; M) L6 P% {7 A' t4 j) P, T5 t
devMode.dmBitsPerPel = 16;+ @5 \2 b* y& ~+ D& g4 R
devMode.dmPelsWidth = w;; e* ^0 t, s+ {/ n- R/ P
devMode.dmPelsHeight = h;  C" a' B# U7 D
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
6 {) g' K/ R; g! x* Q% BmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);+ k  B9 H8 m- T6 h$ N% I' h3 Q' S
}
# K: v: O- [- w5 x) n}
$ k- l# V; q' e3 z  t& Ureturn TRUE;0 g1 t/ w6 t7 j- b$ O9 w6 M
} ( g5 R: A, l5 d7 `
样本程序 ! Q& v. N3 S9 d8 `! h$ M
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-10-17 08:17 , Processed in 0.554452 second(s), 51 queries .

回顶部