MFC实现全屏功能的代码
* O/ I1 J4 j, S9 W- f1 ?4 g) A 很多的播放器都有快捷键控制窗口以全屏幕的方式显示。给应用程序加上全屏幕的功能,并不需要很多的代码,比如给一个基于对话框的应用程序加上全屏功能只需要以下少量代码就可以工作了。
. B0 \( s- h. _ j void CFullScreenDlg::FullScreenView(void)1 Q/ a- l( y6 T1 c0 E j' M9 u# }
{* ]! n" i# m9 K' T' b
RECT rectDesktop;
6 q |* O/ i& Q% }: m WINDOWPLACEMENT wpNew;
* [* ^6 G9 f7 N" J8 F if (!IsFullScreen())& r. B: i7 U' t" c! n. K; F
{+ t5 }9 U3 R2 v, [- ~! @# \
// We'll need these to restore the original state.
% r) Y9 X6 N) _3 L5 n& f7 e GetWindowPlacement (&m_wpPrev);
, y5 `1 r( A1 }+ u4 A' [5 j //Adjust RECT to new size of window' y' t1 V" s j6 v+ @
::GetWindowRect ( ::GetDesktopWindow(), &rectDesktop );
% e9 V7 [ n8 v ::AdjustWindowRectEx(&rectDesktop, GetStyle(), FALSE, GetExStyle());
4 D4 y% X# d- @, Y! a // Remember this for OnGetMinMaxInfo()8 V* ?5 t7 \( U0 F$ ?/ ?
m_rcFullScreenRect = rectDesktop;5 w9 B5 r$ ], K2 t
wpNew = m_wpPrev;
' V% a( t/ u4 V% Z# E3 ^; h! Z wpNew.showCmd = SW_SHOWNORMAL;& @6 k; C# P0 a" r0 f0 G: l
wpNew.rcNormalPosition = rectDesktop;. D$ n |( j+ u7 @1 Y. C
m_bFullScreen=true;' G: a0 \+ o; y4 \! J* }$ Z
}$ v8 t' _0 ~" _. ^
else1 e3 H- K, N p! X
{
0 v" i3 Y- w+ ?) j/ V8 r9 d // 退出全屏幕时恢复到原来的窗口状态
) Y/ o* E* o: a! [0 b: M. t6 t1 h m_bFullScreen=false;+ S4 _- U' l) J- h) v1 M
wpNew = m_wpPrev;2 B5 X1 ~0 O u9 S- W1 S8 @
}% V' `, ~& {! f
SetWindowPlacement ( &wpNew );
- }. p" `6 k/ X) L) `0 [ y6 ^ }0 N. X$ _4 `* y6 i* Q$ B
void CFullScreenDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
$ a* A5 _! q0 I6 F {
" l( S: v4 t ]2 o. W7 l7 q3 r5 @ // TODO: Add your message handler code here and/or call default5 q: v7 Z& l! y
if (IsFullScreen())
4 \: h' }; _1 \1 o% H7 ^+ S0 ` {1 n4 V. z. Q4 `( `5 V$ P
lpMMI->ptMaxSize.y = m_rcFullScreenRect.Height();, g9 i* U' X4 w; E" w# s& M( k
lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;, x: B p9 c- I# j& c+ B
lpMMI->ptMaxSize.x = m_rcFullScreenRect.Width();) G8 C. f* z& t. x1 K
lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;% S; k9 ?4 U# n0 T J
} b) k/ h% n6 B: w) n
CDialog::OnGetMinMaxInfo(lpMMI);
7 z K. E1 Q- z* c1 P# F U }/ }. P# M u) Q1 R6 ]& ^/ e
bool CFullScreenDlg::IsFullScreen(void)$ `5 M4 v* d; }; H
{
; h- Y& y$ e" i( _$ { // 记录窗口当前是否处于全屏状态
; n- }2 Q2 y1 ] return m_bFullScreen;
: S( f$ F7 u0 |3 _ } |