DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

使窗口设置为最大化,最顶层

int cxScreen,cyScreen;

cxScreen=GetSystemMetrics(SM_CXSCREEN);//获得屏幕的宽度

cyScreen=GetSystemMetrics(SM_CYSCREEN);//获得屏幕的高度

    SetWindowPos(&wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);//设置窗口为最顶层

设置窗口为最顶层,不可移动和改变尺寸

AfxGetMainWnd()->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

多文档的全屏显示与退出

1.       在CMainFrame类中新增一下三个成员变量

WINDOWPLACEMENT m_OldWndPlacement; //用来保存原窗口位置

BOOL m_bFullScreen;//全屏显示标志

      CRect m_FullScreenRect; //表示全屏显示时的窗口位置

2.       增加一个‘全屏显示’菜单项,用于消息响应。点击时,即全屏显示;编辑消息响应处理函数:(消息响应函数在CMainFrame中)

     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.length=sizeof(WINDOWPLACEMENT);

     wndpl.flags=0;

     wndpl.showCmd=SW_SHOWNORMAL;

     wndpl.rcNormalPosition=m_FullScreenRect;

     SetWindowPlacement(&wndpl);

3.       为CMainFrame类增加WM_GETMINMAXINFO消息,编辑代码如下:

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();

           //最大的Track尺寸也要改变

           lpMMI->ptMaxTrackSize.x=m_FullScreenRect.Width();

           lpMMI->ptMaxTrackSize.y=m_FullScreenRect.Height();

}

    CFrameWnd::OnGetMinMaxInfo(lpMMI);

4.       为CMainFrame增加成员函数,退出全屏EndFullScreen();

if(m_bFullScreen)

{

           //退出全屏显示, 恢复原窗口显示

           ShowWindow(SW_HIDE);

           SetWindowPlacement(&m_OldWndPlacement);

     }

5.       在CxxxxView类中,增加WM_KEYDOWN消息响应函数;当用户按下Esc键时,退出全屏

 

void CXXXXXXXView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

{

// TODO: Add your message handler code here and/or call default

if(nChar==VK_ESCAPE)//如果按的键为Esc键

{

           //获取主框架窗口的指针

           CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;

           //调用主窗口类的自定义函数 EndFullScreen ,退出全屏显示状态

           pFrame->EndFullScreen();

}

CView::OnKeyDown(nChar, nRepCnt, nFlags);

}

posted on 2014-01-02 09:41  DoubleLi  阅读(1979)  评论(0编辑  收藏  举报