フルスクリーン

今回は、まずSIPBUTTON(と呼ぶのでしょうか?画面右下のアレです)を
消してみましょう。これによってゲームなどで画面を有効に使えますね。

・SHFullScreen関数

「多重起動の防止」で作ったソースを使いまわします。

#include <windows.h>
//「SH~」関数を使うためのヘッダ
#include <aygshell.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

//SIPの状態
int iSIPflag=0;

ヘッダの下にグローバル変数としてiSIPflagという変数を宣言します。

          //スタイラスがタップされた
          case WM_LBUTTONDOWN:
               //フラグが0:表示されていたらなら
               if(iSIPflag==0)
               {
                    //SIPボタンを隠します
                    SHFullScreen(hwnd,SHFS_HIDESIPBUTTON);
                    iSIPflag=1;
                    return 0;
               }

               //フラグが1:隠されていたなら
               if(iSIPflag==1)
               {
                    //SIPボタンを表示します
                    SHFullScreen(hwnd,SHFS_HIDESIPBUTTON);
                    iSIPflag=0;
                    return 0;
               }

ウィンドウプロシージャの「WM_LBUTTONDOWN」イベント内に上部を記述します。
タップするたびにSHFullScreen 関数でSIPボタンを表示したり隠したり出来ます。
iSIPflagはフラグとして使っています。

SIPボタンが消えました

・フルスクリーン化

では次は、画面をフルスクリーンにしてみましょう。
ゲームなどのプログラムでは全画面は当たり前になっていますが、
240x320 の画面をめいっぱい使えれば、気分がイイですよね。
フルスクリーン化にも、先程と同じ関数を使います。
「WM_LBUTTONDOWN」イベント内を次のように変更してください。

          //スタイラスがタップされた
          case WM_LBUTTONDOWN:
               //フラグが0:表示されていたらなら
               if(iSIPflag==0)
               {
                    //SIPボタンとタスクバーとスタートアイコンを消す
                    SHFullScreen(hwnd,SHFS_HIDESIPBUTTON|SHFS_HIDETASKBAR|SHFS_HIDESTARTICON);
                    //ウィンドウサイズを全画面に設定する
                    SetWindowPos(hwnd,HWND_TOP,0,0,240,320,NULL);	
                    iFSflag=1;
                    return 0;
               }

               //フラグが1:隠されていたなら
               if(iSIPflag==1)
               {
                    //SIPボタンとタスクバーとスタートアイコンを表示する
                    SHFullScreen(hwnd,SHFS_SHOWSIPBUTTON|SHFS_SHOWTASKBAR|SHFS_SHOWSTARTICON);
                    //ウィンドウサイズをバー直下に設定する
                    SetWindowPos(hwnd,HWND_TOP,0,26,240,320,NULL);	
                    iFSflag=0;
                    return 0;
               }

フルスクリーンにも、同じ関数を使います。
タップするとSHFullScreen 関数のマクロによって
スタートボタン・タスクバー(アプリケーション名が表示されるところ)・SIPボタンを隠し、
その直後SetWindowPos 関数によってウィンドウの位置を(0,0)に移動させます。
もう一度タップすると、先に隠したものを表示して
ウィンドウをタスクバー分だけ(26ドット分)下に移動させます。
(クライアントエリアの移行状態をわかりやすくするために四角形を描いています)
フルスクリーン時には、終了や画面を戻す等を行う処理を入れないと
リセットする羽目になるので気をつけてください。

画面をタップすると・・・←→ フルスクリーンに

BOOL SHFullScreen (HWND hwndRequester, DWORD dwState);
・タスクバーなどの表示状態を変更します
第一引数 hwndRequester には、windowのハンドルを指定します
第二引数 dwState には、各部の状態を指定します
dwStateのパラメータ SHFS_SHOWTASKBAR:タスクバーを表示します
              SHFS_HIDETASKBAR:タスクバーを隠します
              SHFS_SHOWSIPBUTTON:SIPBUTTONを表示します
              SHFS_HIDESIPBUTTON:SIPBUTTONを隠します
              SHFS_SHOWSTARTICON:スタートアイコンを表示します
              SHFS_HIDESTARTICON:スタートアイコンを隠します

戻り値 成功すればTRUEが、失敗すればFALSEが返ります。
※この関数を実行するためには aygshell.h をincludeする必要があります

BOOL SetWindowPos (HWND hwnd,HWND hwndInsertAfter,int x,int y,int dx,int dy, UINT fuFlags);
・ウィンドウの位置・サイズ・z順序を変更します
第一引数 hwnd には、windowのハンドルを指定します
第二引数 hwndInsertAfter には、Z順序 (配置順序) を指定します
第三・四引数 x,y には、ウィンドウの位置(x,y)を指定します
第五・六引数 dx,dy には、ウィンドウの大きさ(幅、高さ)を指定します
第七引数 fuFlags には、ウィンドウのサイズ変更および位置調整のフラグを指定します
dwStateのパラメータ HWND_TOP:ウィンドウを1番手前に設定
             HWND_BOTTOM:ウィンドウを1番後ろに設定
             HWND_TOPMOST:ウィンドウを常に手前に設定
             HWND_NOTOPMOST:↑の解除
fuFlagsのパラメータ SWP_NOSIZE:ウィンドウサイズを変更しない(dx,dyを無視)
             SWP_NOMOVE:ウィンドウの位置を変更しない(x,yを無視)
             SWP_NOZORDER:Z順序を変更しない(hwndInsertAfterを無視)
             SWP_SHOWWINDOW:ウィンドウを表示します
             SWP_HIDEWINDOW:ウィンドウを非表示にします
             SWP_NOACTIVATE:?
             SWP_DRAWFRAME(=SWP_FRAMECHANGED):?(send WM_NCCALCSIZE)
             SWP_NOREPOSITION(=SWP_NOOWNERZORDER:?

戻り値 成功すればTRUEが、失敗すればFALSEが返ります。

ソースのダウンロード

2005/5/15


戻る