- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
< >其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。</P>
: }/ t: D9 X' K+ U< >具体如下:</P>. u4 B2 ]7 ]$ A) q
< >在窗口类的CreateParam()成员函数中加入如下语句:% y7 Y j' s/ O+ p0 i, i7 {
Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;" i3 j% s5 J5 Y4 A, o* m
将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。
$ I7 P# \' _1 J' ]$ p# n仍在窗口类的CreateParam()成员函数,加入如下语句: r. X& q& O" D' r* O+ ^; R
ChangeResolution(800,600);9 P1 R; I( A3 t0 A( f. W; }
Params.Width=800;9 \, H x2 `: B$ ~
Params.Height=600;
6 U! Z' }* J( \% D( D' qParams.X=Params.Y=0;
- \& h n; J& M; ?第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)9 P$ ~! n3 Q! c
然后修改窗体大小使之占满全屏。
/ F$ [) q. S8 \ AChangeResolution()是一个自编的小函数,其原理如下:
, e/ J: c6 x# {4 o4 d0 g- \ M用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式 3 f8 v4 }* w, H N- \9 L/ U/ p
用WINAPI:ChangeDisplaySettings()修改显示模式。
/ D& P& U3 N: FChangeResolution()的完整代码:</P>
; y4 g$ b0 \5 c< >BOOL ChangeResolution(DWORD w, DWORD h) {! }( G8 k1 ]% u: \
DEVMODE devMode;) w2 A1 j* T+ l7 f: m4 N y( r
LONG modeSwitch;
( x- ~. g( w& S' h4 r, xLONG i;
0 s9 @1 p, T9 b9 X# G) pCHAR buf[256];
+ [# D9 R. T8 [3 t/ K/ [i = 0;: ^. g8 u! n7 G' l5 C1 o1 s6 v k
do {5 X8 o( |7 B/ Y) o1 s
modeSwitch = EnumDisplaySettings(NULL, i, &devMode);
3 p1 v' R( Q4 e, c& J$ E& ^i++;7 q6 P! d/ H" D) [+ l$ x8 N/ `+ [
} while(( (devMode.dmBitsPerPel!=16)& z! _5 P4 J2 v- L- q2 V1 h
||(devMode.dmPelsWidth != w)1 T" p: c& B7 i: r- l# f
||(devMode.dmPelsHeight != h) )
" ~% B6 C; G! Q r3 O* q8 p" m# w&& (modeSwitch) );( M4 r8 k" j9 u2 G% J5 v! T$ v- v
/* Okay see if we found a mode */
6 p+ @: Q* X6 M) Eif (!modeSwitch) { }
4 _: u6 `! ~& G7 M3 e2 \) n0 b* ielse {" R$ |5 p9 r4 w
modeSwitch = ChangeDisplaySettings(&devMode, 0);0 y, L! Q. i5 P( ]
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)% l( ?# B3 L! ~- T
{6 a( C+ L* T4 K# J3 G! E% Y+ s H
//Might be running in Windows95, let's try without the hertz change* v" g7 w& C. C6 s: F6 ]6 o& `' y6 T
devMode.dmBitsPerPel = 16;
" Q; i7 O. |" ?: O& C3 x* W1 e( E- EdevMode.dmPelsWidth = w;
6 Q: X' q7 g8 ^4 L. o( ?2 ddevMode.dmPelsHeight = h; p% q; J( Y1 s0 q
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;" R' n0 R& @& y4 V- b
modeSwitch = ChangeDisplaySettings(&devMode, 0);
9 c/ C: [- _5 ~4 }}1 U, }7 x2 X- A. v" u- N
}* X, z" j- E) {6 [
return TRUE;7 [* A) U+ q& m
}
2 x2 U& Z+ \$ A7 M5 f; g$ j样本程序
+ T$ z) X; v1 t9 ^" f# h说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。 </P> |
zan
|