Windows Mobile (Windows CE) で全画面表示する方法。
組み込み用 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
}
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
}
なお、m_bFullScreen = FALSE を CDialog::OnInitDialog(); より前に定義しないと、SIPが消せない。(Windows Mobile 5.0 以降のみ)
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);
}
C#で、コマンドバーが消せない…
参考:マイクロソフト サポートオンライン 「PocketPC 用の全画面アプリケーションを作成する方法」