次の方法で共有


ウィンドウとは

ウィンドウとは

明らかに、Windows は Windows の中心です。 これらは非常に重要なので、オペレーティング システムに名前を付けます。 しかし、ウィンドウとは何ですか? ウィンドウを考えると、次のようなことが考えられます。

アプリケーション ウィンドウのスクリーン ショット

この種類のウィンドウは、アプリケーション ウィンドウまたはメイン ウィンドウと呼ばれます。 通常、タイトル バー、 最小化 ボタンと 最大化 ボタン、およびその他の標準 UI 要素を含むフレームがあります。 フレームは、ウィンドウの クライアント以外の領域 と呼ばれます。オペレーティング システムがウィンドウのその部分を管理するため、 と呼ばれます。 フレーム内の領域は クライアント領域です。 これは、プログラムが管理するウィンドウの一部です。

別の種類のウィンドウを次に示します。

コントロール ウィンドウのスクリーン ショット

Windows プログラミングを初めて使用する場合は、ボタンや編集ボックスなどの UI コントロール自体がウィンドウであると驚くかもしれません。 UI コントロールとアプリケーション ウィンドウの主な違いは、コントロール自体が存在しない点です。 代わりに、コントロールはアプリケーション ウィンドウを基準にして配置されます。 アプリケーション ウィンドウをドラッグすると、期待どおりにコントロールが一緒に移動します。 また、コントロールとアプリケーション ウィンドウは相互に通信できます。 (たとえば、アプリケーション ウィンドウはボタンからクリック通知を受け取ります)。

したがって、 ウィンドウを考えるときは、単に アプリケーション ウィンドウを考えないでください。 代わりに、ウィンドウは次のようなプログラミングコンストラクトと考えてください。

  • 画面の特定の部分を占めます。
  • 特定の時点で表示される場合と表示されない場合があります。
  • それ自体を描画する方法を知っています。
  • ユーザーまたはオペレーティング システムからのイベントに応答します。

親ウィンドウと所有者ウィンドウ

UI コントロールの場合、コントロール ウィンドウはアプリケーション ウィンドウの と言われます。 アプリケーション ウィンドウは、コントロール ウィンドウの です。 親ウィンドウは、子ウィンドウの配置に使用される座標系を提供します。 親ウィンドウを持つことは、ウィンドウの外観の側面に影響します。たとえば、子ウィンドウがクリップされ、子ウィンドウの一部が親ウィンドウの境界線の外側に表示されなくなります。

もう 1 つのリレーションシップは、アプリケーション ウィンドウとモーダル ダイアログ ウィンドウの関係です。 アプリケーションがモーダル ダイアログを表示すると、アプリケーション ウィンドウが 所有者 ウィンドウになり、ダイアログが 所有 ウィンドウになります。 所有されているウィンドウは、常に所有者ウィンドウの前に表示されます。 所有者が最小化されると非表示になり、所有者と同時に破棄されます。

次の図は、2 つのボタンを含むダイアログ ボックスを表示するアプリケーションを示しています。

ダイアログ ボックスを含むアプリケーションのスクリーン ショット

アプリケーション ウィンドウはダイアログ ウィンドウを所有し、ダイアログ ウィンドウは両方のボタン ウィンドウの親ウィンドウです。 次の図は、これらの関係を示しています。

親子関係と所有者/所有関係を示す図

ウィンドウ ハンドル

Windows はオブジェクトであり、コードとデータの両方を持ちますが、C++ クラスではありません。 代わりに、プログラムはハンドルと呼ばれる値を使用してウィンドウを参照 します。 ハンドルは不透明な型です。 基本的には、オペレーティング システムがオブジェクトを識別するために使用する数値に過ぎません。 Windows は、作成されたすべてのウィンドウの大きなテーブルを持っていると見なすことができます。 このテーブルを使用して、ハンドルでウィンドウを検索します。 (それが内部的にどのように機能するかは重要ではありません)。ウィンドウ ハンドルのデータ型は HWND で、通常は "aitch-wind" と発音されます。ウィンドウ ハンドルは、ウィンドウを作成する関数 (CreateWindowCreateWindowEx) によって返されます。

ウィンドウで操作を実行するには、通常、 HWND 値をパラメーターとして受け取る関数を呼び出します。 たとえば、画面上のウィンドウの位置を変更するには、 MoveWindow 関数を呼び出します。

BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);

最初のパラメーターは、移動するウィンドウへのハンドルです。 他のパラメーターでは、ウィンドウの新しい場所と、ウィンドウを再描画するかどうかを指定します。

ハンドルはポインターではないことに注意してください。 hwnd がハンドルを含む変数の場合、書き込み*hwndによってハンドルを逆参照しようとするとエラーになります。

画面とウィンドウの座標

座標は、デバイスに依存しないピクセル単位で測定されます。 グラフィックスについて説明する場合は、 デバイスに依存しない ピクセルの デバイスに依存しない 部分について詳しく説明します。

タスクによっては、画面に対する相対座標、ウィンドウ (フレームを含む)、またはウィンドウのクライアント領域に対する相対座標を測定できます。 たとえば、画面座標を使用してウィンドウを画面上に配置しますが、クライアント座標を使用してウィンドウ内に描画します。 いずれの場合も、原点 (0、0) は常に領域の左上隅です。

画面、ウィンドウ、クライアント座標を示す図

次へ

WinMain: アプリケーション エントリ ポイント