QQ登录

只需要一步,快速开始

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

BCB中实现全屏幕OpenGL

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
4 K$ h- {. |0 V0 ]7 X( v# V. q5 Z<>具体如下:</P>6 G( {# k% P6 s
<>在窗口类的CreateParam()成员函数中加入如下语句:7 q0 w" F! F" k! k: U9 b% ~( }
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
! N" \# x) G/ ?& v将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
4 B* V) D2 o7 W# r8 d仍在窗口类的CreateParam()成员函数,加入如下语句:5 X$ [! p3 y0 N3 f9 x& A$ R( h
ChangeResolution(800,600);, u" U$ Q7 Y" g* Q# @/ {
Params.Width=800;
+ Z$ D' O& l: h' v8 uParams.Height=600;
; D+ n$ j1 z/ A: R0 B; k7 y. A3 [Params.X=Params.Y=0;
0 X, ]" n5 w9 e7 ?* @* B第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)2 Y. T. h2 N. q" m
然后修改窗体大小使之占满全屏。 $ u' v0 @0 p1 \. B
ChangeResolution()是一个自编的小函数,其原理如下:
4 m& B* u' i; \; h$ J用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式
& T, |' a( r2 p' G' N用WINAPI:ChangeDisplaySettings()修改显示模式。   u- \; R, |* o5 A
ChangeResolution()的完整代码:</P>
% ]" X# d: Q/ ]; r- D<>BOOL ChangeResolution(DWORD w, DWORD h) {; S: X" T5 o: L/ r/ q2 P
DEVMODE devMode;+ V: q- @/ M- l4 i- [! E' O
LONG modeSwitch;+ y' W' S* s# Y/ L+ u; @9 Y: U
LONG i;
7 y% G2 r6 F( ACHAR buf[256];& N$ K$ x- W, R; G0 d! a" z3 Y% ~
i = 0;$ V; ]$ x7 S; _- w3 R
do {
# d# H7 u1 W4 k8 v8 |0 hmodeSwitch = EnumDisplaySettings(NULL, i, &amp;devMode);5 U! B5 p3 q; B, [4 w9 L
i++;8 {$ }6 [, _% ^) q, g
} while(( (devMode.dmBitsPerPel!=16)
( `4 X( M$ R9 A. u  Q||(devMode.dmPelsWidth != w)$ i4 w7 Q. b1 M7 ?$ T6 ^3 `  @
||(devMode.dmPelsHeight != h) )
( ~6 K' i% G# E% F2 u8 R# c&amp;&amp; (modeSwitch) );
- ^: q& P6 M& Z, U+ X/* Okay see if we found a mode */& ?- u9 [# F: R' c" a
if (!modeSwitch) { }, U$ ^3 o$ v4 {2 O4 B# w5 F2 E
else {
# x" {8 x$ w2 u5 R1 f# [: LmodeSwitch = ChangeDisplaySettings(&amp;devMode, 0);3 {. `. G  T. L) I
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)  q7 P- V9 B. t( G; ]( u; v
{, d3 Q7 [* c3 K. x0 S: v
//Might be running in Windows95, let's try without the hertz change$ S( Z% U. b; c6 P( |
devMode.dmBitsPerPel = 16;# p1 G! M, m! {: U) X- A3 c
devMode.dmPelsWidth = w;
  u: n6 M' O% p4 |devMode.dmPelsHeight = h;
" e  M. U9 g, W# x) z7 y$ ^devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;6 |3 k6 ], ~. I; w: ?# O4 e5 K
modeSwitch = ChangeDisplaySettings(&amp;devMode, 0);
9 m$ ], D% j. Q: S1 V}
% l2 u2 p" n; }4 a; j! o}
: w" @7 B; x- L' G3 R( areturn TRUE;5 q" s8 Y/ b0 r. |
} ' L% g7 y$ ]8 q+ d% L% C
样本程序
( j  {9 o/ \1 d说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(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-9-1 11:23 , Processed in 0.394725 second(s), 51 queries .

回顶部