1 将dialog属性中的styles的title bar去掉
在dialog初始化时加入:
int iFullWidth = GetSystemMetrics(SM_CXSCREEN);
int iFullHeight = GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(this->m_hWnd, HWND_TOPMOST, 0, 0, iFullWidth, iFullHeight, SWP_NOOWNERZORDER|SWP_SHOWWINDOW);
基于对话框的MFC PocketPC应用程序全屏方法 ;H U rH#d@.g.b
r F*z,V*O8Z7Ch+Z^v
1.需要将整个窗口向上平移26个像素以到达屏幕顶部,同时使用SHFullScreen()函数隐藏任务栏; a4_;DMZ"h} t
在OnInitDialog()函数中添加如下语句:
RECT rc; +ib7}3DWr'q
GetWindowRect(&rc); m,iR,G(|8nv|
rc.top-=26;
MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素
SHFullScreen(this->m_hWnd,SHFS_HIDETASKBAR); //隐藏任务栏
/M
2.防止使用Input Panel时任务栏出现;
说明,依据MSDN,在Input Panel活动时会发送WM_SETTING_CHANGE和WM_ACTIVATE两个消息。需要手工接管两个消息的处理保持全屏。 y5X#}5K:^A
MFC类中,CDialog类由CWnd类直接派生,所以这里可以直接手工添加函数。
在主程序的对话框类*Dlg.h头文件中这个位置,加入这两项(声明这两个函数): Pyt6B,Y
// Implementation
protected:
HICON m_hIcon; /T4{en!t6/b
'J~u~V{+K}x
// Generated message map functions :Aa"_6[ja$x
//{{AFX_MSG(CFullScreenDialogDlg)
virtual BOOL OnInitDialog();
virtual void OnSettingChange(); =====================================>1
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); =========>2
//}}AFX_MSG $^g3ZBu,W R(k)G6j+v
DECLARE_MESSAGE_MAP()
在主程序的对话框类*Dlg.cpp实现文件中做如下修改: ^w(b k{f }
(1)在消息映射处加入
6cN&yM1t%Z BEGIN_MESSAGE_MAP(CFullScreenDialogDlg, CDialog) bv@(o!ag$A)KK
//{{AFX_MSG_MAP(CFullScreenDialogDlg) 'AHa7Z}
ON_WM_SETTINGCHANGE() ========================================>1 N@c*Q;zJ.] VE
ON_WM_ACTIVATE() ============================================>2
//}}AFX_MSG_MAP ;y TN y1z b
END_MESSAGE_MAP()
手工添加这两个函数: u5bI?|;^
void CFullScreenDialogDlg::OnSettingChange() 2s0Df-bmyz/Z
{
T } 1[{'X e/L-R`
e*q5L^ b
void CFullScreenDialogDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 1BT _!U[xr
{
CWnd::OnActivate(nState, pWndOther, bMinimized); //注意这里从CWnd继承 We{b$n Tq
SHFullScreen( this->m_hWnd, SHFS_HIDETASKBAR); }%Pa`0b)XX3Mi
}
经过这样的修改,无论是使用Input Panel,还是热键运行其他程序后返回,都能够保持全屏。 $Ym7E?|D
附加:
如果有开发者希望屏蔽按下Esc和Enter键的退出,还需要添加这个PreTranslateMessage函数 8wA ` u2LI*B(x;wcX
BOOL CFullScreenDialogDlg:reTranslateMessage(MSG* pMsg) ebv2_1G"N1^A
{
if(pMsg->message==WM_KEYDOWN) @?GK!u Y`M
{
if(pMSg->wParam==VK_RETURN) return TRUE; //回车键 U0k8p n0X t|4^
if(pMsg->wParam==VK_ESCAPE) return TRUE; *O.nV1?)`J*p
}
return CDialog:reTranslateMessage(pMsg);
} J*w8E/f f5s?qP#b
文档/视图结构的MFC程序
A^)`v
其中CMainFrame由CWnd派生,和刚才类似,在MainFrame中做对应修改就可以了。 |HJ&jc.{9w4z
将OnInitDialog()中的函数移到OnCreate()中。
这里WM_ACTIVATE和WM_SETTINGCHANGE可以用类向导添加。
然后手工将OnSettingChange改为void类型。
k e#V r;d
对于Win32程序,PPC2003 SDK自带的例子Shellapidemo就有讲解!
在dialog初始化时加入:
int iFullWidth = GetSystemMetrics(SM_CXSCREEN);
int iFullHeight = GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(this->m_hWnd, HWND_TOPMOST, 0, 0, iFullWidth, iFullHeight, SWP_NOOWNERZORDER|SWP_SHOWWINDOW);
对于Pocket PC,也有类似的方法
MFC PocketPC应用程序全屏方法 vS1Lm'k8bg#k#g!H基于对话框的MFC PocketPC应用程序全屏方法 ;H U rH#d@.g.b
r F*z,V*O8Z7Ch+Z^v
1.需要将整个窗口向上平移26个像素以到达屏幕顶部,同时使用SHFullScreen()函数隐藏任务栏; a4_;DMZ"h} t
在OnInitDialog()函数中添加如下语句:
RECT rc; +ib7}3DWr'q
GetWindowRect(&rc); m,iR,G(|8nv|
rc.top-=26;
MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素
SHFullScreen(this->m_hWnd,SHFS_HIDETASKBAR); //隐藏任务栏
/M
2.防止使用Input Panel时任务栏出现;
说明,依据MSDN,在Input Panel活动时会发送WM_SETTING_CHANGE和WM_ACTIVATE两个消息。需要手工接管两个消息的处理保持全屏。 y5X#}5K:^A
MFC类中,CDialog类由CWnd类直接派生,所以这里可以直接手工添加函数。
在主程序的对话框类*Dlg.h头文件中这个位置,加入这两项(声明这两个函数): Pyt6B,Y
// Implementation
protected:
HICON m_hIcon; /T4{en!t6/b
'J~u~V{+K}x
// Generated message map functions :Aa"_6[ja$x
//{{AFX_MSG(CFullScreenDialogDlg)
virtual BOOL OnInitDialog();
virtual void OnSettingChange(); =====================================>1
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); =========>2
//}}AFX_MSG $^g3ZBu,W R(k)G6j+v
DECLARE_MESSAGE_MAP()
在主程序的对话框类*Dlg.cpp实现文件中做如下修改: ^w(b k{f }
(1)在消息映射处加入
6cN&yM1t%Z BEGIN_MESSAGE_MAP(CFullScreenDialogDlg, CDialog) bv@(o!ag$A)KK
//{{AFX_MSG_MAP(CFullScreenDialogDlg) 'AHa7Z}
ON_WM_SETTINGCHANGE() ========================================>1 N@c*Q;zJ.] VE
ON_WM_ACTIVATE() ============================================>2
//}}AFX_MSG_MAP ;y TN y1z b
END_MESSAGE_MAP()
手工添加这两个函数: u5bI?|;^
void CFullScreenDialogDlg::OnSettingChange() 2s0Df-bmyz/Z
{
T } 1[{'X e/L-R`
e*q5L^ b
void CFullScreenDialogDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 1BT _!U[xr
{
CWnd::OnActivate(nState, pWndOther, bMinimized); //注意这里从CWnd继承 We{b$n Tq
SHFullScreen( this->m_hWnd, SHFS_HIDETASKBAR); }%Pa`0b)XX3Mi
}
经过这样的修改,无论是使用Input Panel,还是热键运行其他程序后返回,都能够保持全屏。 $Ym7E?|D
附加:
如果有开发者希望屏蔽按下Esc和Enter键的退出,还需要添加这个PreTranslateMessage函数 8wA ` u2LI*B(x;wcX
BOOL CFullScreenDialogDlg:reTranslateMessage(MSG* pMsg) ebv2_1G"N1^A
{
if(pMsg->message==WM_KEYDOWN) @?GK!u Y`M
{
if(pMSg->wParam==VK_RETURN) return TRUE; //回车键 U0k8p n0X t|4^
if(pMsg->wParam==VK_ESCAPE) return TRUE; *O.nV1?)`J*p
}
return CDialog:reTranslateMessage(pMsg);
} J*w8E/f f5s?qP#b
文档/视图结构的MFC程序
A^)`v
其中CMainFrame由CWnd派生,和刚才类似,在MainFrame中做对应修改就可以了。 |HJ&jc.{9w4z
将OnInitDialog()中的函数移到OnCreate()中。
这里WM_ACTIVATE和WM_SETTINGCHANGE可以用类向导添加。
然后手工将OnSettingChange改为void类型。
k e#V r;d
对于Win32程序,PPC2003 SDK自带的例子Shellapidemo就有讲解!