.NET Compact Frameworkでは、MainMenuコンポーネントのキーボードアイコン(以下、SIP表示ボタン)を消す事が出来ません。そこでP/Invokeでなんとかする方法を1時間位悩んでいました。
結論から言ってSIP表示ボタンを消すのは不可能でした。知ってる人が居たら教えて欲しいです……
SHFullScreen関数をP/Invokeで使う事で、MainMenuからSIP表示ボタンを一時的に削除する事は可能です。
SHFullScreen関数を使って実装した結果
後述するコードを実装したアプリでの挙動です。初期表示時ではSIP表示ボタンは表示されていません。一見成功しているかのように思えるのですが……
SIP表示ボタンが消えている状態で、メインメニュー部分をタップすると、SIP表示ボタンが定位置に表示されます。SIPは表示されません。
次にSIP表示ボタンをタップすると、(当然ながら)SIPが表示されます。
SIPを閉じると再びSIP表示ボタンは消えます。
メインメニューからSIP表示(キーボード)ボタンを消すコード
とりあえずコードだけ置いておきます。完全に消す方法が別にあれば教えて下さい。
[DllImport("AYGShell.dll")] static extern Int32 SHFullScreen(IntPtr hwndRequester, UInt32 dwState); public const UInt32 SHFS_SHOWSIPBUTTON = 0x0004; public const UInt32 SHFS_HIDESIPBUTTON = 0x0008; private void HideSipButton() { UInt32 dwState = SHFS_HIDESIPBUTTON; SHFullScreen(this.Handle, dwState); } private void Form1_Paint(object sender, PaintEventArgs e) { HideSipButton(); } private void Form1_Activated(object sender, EventArgs e) { HideSipButton(); }