#pragma twice

KAB-studio > プログラミング > #pragma twice > 194 Version 10.16 ステータスバーを使ってみる・ SDK 編

#pragma twice 194 Version 10.16 ステータスバーを使ってみる・ SDK 編

前のページへ 表紙・目次へ 次のページへ

 Version 10.16
ステータスバーを使ってみる・ SDK 編

前回はステータスバーそのものを作ってみました
っつーか作っただけだね
うん、それだともちろん意味ないから、これからステータスバーを使って
みます
ステータスバーって Version 9.13 ( No.174 ) で使ってみたよね。あれ
と似てる?
ある程度似てるから参考になる部分はあるよ。比較しつつやってみるのも
いいかも。じゃあ、まずは試してみようか。まず、 #include の下くらいに
次の行を追加して

HWND g_hStetusBarWnd;

何これ
グローバル変数って言って、どこからでも使える変数
うん、それはなんとなく分かるんだけど
ここに、ステータスバーのウィンドウハンドルを入れておきます。実際に
入れる部分はこれ

// ウィンドウが作られます。
LRESULT OnCreate
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    g_hStetusBarWnd = CreateStatusWindow
        ( WS_CHILD | WS_VISIBLE
        , "テスト"
        , p_hWnd
        , 100
        );
    if( g_hStetusBarWnd == NULL )
    {
        // ステータスバーが作られませんでした。
        return -1;
    }

    return 0;
}

この前のステータスバーを作ってた部分だね。あ、 
CreateStatusWindow() の戻り値をさっきの変数に入れてる
 CreateStatusWindow() は、戻り値にステータスバーのウィンドウハンド
ルを返すんです
それを取っとくってこと?
そういうこと。で、ステータスバーに文字列をセットするときには、この
ウィンドウハンドルにメッセージを送ります。ちょっと手抜きして、前に
作ったメニュー用の関数をこう修正して

// ID_MENU_TEST が選択されました。
LRESULT OnMenuTest
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    SendMessage
        ( g_hStetusBarWnd
        , SB_SETTEXT
        , 0
        , (LPARAM)"OnMenuTest()" 
        );
    return 0;
}

メッセージ送るのはいつもの SendMessage() ね。送り先はさっきのス
テータスバーのウィンドウハンドル、 SB_SETTEXT は初めて見る……よね
うん、これはステータスバー専用のメッセージだから。最初の S は
StatusBar の S だから。でも
でも?
 Version 5.29 ( No.094 ) で出てきた、ウィンドウのタイトルを変える
メッセージ WM_SETTEXT に似てるかな
あ、そういえば
全部同じじゃないけど、あれに近いかも
文字列を LPARAM に渡して、 LPARAM にキャストしてるのなんか同じだ

違うところは WPARAM だね。 WM_SETTEXT は 0 を渡すことになってるけ
ど、 SB_SETTEXT はここに値を渡すことができます。たとえばこんなふう


// ID_MENU_TEST が選択されました。
LRESULT OnMenuTest
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    SendMessage
        ( g_hStetusBarWnd
        , SB_SETTEXT
        , SBT_POPOUT
        , (LPARAM)"OnMenuTest()" 
        );
    return 0;
}

 SBT_POPOUT って渡してるね。ビルドして実行! あ”、なんかでっぱっ

こういうふうに、ステータスバーのスタイルを変えるフラグを渡せます。
これは、さっきの MFC 版の方で出てきた、 CStatusBarCtrl::SetText() の
第3引数に渡しているものと同じ
あ、この辺は MFC も同じなんだ
 MFC の方が、この SB_SETTEXT を使いやすくしてるってところかな
あ、質問!  MFC でステータスバー使った時ってなんか配列使ったけ
ど、あれってないの?
あるけど、微妙に違うかな。 SDK の方は、ステータスバーを区切る時に
使います

// ウィンドウが作られます。
LRESULT OnCreate
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    // ステータスバーを作ります。
    g_hStetusBarWnd = CreateStatusWindow
        ( WS_CHILD | WS_VISIBLE
        , "テスト"
        , p_hWnd
        , 100
        );
    if( g_hStetusBarWnd == NULL )
    {
        // ステータスバーが作られませんでした。
        return -1;
    }

    // ステータスバー枠用配列。
    int iAry[3];
    iAry[0] = 100; 
    iAry[1] = 200; 
    iAry[2] = -1; 

    // ステータスバーに枠を追加します。
    SendMessage
        ( g_hStetusBarWnd
        , SB_SETPARTS
        , 3
        , (LPARAM)iAry
        );

    return 0;
}

お、今度はステータスバーを作ったらそのあと配列作って、さらにステー
タスバーにメッセージ送ってる
 SB_SETPARTS は、ステータスバーをいくつかの枠に分けるメッセージ。 
LPARAM に配列渡してるでしょ
うん、これだね

    // ステータスバー枠用配列。
    int iAry[3];
    iAry[0] = 100; 
    iAry[1] = 200; 
    iAry[2] = -1; 

これは、ステータスバーを3つに区切る場合の例。最初の 100 は、左か
ら 100 ピクセルまで、 200 は、左から 200 ピクセルまで、 -1 は右端ま

ん??? よくわかんないんだけど
イメージとしては、こんな感じ

          100
[    0     ]        200
[          1         ]                           -1 (画面端)
[                            2                    ]

これが全部重なって

          100        200                         -1 (画面端)
[    0     ][    1    ][             2            ]

ってなってるって感じ
なんとなく分かるけど……
っていうか、実際に使って見た方が早いかも。

// ID_MENU_TEST が選択されました。
LRESULT OnMenuTest
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    SendMessage( g_hStetusBarWnd, SB_SETTEXT
        , 0 | SBT_POPOUT, (LPARAM)"いち" );
    SendMessage( g_hStetusBarWnd, SB_SETTEXT
        , 1 | SBT_POPOUT, (LPARAM)"にぃ" );
    SendMessage( g_hStetusBarWnd, SB_SETTEXT
        , 2 | SBT_POPOUT, (LPARAM)"さん" );
    return 0;
}

うお、三段重ね! ビルドして実行、いちにぃさん! こうなるのねー
補足をふたつ。 SB_SETTEXT の WPARAM の

2 | SBT_POPOUT

の左側が分けたステータスバーのどこに出力するか。右側はさっきのス
テータスバーのスタイル
 | でくっつけるって、フラグくっつけるのと似てるね
一応同じなんだけど、ちょっと特殊かも。もうひとつ、 SB_SETPARTS の
WPARAM の 3 は、枠の数
それって配列の中身の数ってことでいいんだよね
うん、それと同じ

/*
    Preview Next Story!
*/
あれ、すぱっと終わったね
次にも続くから
って、 MFC の時は2回じゃなかったっけ?
 SDK だけの方が教えることは多いからね
便利じゃないから?
融通が利くから
融通?
というわけで次回
< Version 10.17 ステータスバーをクリック! >
につづく!
クリックなんてのも簡単にできます
 MFC の時はできなかったの?
試してない……
ダメジャン
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。