一种全屏显示子窗口的方法:
1:基本想法:
让子窗口脱离父窗口。用SetWindowPos重新设置窗口的大小。
还原时重新设置子窗口的父窗口。重新设置窗口的大小
主要代码如下:
//m_hWnd为子窗口的句柄
static BOOL m_FullScreen = true;
HWND hwndParentSave;
//获得整个屏幕的大小
int cx = ::GetSystemMetrics(SM_CXSCREEN);
int cy = ::GetSystemMetrics(SM_CYSCREEN);
//获得子窗口的风格
long style = ::GetWindowLong(m_hWnd,GWL_STYLE);
//获得子窗口的父窗口
HWND hwndparent = ::GetParent(m_hWnd);
//判断其父窗口是否存在。
if(!::IsWindow(hwndparent))
{
//不存在表示已经全屏,重新设置子窗口的风格(主要是加入了WS_CHILD风格
::SetWindowLong(m_hWnd,GWL_STYLE,(style | WS_CHILD));
//重新设置其父窗口(刚才保存的父窗口
::SetParent(m_hWnd,hwndParentSave);
}
else
{ //父窗口存在,去掉其子窗口的风格
style &= ~WS_CHILD;
//重新设置要脱离父窗口的子窗口的风格
::SetWindowLong(m_hWnd, GWL_STYLE, style);
//重新设置子窗口的父窗口为NULL(脱离父窗口)
::SetParent(m_hWnd,NULL);
//把父窗口保存起来
hwndParentSave =hwndparent ;
把子窗口的大小保存起来
::GetWindowRect(m_hWnd,&rc);
}
if(m_FullScreen)
{
//全屏设置大小
::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,cx,cy,0);
m_FullScreen = false;
}
else
{
//还原重新设置大小
::MoveWindow(m_hWnd,rc.left,rc.top,rc.Width(),rc.Height(),0);
m_FullScreen = true;
}
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=85660