静的コントロールについて

アプリケーションでは、多くの場合、静的コントロールを使用して他のコントロールにラベルを付けたり、コントロールのグループを分離したりします。 静的コントロールは子ウィンドウですが、選択することはできません。 そのため、キーボード フォーカスを受け取ることができず、キーボード インターフェイスを持つことはできません。 SS_NOTIFY スタイルを持つ静的コントロールはマウス入力を受け取り、ユーザーがコントロールをクリックまたはダブルクリックしたときに親ウィンドウに通知します。 静的コントロールは STATIC ウィンドウ クラスに属します。

静的コントロールは、重なり合ったウィンドウ、ポップアップ ウィンドウ、子ウィンドウで使用できますが、ダイアログ ボックスで使用できるように設計されており、システムによって動作が標準化されます。 ダイアログ ボックスの外部で静的コントロールを使用すると、開発者は、アプリケーションが非標準の方法で動作する可能性があるリスクを高めます。 通常、開発者はダイアログ ボックスで静的コントロールを使用するか、SS_OWNERDRAW スタイルを使用してカスタマイズされた静的コントロールを作成します。

このセクションでは、次のトピックについて説明します。

静的コントロールの種類

静的コントロールには 4 種類あります。 各型には、1 つ以上の 静的コントロール スタイルがあります。

単純なグラフィックスの静的コントロール

単純なグラフィックス静的コントロールには、フレームまたは塗りつぶされた四角形が表示されます。 フレームは、黒、灰色、白など、さまざまなスタイルで描画できます。 さらに、フレームをエッチングされたスタイルで描画して、立体的な外観にすることができます。 フレーム スタイルには、SS_BLACKFRAME、SS_GRAYFRAME、SS_WHITEFRAME、SS_ETCHEDHORZ、SS_ETCHEDVERT、およびSS_ETCHEDFRAMEが含まれます。

四角形は、黒、灰色、白の 3 つのスタイルのいずれかで色で塗りつぶすことができます。 これらのスタイルは、定数SS_BLACKRECT、SS_GRAYRECT、およびSS_WHITERECTによって定義されます。

グラフィックス スタイルを組み合わせることはできません。

テキスト静的コントロール

テキスト静的コントロールは、次の 5 つのスタイルのいずれかで四角形にテキストを表示します。

  • ワード ラップなしで左揃え
  • ワード ラップありで左揃え
  • 中央揃え
  • 右揃え
  • simple

これらのスタイルは、それぞれ定数SS_LEFTNOWORDWRAP、SS_LEFT、SS_CENTER、SS_RIGHT、およびSS_SIMPLEによって定義されます。 これらのコントロールのテキストは、"単純" テキストを除き、事前に定義された方法で並べ替えられます。このテキストは再配置されません。

アプリケーションは、 SetWindowText 関数または WM_SETTEXT メッセージを使用して、テキスト静的コントロール内のテキストをいつでも変更できます。

システムは、静的コントロールにできる限り多くのテキストを表示し、収まらないものをクリップします。 コントロールに適したサイズを計算するには、テキストのフォント メトリックを取得します。 フォントとフォント メトリックの詳細については、「フォントとテキスト」を参照してください。

既定では、静的コントロールのウィンドウ テキストには、コントロールのショートカット キーとして次の文字を定義するアンパサンドを含めることができます (または、ほとんどの静的コントロールの場合は、ラベル付けするコントロールの場合は、タブ オーダーの次のコントロールです)。 アンパサンドを使用してショートカットを定義するのではなく、テキストにアンパサンドを表示する場合は、SS_NOPREFIXスタイルを含めます。

イメージの静的コントロール

イメージの静的コントロールでは、ビットマップ、アイコン (アニメーション化されたアイコンを含む)、または拡張メタファイルを表示できます。 特定の静的コントロールに表示されるグラフィックの種類は、コントロールのスタイル (SS_BITMAP、SS_ICON、またはSS_ENHMETAFILE) によって異なります。 アプリケーションは、コントロールを作成するときにスタイルを指定し、表示するコントロールのビットマップ、アイコン、またはメタファイルへのハンドルも指定します。 コントロールが作成された後、アプリケーションは、新しいグラフィック オブジェクトへのハンドルを指定して、 STM_SETIMAGE メッセージを送信することによって、コントロールに別のグラフィックを関連付けることができます。 アプリケーションは、静的コントロールに現在関連付けられているグラフィック オブジェクトへのハンドルを取得するには、STM_GETIMAGE メッセージを送信します。 アプリケーションは、 SendDlgItemMessage 関数を使用して静的コントロールにメッセージを送信します。

オーナー描画スタティック コントロール

SS_OWNERDRAW スタイルを使用すると、アプリケーションが静的コントロールを描画する責任を負うことができます。 所有者描画静的コントロール (その所有者) の親ウィンドウは、静的コントロールを 描画する必要があるときに常に WM_DRAWITEM メッセージを受け取ります。 このメッセージには、コントロールの描画時に所有者ウィンドウが使用する情報を含む DRAWITEMSTRUCT 構造体へのポインターが含まれています。

静的コントロールの既定のメッセージ処理

静的 コントロール プロシージャが処理しないすべてのメッセージについては、定義済みの静的 コントロール ウィンドウ クラスのウィンドウ プロシージャが既定の処理を実行します。 静的 コントロール プロシージャがいずれかのメッセージについて FALSE を返すと、定義済みのウィンドウ プロシージャがメッセージをチェックし、次の表に示した既定のアクションを実行します。 表のテキスト静的コントロールは、スタイル SS_LEFTNOWORDWRAP、SS_LEFT、SS_CENTER、SS_RIGHT、またはSS_SIMPLEを持つ静的コントロールです。

メッセージ 既定の動作
WM_CREATE グラフィック の静的コントロール用に、グラフィック オブジェクトを読み込み、ウィンドウのサイズをオブジェクトのサイズに合わせて設定します。 他の静的コントロールに対してアクションを実行しません。
WM_DESTROY グラフィックの静的コントロール用に、グラフィック オブジェクトを解放して破棄します。 他の静的コントロールに対してアクションを実行しません。
WM_ENABLE 表示されている静的コントロールを再描画します。
WM_ERASEBKGND コントロールが 背景を消去することを示す TRUE を返します。
WM_GETDLGCODE DLGC_STATICを返します。
WM_GETFONT テキストの静的コントロールのフォントへのハンドルを返します。
WM_GETTEXT コピーされた文字数を返します。
WM_GETTEXTLENGTH テキスト静的コントロールのテキストの長さを文字数で返します。
WM_LBUTTONDBLCLK コントロール スタイルがSS_NOTIFYされている場合は、 親ウィンドウに STN_DBLCLK 通知コードを送信します。
WM_LBUTTONDOWN コントロール スタイルがSS_NOTIFYされている場合は、 親ウィンドウに STN_CLICKED 通知コードを送信します。
WM_NCLBUTTONDBLCLK コントロール スタイルがSS_NOTIFYされている場合は、 親ウィンドウに STN_DBLCLK 通知コードを送信します。
WM_NCLBUTTONDOWN コントロール スタイルがSS_NOTIFYされている場合は、 親ウィンドウに STN_CLICKED 通知コードを送信します。
WM_NCHITTEST コントロール スタイルがSS_NOTIFYの場合は HTCLIENT を返します。それ以外の場合は HTTRANSPARENT を返します。
WM_PAINT コントロールを再描画します。
WM_SETFONT テキストの静的コントロールのフォントと再描画を設定します。
WM_SETTEXT テキストの静的コントロールのテキストと再描画を設定します。

 

定義済みのウィンドウ プロシージャは、既定の処理を行えるように、その他のすべてのメッセージを DefWindowProc 関数に渡します。