アークピットのホームページに戻る

WinAPIトピックのトップページに戻る

APIトピックの各章に移動する

ダウンロードのページに移動する
ダウンロードができ
ない場合の対処法
 

ページ移動

2-5-6. ウインドウのリサイズの処理

 ここでは、フレームバーモジュールを使用する際に、ウィンドウをリサイズする方法を説明します。

ウインドウのリサイズの処理

 FrameBar.c のテストプログラムでは、ウィンドウプロシージャの、WM_SIZE メッセージで以下の実行をしています。
        case WM_SIZE:           // ウィンドウのサイズが変わった
        {
            RECT rc[4];

            SetRect(rc,0,0,LOWORD(lParam),HIWORD(lParam));
            GetRectFrameBar(rc);
            if (hHello) // Helloウィンドウのサイズを調整
                MoveWindow(hHello,rc[1].left, rc[1].top
                                 ,rc[1].right,rc[1].bottom,TRUE);
            if (hFrame) // フレームバーコントロールのサイズを調整
                MoveWindow(hFrame,rc[2].left, rc[2].top
                                 ,rc[2].right,rc[2].bottom,TRUE);
            if (hEdit)  // エディトコントロールのサイズを調整
                MoveWindow(hEdit, rc[3].left, rc[3].top
                                , rc[3].right,rc[3].bottom,TRUE);
            return 0;
        }
 ウィンドウをリサイズすると、3つのウィンドウ(hHello,hFrame,hEdit)の位置とサイズを調整しなければいけません。それには、これらの位置とサイズを知る必要があります。そのための関数が、GetRectFrameBar です。この関数は、4つのRECTの配列を渡します。rc[0]には、親ウィンドウのクライアント座標で、3つのウィンドウ(hHello,hFrame,hEdit)を配置する範囲を設定します。上記のコードでは、SetRect がこの処理で、クライアントエリアの全域を指定しています。そして、GetRectFrameBar 関数をコールすると、rc[1]にはHelloウィンドウの位置とサイズ、rc[2]にはフレームバーのウィンドウの位置とサイズ、rc[3]にはエディトコントロールのウィンドウの位置とサイズが設定されます。rc[0]は左上と右下の範囲を座標で設定して、他は左上の位置と幅と高さのサイズを得られることに注意してください。
 そして、MoveWindow 関数で各ウィンドウのサイズを変更します。

ページ移動