QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>4 C. w: o8 E! L  \/ T2 G: {
<>具体如下:</P>
) N! [- ^% F1 d<>在窗口类的CreateParam()成员函数中加入如下语句:
# U$ B$ h0 H7 M- ?Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;3 \- g5 r% e. u* t/ S9 p. ]7 {
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 . u8 F: g: g+ V# p0 `
仍在窗口类的CreateParam()成员函数,加入如下语句:' p/ V: {) M4 P% P
ChangeResolution(800,600);7 l- E& t+ y6 J& k0 |8 G
Params.Width=800;9 k3 x4 h# P. t; F
Params.Height=600;
/ x% T1 f  A# `9 v2 qParams.X=Params.Y=0;: I  V% |0 A3 E; m/ l
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
6 {4 A1 M% r/ R0 D1 S6 v! |, o然后修改窗体大小使之占满全屏。 2 `% v3 e- b" a& S3 {
ChangeResolution()是一个自编的小函数,其原理如下:
" }4 E! S/ e! E# ?- @5 A: X2 Q用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
0 G2 a; L# n, T- ?) E用WINAPI:ChangeDisplaySettings()修改显示模式。 ; e$ o7 _4 \& P; [. M" G
ChangeResolution()的完整代码:</P>
2 U% K  x6 k7 }6 h% u<>BOOL ChangeResolution(DWORD w, DWORD h) {( K# P5 z* c2 x1 d% q7 ^! q
DEVMODE devMode;2 u; H, A" z' w9 r4 I2 f) J9 @5 K% e
LONG modeSwitch;
/ J; _7 d, o' ]6 _8 a/ x! _7 SLONG i;1 L+ m) V1 Q0 t, t* N# {( J7 t
CHAR buf[256];) G+ J" e! k3 H4 y+ y
i = 0;3 `8 w3 M$ \- s6 t- ^
do {/ S- U% Z" M& _, Z/ @. S
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);: A6 Q; r5 q3 \6 s
i++;4 f0 w/ o3 g6 H% [- K. \
} while(( (devMode.dmBitsPerPel!=16)
% G: ^" B8 @  ^; ^- U+ B; Z||(devMode.dmPelsWidth != w)
2 Q$ w# @# d  X4 W: Z3 r1 d. G  b# s||(devMode.dmPelsHeight != h) )
0 X& z8 g0 _2 r% W&amp;&amp; (modeSwitch) );" v% A: |' v( x' c/ H- A5 T6 R8 p
/* Okay see if we found a mode */
% U  Y- l/ G. [3 S; Xif (!modeSwitch) { }- d& Q/ e* d9 n& J/ q+ e* n8 W
else {. F! o' F, U( O7 k+ D( l  \
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);3 c5 I0 E9 y! {: T, p6 W  x
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
' o6 E. ~( V$ K+ ]. H{* @' Z; a- G. V# G6 ]
//Might be running in Windows95, let's try without the hertz change
8 B" {- q6 V# j9 H& B/ K& ndevMode.dmBitsPerPel = 16;/ E! q2 \$ t* ~  F2 v0 P
devMode.dmPelsWidth = w;
  o; N- f: v! y  TdevMode.dmPelsHeight = h;
, V7 [0 P, `" ?5 H" h$ ^" f* gdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;4 ^+ `$ @( g  [
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
! v1 M$ o* r7 z4 I$ a4 J9 U}
$ d; P  T  V8 o( f0 R! a* X}4 l: _3 ?* g- m
return TRUE;
9 C/ [, @/ O" Z2 A}
/ z6 `1 p4 b% E, ~3 y, ]0 w! ^样本程序
" g. I4 f6 b4 H" W- \' n说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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 11:00 , Processed in 0.280083 second(s), 51 queries .

回顶部