MFC PocketPC应用程序全屏方法
来源:开源盛世    作者:佚名    时间:2015-02-02     

基于对话框的MFC PocketPC应用程序全屏方法

1.需要将整个窗口向上平移26个像素以到达屏幕顶部,同时使用SHFullScreen()函数隐藏任务栏;

  在OnInitDialog()函数中添加如下语句:
  RECT rc;
  GetWindowRect(&rc);
  rc.top-=26;
  MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素
  SHFullScreen(this->m_hWnd,SHFS_HIDETASKBAR); //隐藏任务栏

2. 防止使用Input Panel时任务栏出现;
  
  说明,依据MSDN,在Input Panel活动时会发送WM_SETTING_CHANGE和WM_ACTIVATE两个消息。需要手工接管两个消息的处理保持全屏。
  MFC 类中,CDialog类由CWnd类直接派生,所以这里可以直接手工添加函数。

  在主程序的对话框类*Dlg.h头文件中这个位置,加入这两项(声明这两个函数):
  // Implementation
   protected:
        HICON m_hIcon;

        // Generated message map functions
        //{{AFX_MSG(CFullScreenDialogDlg)
        virtual BOOL OnInitDialog();
        virtual void OnSettingChange();  =====================================>1
        afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);  =========>2
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
   
  在主程序的对话框类*Dlg.cpp实现文件中做如下修改:
  (1)在消息映射处加入
  BEGIN_MESSAGE_MAP(CFullScreenDialogDlg, CDialog)
        //{{AFX_MSG_MAP(CFullScreenDialogDlg)
        ON_WM_SETTINGCHANGE()  ========================================>1
        ON_WM_ACTIVATE()  ============================================>2
        //}}AFX_MSG_MAP
  END_MESSAGE_MAP()

  手工添加这两个函数:
  void CFullScreenDialogDlg::OnSettingChange()
  {
  }

  void CFullScreenDialogDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
  {
        CWnd::OnActivate(nState, pWndOther, bMinimized);  //注意这里从CWnd继承       
        SHFullScreen( this->m_hWnd, SHFS_HIDETASKBAR);
  }

经过这样的修改,无论是使用Input Panel,还是热键运行其他程序后返回,都能够保持全屏。

附加:
    如果有开发者希望屏蔽按下Esc和Enter键的退出,还需要添加这个PreTranslateMessage函数

    BOOL CFullScreenDialogDlg::preTranslateMessage(MSG* pMsg)
    {
       if(pMsg->message==WM_KEYDOWN)
       {
         if(pMSg->wParam==VK_RETURN) return TRUE; //回车键
         if(pMsg->wParam==VK_ESCAPE) return TRUE;
       }
       return CDialog::preTranslateMessage(pMsg);
    }

 
Copyright © 2012 广东金百汇信息科技有限公司·版权所有