QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
( y" M' |3 r' _# `  j, L+ E<>具体如下:</P>
  R; S1 b; x: p# X<>在窗口类的CreateParam()成员函数中加入如下语句:
/ j1 O. [2 w$ M. ^5 KParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
2 v) y8 P3 W: |4 y  s: |将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
2 a+ h7 l, O: O! O# Y$ y1 p* Y( @仍在窗口类的CreateParam()成员函数,加入如下语句:+ j+ O- w, V1 N, C. K  x( v
ChangeResolution(800,600);
, }! j  F6 V' j# kParams.Width=800;
& R: R+ u% D' B; r1 sParams.Height=600;
9 r( ?% `% `" |) \# [+ a1 oParams.X=Params.Y=0;6 a. _2 N9 t. O# g( h
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
5 C3 j9 {( R0 a' z0 x然后修改窗体大小使之占满全屏。 + C1 t8 t0 U6 d9 f$ Q
ChangeResolution()是一个自编的小函数,其原理如下:
! E' A; Y! R5 w用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
! e: i% }7 N+ q- y/ Z* l用WINAPI:ChangeDisplaySettings()修改显示模式。 1 N: D: _( o; g. `2 ~: T% n
ChangeResolution()的完整代码:</P>9 k# |6 X/ c0 K, j! L
<>BOOL ChangeResolution(DWORD w, DWORD h) {( c  G% u2 E! i
DEVMODE devMode;9 J5 @! M, l5 A. c3 Z+ Z3 w
LONG modeSwitch;$ P' }" K% u# j- J
LONG i;) A/ B) B9 a" V; S" ]- v
CHAR buf[256];& u& @2 I( l- l, P: T
i = 0;
7 z: T- N5 V0 p) odo {
3 A& _( Y) ~" j) dmodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);
* a' l( a/ \- }& Y) Di++;
3 A: W, i1 }2 E4 T} while(( (devMode.dmBitsPerPel!=16)5 N/ g, M8 [1 i( m# c
||(devMode.dmPelsWidth != w)8 O. s! s) f4 I
||(devMode.dmPelsHeight != h) )1 d/ S7 Q2 A  J  ~5 v
&amp;&amp; (modeSwitch) );; J7 c; ~6 P; X1 T
/* Okay see if we found a mode */6 j& D8 |' o% K8 t1 C. C
if (!modeSwitch) { }0 P$ o6 ?( o" A/ D, N3 X3 T& \
else {
  [1 o0 E, @" d% v( o7 n& |  t) C' kmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
; O7 m" i2 N% L& C' p9 s- p: w2 X! hif (modeSwitch!=DISP_CHANGE_SUCCESSFUL)0 d6 `8 l! }+ b- q
{
! N* r8 R% z( ^//Might be running in Windows95, let's try without the hertz change
' R; N2 ?7 C' n8 _  MdevMode.dmBitsPerPel = 16;
: q) A2 o" D! pdevMode.dmPelsWidth = w;
1 P7 t  u- t! DdevMode.dmPelsHeight = h;' S7 _  ^5 E' ^4 g
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
$ w2 K4 B8 q& q! _modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
8 k, K& t8 r' v8 m$ ~$ F- r}
; ^) L1 g) D  P% A}& f- [, V4 S1 h2 T, w( Q# u
return TRUE;
* \1 t$ x; C0 ]1 N) I} 2 n5 q  F+ _8 b) U
样本程序
3 b* W3 K0 W3 _- X2 ~说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-7-25 01:47 , Processed in 0.624630 second(s), 53 queries .

回顶部