Status Bar を表示する

VC++ の CreateWindowEx() で Status Bar を生成してウインドウに貼り付けます。
StatusBar とは、通常ウインドウの下に表示される細長いメッセージ領域ですが、使い方によっては重宝します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. テンプレートまたは、空のプロジェクトから作成して下さい。
  2. commctrl.h をインクルードして、comctrl32.lib をリンクして下さい。
    ID_STATUS は Status Bar のIDです。
    hStatus は Status Bar のハンドルです。
    strL[] が左の Status Bar に表示するメッセージで、strR[] が右の Status Bar に表示するメッセージです。
        #include    <commctrl.h>
        #pragma     comment(lib,"comctl32.lib")
        #define     ID_STATUS    (WM_APP + 0)
        HWND        hStatus;            //Status Bar Handle
        char        strL[32]= "Status Bar Left String";
        char        strR[32]= "Status Bar Right String";
        
  3. Status Bar を生成してウインドウに貼り付ける関数です。
    座標や幅や高さがゼロになっていますが、WM_SIZE: でウインドウのサイズに合わせて設定されます。
    SB_SETPARTS の 2 は Status Bar の分割数で、parts がそのサイズです。
    分割しないときは SB_SIMPLE を使います。
        //★ Status Bar を生成する
        HWND    CreateMyStatus(HWND hwnd)
        {   int     parts[2]= { 300,-1 };
    
            InitCommonControls();       //コモンコントロールのdllを初期化
            hStatus = CreateWindowEx(
                0,                      //拡張スタイル
                STATUSCLASSNAME,        //ウィンドウクラス
                NULL,                   //タイトル
                WS_CHILD|SBARS_SIZEGRIP|CCS_BOTTOM|WS_VISIBLE,  //ウィンドウスタイル
                0,                      //X座標
                0,                      //Y座標
                0,                      //ウィンドウ幅
                0,                      //高さ
                hwnd,                   //親ウィンドウ
                (HMENU)ID_STATUS,       //ステータスバーのID
                g_hInst,                //インスタンスハンドル
                NULL);
            //SendMessage(hStatus,SB_SIMPLE,TRUE,0L);
            SendMessage(hStatus,SB_SETPARTS,2,(LPARAM)parts);
            return hStatus;
        }
        
  4. WM_CREATE から CreateMyStatus() を呼び出します。
        switch(msg)
        {   case WM_CREATE:
                CreateMyStatus(hWnd);
                break;
        
  5. WM_PAINT: では TextOut() でウインドウに TEXT を表示します。
    その後の SendMessage() で Status Bar にメッセージを表示しています。
    Status Bar が分割されていないときは 255 でメッセージを表示します。
            case WM_PAINT:
                hdc= BeginPaint (hWnd, &ps);
                TextOut(hdc,10,10,"Status Bar を表示する", 21);
                //SendMessage(hStatus,SB_SETTEXT,255,(WPARAM)(LPSTR)strL);
                SendMessage(hStatus,SB_SETTEXT,0,(WPARAM)(LPSTR)strL);
                SendMessage(hStatus,SB_SETTEXT,1,(WPARAM)(LPSTR)strR);
                EndPaint(hWnd, &ps);
                break;
        
  6. WM_SIZE で Status Bar のサイズをウインドウに合わせて設定します。
            case WM_SIZE:
                SendMessage(hStatus,WM_SIZE,wParam,lParam);
                break;
        

【演習】

  1. プログラムを完成させて下さい。
  2. Status Bar を左右に分割しないでメッセージを表示して下さい。
  3. 「X座標,Y座標,幅,高さ」を設定して、WM_SIZE: を削除して下さい。
    ウインドウのサイズを変えるとどうなるでしょう。

【説明】

☆CommonControls は COMCTL32.LIB によって提供される共通の Control です。
このファイルは InternetExplorer などによりアップデートされるのでシステムごとにバージョンが異なります。
バージョンが上がるに従って機能が強化されるので、全てのシステムで動くとは限りません。
基本的な処理を Windows がやってくれるので、標準的な操作を簡単にプログラムできます。
Windows や InternetExplorer がバージョンアップされても昔のスタイルで取り残される心配がありません。

CommonControls の標準的なプログラミングの方法です。
  1. commctrl.h をインクルードします。
  2. comctrl32.lib をリンクします。
  3. initCommonControls() または initCommonControlsEx() を呼び出します。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(Win32API C++)