QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
& }& H# r; d' A7 \7 h8 O1 b<>具体如下:</P>
6 o, T  q6 [5 _5 ]6 {" T<>在窗口类的CreateParam()成员函数中加入如下语句:
/ M- i& Y: B- `) A0 `+ xParams.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
  P& O3 Z' E; K将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。 ' l, L2 E# j- x' ^. g: P
仍在窗口类的CreateParam()成员函数,加入如下语句:
  u* ?* O; |# v# K$ zChangeResolution(800,600);4 b  H6 E* k$ K8 T0 A
Params.Width=800;* H% x$ o/ j9 Z
Params.Height=600;
# `: @7 \, G6 A4 I+ t7 P) wParams.X=Params.Y=0;# [; Y9 C( c7 Y3 ^
第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)
1 I7 m" j* D6 B  T: p然后修改窗体大小使之占满全屏。
% ^: W/ c' O2 G4 l! C3 YChangeResolution()是一个自编的小函数,其原理如下:
& u! x+ c4 H- \) u5 m, S% G/ F用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 ( s* H' i! }4 k/ [2 c; t8 l
用WINAPI:ChangeDisplaySettings()修改显示模式。 " u; u& R8 l0 K7 h5 y- E/ G
ChangeResolution()的完整代码:</P>
5 D3 a8 S! u6 H3 g' `' t0 |<>BOOL ChangeResolution(DWORD w, DWORD h) {
% N7 `8 U2 p! N& ], lDEVMODE devMode;
% H" Z4 t3 A: @) kLONG modeSwitch;
* D2 ?! z, i0 \) cLONG i;9 R, J3 z: E1 ]. p
CHAR buf[256];
0 Z+ `" a# x6 \9 ji = 0;' C4 m! v: ^- p
do {
7 j0 C0 U8 S4 RmodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);+ g- Z% T8 q/ G4 _& T1 A/ C
i++;
& T# p" v9 ?- M- g# B- u! o" J} while(( (devMode.dmBitsPerPel!=16)
! j2 f' L; J3 \; Z||(devMode.dmPelsWidth != w)
. M' h( D+ u8 V9 q||(devMode.dmPelsHeight != h) )  ]; R0 o% t' Q0 G0 U
&amp;&amp; (modeSwitch) );7 e( g0 T: U3 F
/* Okay see if we found a mode */
+ K- }" C0 g: p' _if (!modeSwitch) { }8 o+ z& E+ k3 r* I! c! t9 |
else {
% E  p0 Q# P7 A9 b& T( I. |modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);5 P4 J) e# @& ?
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
8 q2 G6 ]! X% t  B{" z) V" o0 Z; U8 E
//Might be running in Windows95, let's try without the hertz change
8 e0 ~  @+ m- E) N" _/ tdevMode.dmBitsPerPel = 16;
, v4 w" D, e1 B% e4 Z) c! |0 p5 @devMode.dmPelsWidth = w;7 V* S- w" U8 z
devMode.dmPelsHeight = h;
- a5 z" N  q/ h* M+ WdevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
( f6 c" l9 P' [' @! \modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
7 j3 K0 @( }: Z4 s2 n0 v}
, c- L& C; [4 A9 I* ?+ ~+ p}; G& y7 V% n" B5 V- W2 |% E6 M! N
return TRUE;
/ g: b5 y0 J; x2 H}
& C6 D9 A0 l3 f4 f样本程序 8 ?) n. C* }2 K' P0 s: E& {
说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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 07:04 , Processed in 0.404530 second(s), 51 queries .

回顶部