基于对话框的MFC PocketPC应用程序全屏方法
2009-06-20 23:44
441 查看
基于对话框的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);
}
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);
}
相关文章推荐
- 基于对话框的MFC PocketPC应用程序全屏方法
- 隐藏基于对话框的MFC应用程序窗口的方法 (推荐这个方法,非常好用)
- 隐藏基于对话框的MFC应用程序窗口的方法
- .隐藏基于对话框的MFC应用程序窗口的方法
- 猎豹MFC--书籍推荐:基于对话框的MFC应用程序《VisualC++实例精通》单文档多文档多顶级文档《MFCWindows程序设计》
- 将基于MFC的对话框应用程序修改为服务程序
- 关于在MFC中实用在基于对话框窗口上面绘制折线的实现方法
- MFC基于对话框加载菜单栏的方法
- 基于MFC的单文档,多文档,对话框应用程序
- MFC中 给基于对话框的应用程序添加登陆界面
- MFC中对话框全屏(非最大化)实现方法
- 基于对话框的MFC程序启动时完全隐藏的简单方法
- MFC-在基于对话框的应用程序中嵌入CSplitterWnd
- 为基于MFC的对话框添加ToolTip的简单方法
- 为基于MFC的对话框添加ToolTip的简单方法
- 1.3 基于对话框的MFC应用程序实例
- 基于对话框的MFC应用程序实现菜单的勾选功能
- 基于对话框的MFC应用程序加入Accelerator
- 将基于MFC的对话框应用程序修改为服务程序
- 基于MFC对话框隐藏的方法