質問する質問する
 

回答済みWindows mobile 全画面表示

  • 2009年8月26日 7:55ホースフェイス ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    お世話になります。

    WindowsMobileで動作するソフトを作成しております。
    開発環境ですが、
    Visual Studio 2008
    .NET FrameWork3.5
    WindowsMobile 6.1.4
    使用言語はC#で作成しようと思っております。

    動作としましては作成されたアプリが実行されたとき、画面にタスクバーと、メニューバーを表示させたくないのですが
    SHFullScreenを使用して全画面表示を行おうとしたところ、どちらも消えませんでした。
    ちなみに、C++でSHFullScreenを使用しているサンプルプログラム(/program Files(x86)/Windows Mobile 6 SDK/Samples/PocketPC/CPP\Win32)
    を実行したところ、タスクバーとメニューバーは消えていましたがC#ではSHFullScreenは使用できないのでしょうか?
    それともソースに足りないものがあるのでしょうか?

    ご指摘、ご教授いただけると嬉しいです。

    ソースコードは以下の通りです。

    namespace SmartDeviceProject3
    {
        public partial class Form1 : System.Windows.Forms.Form
        {
            public Form1()
            {
                InitializeComponent();

            }

            //使用DLL 定義
            [DllImport("aygshell.dll")]
            private static extern bool SHFullScreen(IntPtr hRequester, 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();

            private const int SHFS_SHOWTASKBAR = 0x1;
            private const int SHFS_HIDETASKBAR = 0x2;
            private const int SHFS_SHOWSIPBUTTON = 0x4;
            private const int SHFS_HIDESIPBUTTON = 0x8;
            private const int SHFS_SHOWSTARTICON = 0x10;
            private const int SHFS_HIDESTARTICON = 0x20;

            private  void Form1_Load( object sender, EventArgs e)
            {

                picturebox OtherApp = new picturebox();
                OtherApp.Location= new Point(10,10);
                picturebox2 OtherApp2 = new picturebox2("MobileCalculator.exe");
                OtherApp2.Location = new Point(20 + OtherApp.Width, 10);
                picturebox2 OtherApp3 = new picturebox2("/windows/taskmgr.exe");
                OtherApp3.Location = new Point(30 + (OtherApp.Width * 2), 10);
                picturebox2 OtherApp4 = new picturebox2("/windows/solitare.exe");
                OtherApp4.Location = new Point(40 + (OtherApp.Width * 3), 10);
                picturebox2 OtherApp5 = new picturebox2("/windows/ppt.exe");
                OtherApp5.Location = new Point(10, 20 + OtherApp.Height);
                picturebox2 OtherApp6 = new picturebox2("/windows/pxl.exe");
                OtherApp6.Location = new Point(20 + OtherApp.Width, 20 + OtherApp.Height);

                panel1.Controls.Add(OtherApp);
                panel1.Controls.Add(OtherApp2);
                panel1.Controls.Add(OtherApp3);
                panel1.Controls.Add(OtherApp4);
                panel1.Controls.Add(OtherApp5);
                panel1.Controls.Add(OtherApp6);

                IntPtr hwnd = GetCapture();

                SHFullScreen(hwnd, SHFS_HIDESTARTICON | SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);
               
            }
       }
    }

    以上よろしくお願いいたします。

回答

  • 2009年8月26日 14:28CH3COOH(酢酸) ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済みコードあり
    こんばんは、CH3COOH(酢酸)です。

    SHFullScreenをお使いになる理由があるのであれば申し訳ございません。

    .NET Compact FrameworkとC#をお使いになられているのであれば、
    以下のコードで全画面表示にする事が可能だと思われます。如何でしょうか。

        private void Button1_Click(System.Object sender, System.EventArgs e)
        {  
            // フォームの全画面表示処理を行う
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = FormBorderStyle.None;
            this.ControlBox = false;
            this.Menu = null;
        }
    


    以上、よろしくお願いします。
  • 2009年8月29日 13:35高橋 忍MSFT, モデレータユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み

    フォームのプロパティで

    WindowState を Maximized にし、
    初めから表示されている ソフトキーメニュー(MainMenu1)を削除するだけではだめでしょうか?


    コードで、というのならば
    Form1.Designer.cs で
    this.WindowState = FormWindowState.Maximized;
    とし、
    this.mainMenu1 = new System.Windows.Forms.MainMenu();
    を削除です。
    .Compact Framework の Formには初めからいろいろついているので
    そぎ落とすだけですね。


    マイクロソフト エバンジェリスト 高橋 忍

すべての返信

  • 2009年8月26日 9:08あんにんご ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    ちょと改造してみたら、タスクバーは消えましたがメニューバーは消えませんでした。
    なお、Form1_Load に書いても動作しない(ように見えた)ので
    ボタンのクリックイベントに書きました。

            [DllImport("coredll.dll")]
            public static extern IntPtr GetForegroundWindow();
            [StructLayout(LayoutKind.Sequential)]
            public struct Rect { public int left; public int top; public int right; public int bottom; }
            [DllImport("coredll.dll")]
            public static extern IntPtr GetWindowRect(IntPtr hWnd, ref Rect rect);
            [DllImport("coredll.dll", EntryPoint = "SetWindowPos")]
            public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
            private const int HWND_TOP = 0; //Zオーダのトップに置く

     //ボタン1個追加
            private void button1_Click(object sender, EventArgs e)
            {
                Rect rect = new Rect();

                //IntPtr hwnd = GetCapture();
                IntPtr hwnd = GetForegroundWindow();

                GetWindowRect(hwnd, ref rect);

                SHFullScreen(hwnd, SHFS_HIDESTARTICON | SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);

                rect.left = 0;
                rect.top = 0;
                SetWindowPos(hwnd, HWND_TOP, rect.left, rect.top, rect.right, rect.bottom, 0);
            }

     

  • 2009年8月26日 14:28CH3COOH(酢酸) ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済みコードあり
    こんばんは、CH3COOH(酢酸)です。

    SHFullScreenをお使いになる理由があるのであれば申し訳ございません。

    .NET Compact FrameworkとC#をお使いになられているのであれば、
    以下のコードで全画面表示にする事が可能だと思われます。如何でしょうか。

        private void Button1_Click(System.Object sender, System.EventArgs e)
        {  
            // フォームの全画面表示処理を行う
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = FormBorderStyle.None;
            this.ControlBox = false;
            this.Menu = null;
        }
    


    以上、よろしくお願いします。
  • 2009年8月27日 0:45ホースフェイス ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    あんにんご様

    ご回答ありがとうございます。
    確かに教えていただいた通りにボタンのクリックイベントで全画面表示することができました。

    起動時に全画面表示できればよいので、いろいろ試してやってみます。

    ありがとうございました。

    CH3COOH(酢酸)様

    ご回答ありがとうございます。

    SHullScreen以外でもメニューバーと、タスクバーが消えればよかったのですが、
    いろいろ調べてできないと思っておりました。

    教えていただいたソースを実装してみましたが、タスクバーは消えませんでした。

    これ以外に何か必要な処理があるのでしょうか?
  • 2009年8月29日 13:35高橋 忍MSFT, モデレータユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み

    フォームのプロパティで

    WindowState を Maximized にし、
    初めから表示されている ソフトキーメニュー(MainMenu1)を削除するだけではだめでしょうか?


    コードで、というのならば
    Form1.Designer.cs で
    this.WindowState = FormWindowState.Maximized;
    とし、
    this.mainMenu1 = new System.Windows.Forms.MainMenu();
    を削除です。
    .Compact Framework の Formには初めからいろいろついているので
    そぎ落とすだけですね。


    マイクロソフト エバンジェリスト 高橋 忍
  • 2009年9月1日 7:44ホースフェイス ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    高橋様

    ご回答ありがとうございます。

    試してみましたら、思っていたとおりに動作しました。

    ありがとうございました。