在WinCe下讓程式全屏,掩蓋掉Start那一欄工具列
修改工作列
[HKEY_LOCAL_MACHINESoftwareMicrosoftShellAutoHide] 3I };?9w!q'{9n
"Default"=dword:1
[HKEY_LOCAL_MACHINESoftwareMicrosoftClock] U h j L0b'?#/
"SHOW_CLOCK"=dword:0
[HKEY_LOCAL_MACHINESoftwareMicrosoftShellOnTop]
"Default"=dword:0
或者:
1 將dialog屬性中的styles的title bar去掉
2 在dialog初始化時加入:
int iFullWidth = GetSystemMetrics(SM_CXSCREEN);
int iFullHeight = GetSystemMetrics(SM_CYSCREEN); u v ? P6| G y/gv
::SetWindowPos(this->m_hWnd, HWND_TOPMOST, 0, 0, iFullWidth, iFullHeight, SWP_NOOWNERZORDER|SWP_SHOWWINDOW);
MFC PocketPC應用程式全屏方法
基於對話方塊的MFC PocketPC應用程式全屏方法
G E0? k
1.需要將整個視窗向上平移26個像素以到達螢幕頂部,同時使用SHFullScreen()函數隱藏工作列; F R et /:x6H C
在OnInitDialog()函數中添加如下語句:
RECT rc;e5d D w rl } S ["[2R
GetWindowRect(&rc);
rc.top-=26;
MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素
SHFullScreen(this->m_hWnd,SHFS_HIDETASKBAR); //隱藏工作列
-i,y i1g*~9_ ? z
2.防止使用Input Panel時工作列出現; Q i$~ e5}
說明,依據MSDN,在Input Panel活動時會發送WM_SETTING_CHANGE和WM_ACTIVATE兩個訊息。需要手工接管兩個訊息的處理保持全屏。
MFC類中,CDialog類由CWnd類直接派生,所以這裡可以直接手工添加函數。
在主程式的對話方塊類*Dlg.h標頭檔中這個位置,加入這兩項(聲明這兩個函數):
// Implementation%c6h(I-L7m(o(U&`"v8K9U
protected:
HICON m_hIcon;
// Generated message map functions t X l B.U X } X z:|
//{{AFX_MSG(CFullScreenDialogDlg)8D u:y |)T /
virtual BOOL OnInitDialog(); h /4~9k,X+u O:G
virtual void OnSettingChange(); =====================================>1 R _ O(I k F Y;k r
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); =========>2,J0O g;{ N Z
//}}AFX_MSGC8q f:g+J P3B
DECLARE_MESSAGE_MAP()0G a B)k y e5{
在主程式的對話方塊類*Dlg.cpp實現檔案中做如下修改: p b ~1n4C c;y
(1)在訊息映射處加入
BEGIN_MESSAGE_MAP(CFullScreenDialogDlg, CDialog)
//{{AFX_MSG_MAP(CFullScreenDialogDlg)
ON_WM_SETTINGCHANGE() ========================================>1
ON_WM_ACTIVATE() ============================================>2
//}}AFX_MSG_MAP
END_MESSAGE_MAP()0J+x2R2|$A,_ R g6C-{
手工添加這兩個函數: / Z W i y$y
void CFullScreenDialogDlg::OnSettingChange()7O l:W M e r(M F
{ o / `;X /5o!`6E:` J
}
void CFullScreenDialogDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) j q!P m;s v J
{
CWnd::OnActivate(nState, pWndOther, bMinimized); //注意這裡從CWnd繼承 :P5m { [2F"B P t
SHFullScreen( this->m_hWnd, SHFS_HIDETASKBAR); E N f x(O E"/ u.o _ _
}5W-D1t.u(R:@
經過這樣的修改,無論是使用Input Panel,還是熱鍵運行其他程式後返回,都能夠保持全屏。
附加:
如果有開發人員希望屏蔽按下Esc和Enter鍵的退出,還需要添加這個PreTranslateMessage函數 E p f1u p;C
4l1Z _ / |#l&F w S)|
BOOL CFullScreenDialogDlg:reTranslateMessage(MSG* pMsg) B Q!u N)? ? X u
{ RL ] W J c.k _
if(pMsg->message==WM_KEYDOWN)
{"g Z9x } _9n / i0S /
if(pMSg->wParam==VK_RETURN) return TRUE; //斷行符號鍵
{
if(pMsg->wParam==VK_ESCAPE) return TRUE;
}
return CDialog:reTranslateMessage(pMsg); Z$E8j8P7}
}
文檔/視圖結構的MFC程式
其中CMainFrame由CWnd派生,和剛才類似,在MainFrame中做對應修改就可以了。1A c4n {8將OnInitDialog()中的函數移到OnCreate()中。 N a.| [C,Y8E
這裡WM_ACTIVATE和WM_SETTINGCHANGE可以用類嚮導添加。
然後手工將OnSettingChange改為void類型。3t S8]7Z5G j
對於Win32程式,PPC2003 SDK內建的例子Shellapidemo就有講解!