QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
% B0 j0 t  r9 C* K% X* w<>具体如下:</P>: C9 l/ L. ]" f; b; k( l6 m
<>在窗口类的CreateParam()成员函数中加入如下语句:9 w* y& s+ L( \6 |3 m: F' S
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
3 s  ^& j. f9 ~. O' k将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
" E3 i3 Q7 c3 f仍在窗口类的CreateParam()成员函数,加入如下语句:% w& X6 e0 a5 e2 _1 ~
ChangeResolution(800,600);) ?4 D9 x8 `# P
Params.Width=800;8 D/ _8 z4 i9 P* ~4 Z7 \) `
Params.Height=600;
4 ]4 V8 n' h2 HParams.X=Params.Y=0;
& o. X) _- A( E2 U! E4 v- v/ U第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
, o4 n3 L! \$ \然后修改窗体大小使之占满全屏。
4 s' b+ i2 j, J6 ^' e6 ?ChangeResolution()是一个自编的小函数,其原理如下:   |9 o$ T( c! k' b5 f
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 0 s0 U; G. _! S- x4 h; @( u
用WINAPI:ChangeDisplaySettings()修改显示模式。
: V  L# W: v7 J/ R+ [! OChangeResolution()的完整代码:</P>
2 B3 _8 H! q# P<>BOOL ChangeResolution(DWORD w, DWORD h) {
  h% @. B0 v: r" z* M4 ~DEVMODE devMode;
2 l9 b3 H9 f, ?# ]* ?, b' r% KLONG modeSwitch;
. p6 m  U; d+ aLONG i;
# k( F9 _  ~# @7 f7 X& PCHAR buf[256];
& L" e, t- |- t' x8 wi = 0;
  d: x' `; o5 S! ^3 g% Qdo {
4 L9 p5 j( i& v8 ?/ {modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
# ?0 f9 h* N& I$ R; ~+ Ai++;
: E1 d; O. C9 G& S( o} while(( (devMode.dmBitsPerPel!=16)
+ E' g" `' y/ y$ \||(devMode.dmPelsWidth != w)
! ?. r: D0 q1 J" F6 q* W% }||(devMode.dmPelsHeight != h) )4 T- k3 Z! Z( T3 ?1 @( ]. h4 Q+ K
&amp;&amp; (modeSwitch) );9 Y! d1 T& m' C. S5 g
/* Okay see if we found a mode */
" {5 `4 v: q. O4 zif (!modeSwitch) { }# L# n. `0 X; g6 m" c/ t2 N
else {) K/ |# t) n+ e) A6 m6 u8 ?
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);: f' M, M3 w% D7 r
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
- M, j7 }! @$ r# r$ h{2 t- b8 T; Q- T: }% Q3 n
//Might be running in Windows95, let's try without the hertz change
7 F, \: h/ N/ r2 z8 `+ l; ?devMode.dmBitsPerPel = 16;
4 D+ Q. {4 [% I- {! }6 edevMode.dmPelsWidth = w;
* |0 E! c5 t5 {& wdevMode.dmPelsHeight = h;
: R1 \- V4 _1 i- j/ BdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;% C4 E: j# m0 @: ]) z( N& [
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
) Q! d2 G6 t' ^7 _! ?}9 a  z1 ~& ~' P. |! e% c8 U4 T
}8 B0 c" T+ m5 Q$ t7 t
return TRUE;
7 W# K  H/ g8 p1 f* v5 ?/ b9 c" l} 3 J: a8 y) I4 v9 u- l
样本程序 + L8 x2 J4 W" s0 n# g
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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 19:20 , Processed in 0.297536 second(s), 52 queries .

回顶部