Windows mobile 全画面表示
お世話になります。
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);
}
}
}
以上よろしくお願いいたします。
回答
- こんばんは、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; }
以上、よろしくお願いします。- 編集済みCH3COOH(酢酸) 2009年8月26日 14:30ソースコードを貼り付け直しました
- 回答としてマーク高橋 忍MSFT, モデレータ2009年9月4日 17:01
フォームのプロパティで
WindowState を Maximized にし、
初めから表示されている ソフトキーメニュー(MainMenu1)を削除するだけではだめでしょうか?
コードで、というのならば
Form1.Designer.cs で
this.WindowState = FormWindowState.Maximized;
とし、
this.mainMenu1 = new System.Windows.Forms.MainMenu();
を削除です。
.Compact Framework の Formには初めからいろいろついているので
そぎ落とすだけですね。
マイクロソフト エバンジェリスト 高橋 忍- 回答としてマーク高橋 忍MSFT, モデレータ2009年9月4日 17:01
すべての返信
ちょと改造してみたら、タスクバーは消えましたがメニューバーは消えませんでした。
なお、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);
}- こんばんは、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; }
以上、よろしくお願いします。- 編集済みCH3COOH(酢酸) 2009年8月26日 14:30ソースコードを貼り付け直しました
- 回答としてマーク高橋 忍MSFT, モデレータ2009年9月4日 17:01
- あんにんご様
ご回答ありがとうございます。
確かに教えていただいた通りにボタンのクリックイベントで全画面表示することができました。
起動時に全画面表示できればよいので、いろいろ試してやってみます。
ありがとうございました。
CH3COOH(酢酸)様
ご回答ありがとうございます。
SHullScreen以外でもメニューバーと、タスクバーが消えればよかったのですが、
いろいろ調べてできないと思っておりました。
教えていただいたソースを実装してみましたが、タスクバーは消えませんでした。
これ以外に何か必要な処理があるのでしょうか? フォームのプロパティで
WindowState を Maximized にし、
初めから表示されている ソフトキーメニュー(MainMenu1)を削除するだけではだめでしょうか?
コードで、というのならば
Form1.Designer.cs で
this.WindowState = FormWindowState.Maximized;
とし、
this.mainMenu1 = new System.Windows.Forms.MainMenu();
を削除です。
.Compact Framework の Formには初めからいろいろついているので
そぎ落とすだけですね。
マイクロソフト エバンジェリスト 高橋 忍- 回答としてマーク高橋 忍MSFT, モデレータ2009年9月4日 17:01
- 高橋様
ご回答ありがとうございます。
試してみましたら、思っていたとおりに動作しました。
ありがとうございました。


