mfc中对话框全屏显示,我是通过一个按钮来实现的, 点击按钮能够全屏显示,如何才能还原呢?
我现在出现的问题是,我点击一个按钮能够全屏显示,但是全屏显示之后,回不到全屏之前的那个界面,请各位高手帮忙?我的代码如下:voidCENABLEMAXDlg::OnBnC...
我现在出现的问题是,我点击一个按钮能够全屏显示,但是全屏显示之后,回不到全屏之前的那个界面,请各位高手帮忙?
我的代码如下:void CENABLEMAXDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
GetWindowPlacement(&m_OldWndPlacement);
CRect WindowRect;
GetWindowRect(&WindowRect);
CRect ClientRect;
RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);
ClientToScreen(&ClientRect);
//获取屏幕的分辨率
int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
//将除空间条外的客户区全屏显示到从(0,0)到(nFullWidth,nFullHeight)区域,
//将(0,0)到(nFullWidth,nFullHeight)两点外扩充原窗口和除控制条之外的客户区位置间的差值,
//就得倒全屏显示的窗口的位置
m_FullScreenRect.left=WindowRect.left-ClientRect.left;
m_FullScreenRect.top=WindowRect.top -ClientRect.top;
m_FullScreenRect.right=WindowRect.right-ClientRect.right +nFullWidth;
m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom +nFullHeight;
m_bFullScreen=TRUE;//设置全屏显示标志位TRUE
WINDOWPLACEMENT wndpl;
wndpl.flags=0;
wndpl.showCmd=SW_SHOWNORMAL;
wndpl.rcNormalPosition=m_FullScreenRect;
SetWindowPlacement(&wndpl);
}
void CENABLEMAXDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
if (m_bFullScreen)
{
lpMMI->ptMaxSize.x=m_FullScreenRect.Width();
lpMMI->ptMaxSize.y=m_FullScreenRect.Height();
lpMMI->ptMaxPosition.x=m_FullScreenRect.Width();
lpMMI->ptMaxPosition.y=m_FullScreenRect.Height();
}
CDialog::OnGetMinMaxInfo(lpMMI);
}
void CENABLEMAXDlg::EndFullScreen()
{
if (m_bFullScreen)
{
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_OldWndPlacement);
}
}
void CENABLEMAXDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nChar ==VK_F10)//如果按下的键为F10就可以退出全屏
{
//获得主框架窗口的指针
CENABLEMAXDlg *pFrame=(CENABLEMAXDlg*)AfxGetApp()->m_pMainWnd;
pFrame->EndFullScreen();
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
现在能够全屏,我想通过按下F10能够还原,现在不知道问题出现在哪? 展开
我的代码如下:void CENABLEMAXDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
GetWindowPlacement(&m_OldWndPlacement);
CRect WindowRect;
GetWindowRect(&WindowRect);
CRect ClientRect;
RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);
ClientToScreen(&ClientRect);
//获取屏幕的分辨率
int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
//将除空间条外的客户区全屏显示到从(0,0)到(nFullWidth,nFullHeight)区域,
//将(0,0)到(nFullWidth,nFullHeight)两点外扩充原窗口和除控制条之外的客户区位置间的差值,
//就得倒全屏显示的窗口的位置
m_FullScreenRect.left=WindowRect.left-ClientRect.left;
m_FullScreenRect.top=WindowRect.top -ClientRect.top;
m_FullScreenRect.right=WindowRect.right-ClientRect.right +nFullWidth;
m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom +nFullHeight;
m_bFullScreen=TRUE;//设置全屏显示标志位TRUE
WINDOWPLACEMENT wndpl;
wndpl.flags=0;
wndpl.showCmd=SW_SHOWNORMAL;
wndpl.rcNormalPosition=m_FullScreenRect;
SetWindowPlacement(&wndpl);
}
void CENABLEMAXDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
if (m_bFullScreen)
{
lpMMI->ptMaxSize.x=m_FullScreenRect.Width();
lpMMI->ptMaxSize.y=m_FullScreenRect.Height();
lpMMI->ptMaxPosition.x=m_FullScreenRect.Width();
lpMMI->ptMaxPosition.y=m_FullScreenRect.Height();
}
CDialog::OnGetMinMaxInfo(lpMMI);
}
void CENABLEMAXDlg::EndFullScreen()
{
if (m_bFullScreen)
{
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_OldWndPlacement);
}
}
void CENABLEMAXDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nChar ==VK_F10)//如果按下的键为F10就可以退出全屏
{
//获得主框架窗口的指针
CENABLEMAXDlg *pFrame=(CENABLEMAXDlg*)AfxGetApp()->m_pMainWnd;
pFrame->EndFullScreen();
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
现在能够全屏,我想通过按下F10能够还原,现在不知道问题出现在哪? 展开
1个回答
展开全部
如果你的工程是mfc基于对话框项目的话OnKeyDown这个消息是无效的
要改用PreTranslateMessage
里面的代码改为
if (pMsg->message==WM_KEYDOWN)
{
if (pMsg->wParam==VK_F10)
{
CENABLEMAXDlg *pFrame=(CENABLEMAXDlg*)AfxGetApp()->m_pMainWnd;
pFrame->EndFullScreen();
}
}
return CDialog::PreTranslateMessage(pMsg);
即可
另外你的endfullscreen函数里面的代码是SW_HIDE的话就成了隐藏了,应该是SW_NORMAL吧
要改用PreTranslateMessage
里面的代码改为
if (pMsg->message==WM_KEYDOWN)
{
if (pMsg->wParam==VK_F10)
{
CENABLEMAXDlg *pFrame=(CENABLEMAXDlg*)AfxGetApp()->m_pMainWnd;
pFrame->EndFullScreen();
}
}
return CDialog::PreTranslateMessage(pMsg);
即可
另外你的endfullscreen函数里面的代码是SW_HIDE的话就成了隐藏了,应该是SW_NORMAL吧
追问
谢谢你,可是你给的这个方法我还是不能还原,真不知道如何解决?还有为什么mfc基于对话框项目的话OnKeyDown这个消息是无效的?
追答
稍等 我自己先试一下
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询