QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>6 Y' V0 ?/ x! m& o  [) I
<>具体如下:</P>" T2 ]- L5 ]! j2 v$ q4 A% g; T
<>在窗口类的CreateParam()成员函数中加入如下语句:
1 r; O$ j& ~  V$ m$ t3 N4 IParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;6 O3 w1 q1 [: P' o* I+ Q: Q% s9 L
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 4 \! p+ H1 f4 a
仍在窗口类的CreateParam()成员函数,加入如下语句:
7 Z: \1 G, j' D, F' mChangeResolution(800,600);- Q8 B' u. D1 Y6 h- z
Params.Width=800;7 l+ f/ z6 h7 d/ T* r8 _
Params.Height=600;
' q- U2 {7 f; P( ]$ eParams.X=Params.Y=0;
  Z" _, F2 w( Y" z) v) z/ Y第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
* \$ p5 d* A: f% e然后修改窗体大小使之占满全屏。 ' L  ]3 }: G( J, q
ChangeResolution()是一个自编的小函数,其原理如下: 1 G# g. O; O) A8 ]; q2 X& p
用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 : |$ \7 W4 k, k, _. ^* P- F" k
用WINAPI:ChangeDisplaySettings()修改显示模式。
, d6 i/ [+ V: B" Z: EChangeResolution()的完整代码:</P>3 P3 X  b! J( o- _7 _( ~
<>BOOL ChangeResolution(DWORD w, DWORD h) {
+ m6 N: ]; [. R7 T$ rDEVMODE devMode;
$ Z, ^# C' g( X! ?' x, [LONG modeSwitch;
1 r, j7 K6 u* m- ?# B  @LONG i;$ L( K- j. G6 A& a9 U; ]
CHAR buf[256];! O" s9 C1 z; \: [1 R" g' j* b
i = 0;$ Y# I5 n/ Q* T+ M! u
do {& y, ^! [* e$ Q" e1 o  n& j( l* z4 p
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);8 I* w  c5 l0 S8 ?2 @; P& _
i++;
& ^6 Q% b/ g4 B/ o0 h$ B- U$ U} while(( (devMode.dmBitsPerPel!=16)
8 Z! L$ a9 s2 |3 A  r6 F. b||(devMode.dmPelsWidth != w)
6 r& G- p' _3 o9 j||(devMode.dmPelsHeight != h) )% A5 p: ]6 x+ ]% P  C
&amp;&amp; (modeSwitch) );8 C1 N" O8 ], ^* _+ g
/* Okay see if we found a mode */
! W# \# i/ k1 v# l8 u5 \7 q0 {if (!modeSwitch) { }
# }6 ^! t  ~9 ielse {
8 o; {4 {- X& J- [) umodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
5 Q# k; p! E1 E( wif (modeSwitch!=DISP_CHANGE_SUCCESSFUL)6 f. i9 _1 C' V! _
{
% s5 i0 I/ G' V; k//Might be running in Windows95, let's try without the hertz change/ V+ {2 k8 a0 X& W2 ^$ |, w
devMode.dmBitsPerPel = 16;
: Z9 C5 m( m- d) I7 V3 ]" b% VdevMode.dmPelsWidth = w;
$ m6 `5 n7 f. a7 u9 qdevMode.dmPelsHeight = h;+ k* N* b5 v) \. p
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
3 H! Y( D5 x5 e/ ^" nmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);* M7 s  U/ l6 b1 U
}) ^$ ^; y. {- e% U# Q  V& D
}& x  N! u6 Y1 K
return TRUE;
: X: [/ _1 t5 |7 R$ o0 Y2 {6 ?! B0 u}
! y$ V4 J% t+ K+ q5 j样本程序 8 L! I% z3 m. R* @6 v
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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, 2025-8-7 17:27 , Processed in 0.779402 second(s), 51 queries .

回顶部