QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
8 J& h+ V8 Y/ D6 i" I' N6 I<>具体如下:</P>
. G6 M% }2 Z1 G2 u7 q9 n<>在窗口类的CreateParam()成员函数中加入如下语句:
# J2 q( U% t1 z  a/ G4 `* HParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;1 Z7 q+ i3 H; [
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
0 p. T+ j9 W/ P  H6 K6 P# J仍在窗口类的CreateParam()成员函数,加入如下语句:
, w8 |% \6 y3 @9 D7 ?ChangeResolution(800,600);7 p- ?. M) v( N0 b, o
Params.Width=800;
1 M) D- e  {/ NParams.Height=600;
6 k+ K8 a1 h7 k5 `Params.X=Params.Y=0;) M; u3 D( z3 a0 |5 z3 t6 M# G) d
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
) @3 J$ n7 |3 l- ]; ?2 H) g然后修改窗体大小使之占满全屏。 ; [* e: F' X. E$ R' I# Y
ChangeResolution()是一个自编的小函数,其原理如下: ( a& V3 M2 [6 i/ n: p. r  h
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 8 f& z( H8 S5 Z/ ?
用WINAPI:ChangeDisplaySettings()修改显示模式。 4 v! k! ?  F( g1 f; |- _: L5 W
ChangeResolution()的完整代码:</P>( R' D/ x' q) R  L
<>BOOL ChangeResolution(DWORD w, DWORD h) {
. R  p. X: r. ]& GDEVMODE devMode;( i  ~) m# d0 U* Z2 M
LONG modeSwitch;
9 S0 j, W5 _% i% l0 K" R0 tLONG i;4 u/ X2 Q2 Z, J  J
CHAR buf[256];! D( C5 Q- e3 {+ }) N2 U/ h
i = 0;
$ g/ e3 l6 g3 H6 `do {
: v* n3 E: D+ {0 w; ImodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
% r& _+ ~2 i! B# i' \: p/ ji++;
8 c- m; Y/ H' t! r# F} while(( (devMode.dmBitsPerPel!=16)5 E4 h8 b! S4 O3 Z5 e# k
||(devMode.dmPelsWidth != w), s3 [, i. a2 c# J$ f3 ^; A
||(devMode.dmPelsHeight != h) )
8 B+ Z; g+ T4 |&amp;&amp; (modeSwitch) );3 S. S5 V# D% M
/* Okay see if we found a mode */8 F2 W& D6 |6 t* E2 g
if (!modeSwitch) { }
! K4 W1 `, i7 s" jelse {1 e/ R: m  B, B7 a% ^. L) z
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);4 F) g1 p3 K# z( G: i1 M
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)& m8 \1 }( L- O% g% i+ r
{/ D' K) Z- I) k* S& j
//Might be running in Windows95, let's try without the hertz change6 F. v4 j6 [5 c; a; I
devMode.dmBitsPerPel = 16;4 I* a% U* ~0 |8 o% [. N- V" G
devMode.dmPelsWidth = w;8 Z1 S! B) y! ?# L
devMode.dmPelsHeight = h;4 L6 ]1 U" X7 G4 G4 t1 f- d
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;2 q* {4 e4 @2 U( q4 [! F
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
1 J  b% V2 J% F& c" E}
$ |& M: @. W& l' O) O3 Q+ f2 x}# T8 V; `, f" u! v5 i& [  ~
return TRUE;
4 q, L! M1 ^; W/ j1 b} . `8 ?; [& ]7 X0 ^1 V& G6 b$ `
样本程序
" X* i! |. O* Q/ }1 X# R  P5 ^( Y说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-6-12 07:44 , Processed in 1.299214 second(s), 52 queries .

回顶部