BOOL FullScreenViewCtrl(HWND m_hWnd, //想要全屏的窗口句柄
BOOL bFullScreen) //TURE进入全屏 FALSE退出全屏
{
static HWND pParentWndSave = NULL; //父窗口句柄
static DWORD dwWindowStyleSave = 0; //窗口风格
static RECT rcWndRectSave = {0, 0, 0, 0}; //窗口位置
static BOOL bEnterFullView = FALSE; //进入全屏?
_ASSERT( IsWindow(m_hWnd) );
if(bFullScreen)
{
if(!bEnterFullView)//非全屏模式
{
dwWindowStyleSave = GetWindowLong(m_hWnd, GWL_STYLE); //保存窗口风格
GetWindowRect(m_hWnd, &rcWndRectSave); //保存窗口位置
pParentWndSave = SetParent(m_hWnd, NULL); //保存父窗口句柄/设置父窗口
SetWindowLong(m_hWnd, GWL_STYLE, dwWindowStyleSave & (~WS_CHILD) | WS_POPUP);//使窗口具有Popup风格
SetWindowPos(m_hWnd, HWND_TOP,
0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),
SWP_DRAWFRAME | SWP_DEFERERASE | SWP_FRAMECHANGED); //修改窗口置全屏
bEnterFullView = TRUE; //进入全屏模式
}
}
else
{
if(bEnterFullView) //是全屏模式
{
SetWindowLong(m_hWnd, GWL_STYLE, dwWindowStyleSave);//恢复窗口风格
SetParent(m_hWnd, pParentWndSave); //恢复父窗口句柄
POINT ptLT = {rcWndRectSave.left, rcWndRectSave.top};
ScreenToClient(m_hWnd, &ptLT);
MoveWindow(m_hWnd, ptLT.x, ptLT.y,
rcWndRectSave.right-rcWndRectSave.left, rcWndRectSave.bottom-rcWndRectSave.top,
TRUE); //恢复原始位置
bEnterFullView = FALSE; //退出全屏模式
}
}
return bEnterFullView;//返回是否是全屏?
}
API使指定窗口全屏/恢复全屏
最新推荐文章于 2021-03-01 18:31:23 发布