20 April 2008

(Windows Mobile) 全画面表示、閉じるボタン非表示

Windows Mobile (Windows CE) で全画面表示する方法。

20080420-normalwnd.png

組み込み用 eMbedded Visual C++ で MFCのCDialogをメインウインドウとして利用している場合

C++/MFC タスクバーの閉じるボタンを消す
BOOL CSystemMenuDisableTestDlg::OnInitDialog() { m_bFullScreen = FALSE; CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon CenterWindow(GetDesktopWindow()); // center to the hpc screen // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control }

20080420-deletebutton.png

C++/MFC 全画面表示する
BOOL CSystemMenuDisableTestDlg::OnInitDialog() { m_bFullScreen = FALSE; CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon CenterWindow(GetDesktopWindow()); // center to the hpc screen // TODO: Add extra initialization here SHINITDLGINFO shidi; RECT rc; shidi.hDlg = this->m_hWnd; shidi.dwMask = SHIDIM_FLAGS; shidi.dwFlags = SHIDIF_FULLSCREENNOMENUBAR; SHInitDialog(&shidi); ::GetWindowRect(this->m_hWnd, &rc); // コマンドバー(画面下部のメニューバー)を非表示にする ::CommandBar_Show(this->m_pWndEmptyCB->m_hWnd, FALSE); // タスクバーとSIP(入力パネル)を非表示にする ::SetForegroundWindow(this->m_hWnd); // このウインドウを前面に持ってくる ::SHFullScreen(this->m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON); // ダイアログを画面全体に表示 #define MENU_HEIGHT 26 ::MoveWindow(this->m_hWnd, rc.left, rc.top-MENU_HEIGHT, rc.right, rc.bottom, TRUE); return TRUE; // return TRUE unless you set the focus to a control }

20080420-fullscreen.png

なお、m_bFullScreen = FALSE を CDialog::OnInitDialog(); より前に定義しないと、SIPが消せない。(Windows Mobile 5.0 以降のみ)
20080420-fullscreen-sip.png


C# で .NET Compact Framework の Form を利用する場合

ただし、コマンドバーの消し方が分からない…
(オーバーライド関数は、”protected override”まで入力して、スペースキーを押すとメンバ一覧が表示される)

C#/.NET Compact Framework 全画面表示する
namespace SystemMenuDisableCSharp { /// <summary> /// Form1 の概要の説明です。 /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button_close; private System.Windows.Forms.Button button_fullscreen; private System.Windows.Forms.Label label1; private System.Windows.Forms.MainMenu mainMenu1; [DllImport("aygshell.dll")] private static extern bool SHFullScreen(IntPtr hWnd, uint dwState); [DllImport("coredll.dll")] private static extern bool MoveWindow(IntPtr hWnd,int X,int Y,int nWidth,int nHeight,bool bRepaint); [DllImport("coredll.dll")] private static extern int GetSystemMetrics(int nIndex); [DllImport("coredll.dll")] private static extern IntPtr GetCapture(); // 中略 protected override void OnLoad(EventArgs e) { int nWidth, nHeight; this.Capture = true; IntPtr hWnd = GetCapture(); this.Capture = false; nWidth = GetSystemMetrics(0); // SM_CXSCREEN = 0 nHeight = GetSystemMetrics(1); // SM_CYSCREEN = 1 SHFullScreen(hWnd, 0x20|0x02|0x08); // SHFS_HIDESTARTICON=0x20, SHFS_HIDETASKBAR=0x02,SHFS_HIDESIPBUTTON=0x08 MoveWindow(hWnd, 0, 0, nWidth, nHeight, true); base.OnLoad (e); }

20080420-fullscreen-cs.png
C#で、コマンドバーが消せない…

参考:マイクロソフト サポートオンライン 「PocketPC 用の全画面アプリケーションを作成する方法