QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P># K1 G& B+ \9 `+ f2 b, {
<>具体如下:</P>
* n& E* v/ A4 k; w' ?0 ?; [. _<>在窗口类的CreateParam()成员函数中加入如下语句:
- q! w% b6 ~) O  H* n! k% rParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
/ a6 U" ~/ Z4 V/ a0 @3 d# M将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 ' R. S. Y* F, u* W7 W" a- z2 R/ T
仍在窗口类的CreateParam()成员函数,加入如下语句:  d2 D5 |! X* W" v/ b( G
ChangeResolution(800,600);
5 d0 C7 H' k& e' {5 NParams.Width=800;2 ?/ t. z0 ?+ j- u6 k* L$ T
Params.Height=600;
: i/ X0 Y- O+ F; c" VParams.X=Params.Y=0;
' g) V' M. R; m4 U0 p第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)" E& s5 C' n* h) O8 J# \) w
然后修改窗体大小使之占满全屏。
. }' D6 `/ w0 m: K- B- gChangeResolution()是一个自编的小函数,其原理如下:
/ o8 Y, u' O: [7 i用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 ' c0 F( W4 j% P# q4 t7 r+ N! [- I0 |
用WINAPI:ChangeDisplaySettings()修改显示模式。 ! y* m' B  \$ I1 H
ChangeResolution()的完整代码:</P>
$ m2 G% b0 Z/ [4 B<>BOOL ChangeResolution(DWORD w, DWORD h) {
! u! L" v& f, [/ G6 s& \( LDEVMODE devMode;
# s8 b6 C2 `5 Z! ~# s! p9 a4 |# L; ALONG modeSwitch;
# }5 R+ o" V( M* hLONG i;; |& G0 q4 \) P. @# ]% W% H8 ?8 }
CHAR buf[256];4 `4 N/ [; X; G( l+ S5 J
i = 0;
& y( Y8 r* b; q  k* K- o& hdo {5 [& F8 V3 n6 i3 b
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);/ g$ D) T9 _- P; ?; n
i++;
( |, Y4 J  A% {& I} while(( (devMode.dmBitsPerPel!=16)! b7 T( U- K) ^1 B8 q- ^1 s" e* X
||(devMode.dmPelsWidth != w)
+ `# @- e, s0 {0 Y0 t||(devMode.dmPelsHeight != h) ): ?, u0 B) a" m$ s, g: v
&amp;&amp; (modeSwitch) );' N9 E* C- _7 k
/* Okay see if we found a mode */2 l9 k7 j. J" Z  B3 s( ~( d* C) @
if (!modeSwitch) { }. Q0 @+ a' V3 F- k( N  ]. I
else {
& n# l5 z7 I+ j9 Y2 j. JmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
% J# Z8 ~5 N  f7 ~) l/ G0 _( Jif (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
0 R2 T, O+ t& `{( z! K  _7 R3 b$ f- T" j
//Might be running in Windows95, let's try without the hertz change
' A0 g2 k2 E; R: W' _devMode.dmBitsPerPel = 16;& _3 Q# @, {4 h* B9 O" {
devMode.dmPelsWidth = w;
+ n+ y- j. R' ?9 N" m; ^devMode.dmPelsHeight = h;
6 N  u$ `- g6 p4 `devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;% ~* p" I# |  ]  p
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);; u3 G6 m: k$ [6 E4 O$ a( x3 }" p# [
}, l9 R" Y, Q7 ^1 F6 t% Y3 }
}% U* D7 l  L. y$ L1 P9 \
return TRUE;
4 m8 g) W, B0 s# K0 p& o/ G. p}
3 a- |* G8 i6 v. X  M( R& A2 r* r" _7 z样本程序 ) |: S8 f# @4 d3 B+ I
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-21 05:53 , Processed in 0.456718 second(s), 52 queries .

回顶部