QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
) H, X- s0 P$ r2 R<>具体如下:</P>* O$ q" u5 z8 P9 s! E6 N9 h+ h
<>在窗口类的CreateParam()成员函数中加入如下语句:1 Y3 ~1 H0 T# M3 l+ U3 S
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;5 Q1 @- p. ]# W
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
3 D4 r" A8 }" W8 x7 f1 C仍在窗口类的CreateParam()成员函数,加入如下语句:
; H7 _4 V' J% C: p: V( v1 N! EChangeResolution(800,600);6 t7 @' z* Z) S/ c% t% p3 H
Params.Width=800;
* h" V! L9 [3 [; X, ?/ C# eParams.Height=600;& k8 V) w( _8 o, s
Params.X=Params.Y=0;
% Q( R; E& N, {; _' T6 `第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
7 W6 @: @2 ^: Y% L" C$ E然后修改窗体大小使之占满全屏。 2 y3 W9 g% S  K: B; v
ChangeResolution()是一个自编的小函数,其原理如下:
& D- r: ^$ \4 b8 o用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
/ d9 E+ |4 d7 L用WINAPI:ChangeDisplaySettings()修改显示模式。
% v& H/ Q/ k1 M/ CChangeResolution()的完整代码:</P>
  Y! t: U/ U/ K0 d# w  e<>BOOL ChangeResolution(DWORD w, DWORD h) {$ }, d& ?, w5 k/ [% {
DEVMODE devMode;
/ {- h: J9 F$ o* h1 ]LONG modeSwitch;+ u+ V' _* l6 M; E# |
LONG i;8 n! c  f! R# g, Y* m
CHAR buf[256];
% D  ?$ E7 G6 D1 J) i  w$ Yi = 0;  O" _/ u8 I- ?4 W( o' y
do {# `* @0 j3 i( A6 c4 j) a& b
modeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);; a- z* k& C0 o+ b
i++;3 b  V, q! D4 D6 @3 B1 }
} while(( (devMode.dmBitsPerPel!=16)$ {' t5 _- z5 D, o9 j9 P
||(devMode.dmPelsWidth != w)3 y. m) x+ j' v# z, M$ t
||(devMode.dmPelsHeight != h) )6 P" s" m0 r2 m5 [
&amp;&amp; (modeSwitch) );$ c8 h6 C& V  E  B. A
/* Okay see if we found a mode */( ~/ f* C# h# o/ k6 X( ~
if (!modeSwitch) { }
8 a! @  u8 M8 z9 r% U' B) telse {
3 T5 [  N) |+ T! WmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);: u0 S8 e  @2 @4 N, n/ q, O4 J+ O$ {
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
5 z8 e% u& w' U6 ?9 s2 j{; F4 b1 y9 H" c5 {; r# y
//Might be running in Windows95, let's try without the hertz change. G2 i& |6 o, e6 x) u+ A- x* Z
devMode.dmBitsPerPel = 16;# H1 {5 j# Q) v4 I5 @
devMode.dmPelsWidth = w;
8 n4 ^1 P9 x0 u( idevMode.dmPelsHeight = h;
" N1 R# O; g# h- Y1 @5 }8 _devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
& c& b, w# u4 emodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
/ M7 v. y! @! D% b) B1 g8 |$ {, I}
* ~" W: m2 _% |' u! D9 x) X4 e}8 i& d0 T4 [3 M. j. \/ `; n! b
return TRUE;
+ M0 g- p3 b4 C7 v}
( {! O# g  X- B样本程序 - K' Y& W( ?  Q3 K4 T
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-5-12 19:24 , Processed in 0.403118 second(s), 51 queries .

回顶部