レガシー Windows API(概要)について

ここで紹介しているAPIは、Windows95、Windows NT3.5時代のAPI群であり、最新のAPIは含まれていないことに注しして欲しい。なお、当時の解説書は現在よりもより詳細に解説しているため、参考になるはずである。

  • レイアウトを変換する際、崩れているページがあります。
  • 概要およびSampleコードはありますが、APIの解説はありません。

ご要望があれば旧版のWin32 API(HELP形式)をお譲りします。問い合わせフォームより申し込みください。

Windows API スタティック コントロールの概要

スタティック コントロールについて

Microsoft(R) Windows(TM) では、 アプリケーションとユーザーの対話をサポートするダイアログ ボックスとコントロールを用意しています。「スタティック コントロール」とは、 応答を必要としないテキストやグラフィックを表示するためのコントロールです。通常、 スタティック コントロールは、 ほかのコントロールのラベルやコントロールのグループ化に使われます。スタティック コントロールは子ウィンドウですが、 選択することはできません。このため、 キーボード フォーカスを受け取ることはできず、 キーボード インターフェイスはなく、 ユーザー入力を受け取ることはできません。スタティック コントロールは、 親ウィンドウにメッセージを送りません。スタティック コントロールは、 STATICウィンドウ クラスに属します。

スタティック コントロールはオーバーラップ ウィンドウやポップアップ ウィンドウ、 子ウィンドウでも使えますが、 ダイアログ ボックスで使うために設計されています。Windowsでは、 ダイアログ ボックスでのコントロールの動作を標準化しています。ダイアログ ボックス以外でスタティック コントロールを使うと、 アプリケーションが標準的でない方法で動作する危険性があります。通常、 スタティック コントロールをダイアログ ボックスで使うか、 ウィンドウのサブクラス化によってカスタマイズしたスタティック コントロールを使います。

ダイアログ ボックスについて詳しくは、 ダイアログ ボックスの概要を参照してください。ウィンドウ クラスについて詳しくは、 ウィンドウ クラスの概要を参照してください。ウィンドウのサブクラス化について詳しくは、 ウィンドウ プロシージャの概要を参照してください。

次に示すトピックでは、 スタティック コントロールについて説明しています。

スタティック コントロールの種類とスタイル

スタティック コントロールのスタイル

スタティック コントロールの色メッセージ

デフォルトのスタティック コントロールの動作

スタティック コントロールの使用

スタティック コントロール メッセージ

 

 

 

スタティック コントロールの種類とスタイル

Windowsは、 4種類のスタティック コントロールを用意しています。

  長方形

 

  フレーム

 

  テキスト

 

  アイコン

 

どの種類にも1つ以上のスタイルがあります。

 

長方形

長方形コントロールは、 黒、 灰色、 白のいずれかで塗りつぶされた長方形を表示します。色は、 定数のSS_BLACKRECT SS_GRAYRECTSS_WHITERECTが示すスタイルで指定します。

 

フレーム

フレーム スタティック コントロールは、 黒、 灰色、 白のいずれかで塗りつぶされたフレームを表示します。色は、 定数のSS_BLACKRECT SS_GRAYRECTSS_WHITERECTが示すスタイルで指定します。次の図は、 3つのフレーム スタイルを示しています。

 

テキスト

テキスト スタティック コントロールは、 5つのスタイルのいずれかで長方形内にテキストを表示します。スタイルには、 中央揃え、 右寄せ、 ワード ラップ付き左寄せ、 ワードラップなし左寄せ、 「単純」があります。これらのスタイルは、 それぞれ、 SS_CENTERSS_LEFTSS_LEFTNOWORDWRAP SS_RIGHTSS_SIMPLEの各定数で定義されています。Windowsは、 定義済みの方法でこれらのコントロールのテキストを配置しますが、 「単純」テキストは再配置しません。

テキスト スタティック コントロールのテキストを変更するには、 SetWindowText関数かWM_SETTEXTメッセージを使います。

システムは、 スタティック コントロールにできるだけ多くのテキストを表示し、 入り切らないテキストをクリップします。コントロールに適したフォント サイズを計算するには、 テキストのフォント メトリックスを取得してください。フォントとフォント メトリックについて、 詳しくは、 フォントとテキストの概要を参照してください。

 

アイコン

アイコン スタティック コントロールは、 アイコンを表示します。アイコンのスタイルは、 SS_ICONで定義されるスタイルだけです。この種類のコントロールは、 ダイアログ ボックスでしか使えません。また、 スタティック コントロールの中で、 アイコンだけが親ウィンドウからのメッセージを受け取れます。

 

 

 

スタティック コントロールのスタイル

通常、 ダイアログ ボックスを構築するにはスタンドアロンのツールを使うため、 スタティック コントロールのスタイルを指定する必要はありません。しかし、 CreateWindow関数やCreateWindowEx関数を使ってスタティック コントロールを作成するときは、 次に示す定数を使ってスタイルを定義しなければなりません。

 

スタイル 説明

SS_BITMAP ビットマップがスタティック コントロールに表示されることを指定します。指定されたテキストは、 リソース ファイルの別の場所で定義されたビットマップの名前です (ファイル名ではありません)。このスタイルではnWidthnHeightパラメータは無視されます。コントロールは、 ビットマップが収まるように、 自分自身のサイズを自動的に調整します。

SS_BLACKFRAME ウィンドウ枠と同じ色で描画されるボックスを指定します。Windowsのデフォルト配色では、 この色は黒です。

SS_BLACKRECT 現在のウィンドウ枠の色で塗りつぶされた長方形を指定します。Windowsのデフォルト配色では、 この色は黒です。

SS_CENTER 中央にテキストが置かれた単純な長方形を指定します。テキストは、 書式化してから表示されます。行の終端からはみ出す単語は、 自動的に次の行の先頭に送られます。

SS_CENTERIMAGE コントロールのサイズが変更されるときに、 SS_BITMAPまたはSS_ICONスタイルが指定されたスタティック コントロールの中心点は固定されたままであることを指定します。新しいビットマップまたはアイコンが収まるように、 4つのサイドが調整されます。

SS_GRAYFRAME 画面の背景 (デスクトップ) と同じ色で枠が描画されたボックスを指定します。Windowsのデフォルト配色では、 この色は灰色です。

SS_GRAYRECT 現在の画面の背景色で塗りつぶされた長方形を指定します。Windowsのデフォルト配色では、 この色は灰色です。

SS_ICON ダイアログ ボックスに表示されるアイコンを指定します。テキストには、 (アイコンのファイル名ではなく) リソース ファイルで定義されているアイコンの名前を指定します。このスタイルでは、 nWidthパラメータとnHeightパラメータは無視されます。アイコンは自分自身で自動的にサイズ変更します。

SS_LEFT テキストが左寄せで描画された単純な長方形を指定します。テキストは、 書式化してから表示されます。行の終端からはみ出す単語は、 自動的に次の行の先頭に送られます。

SS_LEFTNOWORDWRAP テキストが左寄せで描画された単純な長方形を指定します。タブは展開されますが、 単語は送られません。行の終端をはみ出したテキストはクリップされます。

SS_METAPICT スタティック コントロールにメタファイル ピクチャが表示されることを指定します。指定されたテキストは、 リソース ファイルの別の場所で定義されたメタファイル ピクチャの名前です (ファイル名ではありません)。メタファイル スタティック コントロールのサイズは固定です。メタファイル ピクチャは、 スタティック コントロールのクライアント領域に収まるように拡大または縮小されます。

SS_NOPREFIX コントロールのテキストのアンパサンド (&) 文字がアクセラレータ プリフィックス文字として解釈されないようにします。このスタイルを指定しなければ、 アンパサンドは削除され、 文字列の次の文字に下線が付けられます。このスタティック コントロール スタイルは、 ほかの定義済みスタティック コントロールでも使えます。

SS_NOPREFIXは、 ビット単位のOR (|) 演算子を使ってほかのスタイルと組み合わせることができます。このスタイルは、 ファイル名などのアンパサンド (&) を含む可能性がある文字列をダイアログ ボックスのスタティック コントロールに表示するときに使います。

SS_OWNERDRAW スタティック コントロールのオーナーがコントロールを描画する責任があることを指定します。コントロールを描画する必要があるときは、 オーナー ウィンドウがWM_DRAWITEMメッセージを受け取ります。

SS_RIGHT テキストを右寄せで描画した単純な長方形を指定します。テキストは書式化してから表示されます。行の終端からはみ出す単語は、 自動的に次の行の先頭に送られます。

SS_RIGHTIMAGE コントロールのサイズが変更されるときに、 SS_BITMAPまたはSS_ICONスタイルが指定されたスタティック コントロールの右下隅は固定されたままであることを指定します。新しいビットマップまたはアイコンが収まるように調整されるのは、 上側と左側だけです。

SS_SIMPLE テキストを1行に左寄せで描画した単純な長方形を指定します。テキスト行はそのまま表示されます。コントロールの親であるウィンドウやダイアログ ボックスは、 WM_CTLCOLORSTATICメッセージを処理してはいけません。

SS_WHITEFRAME ウィンドウの背景と同じ色で枠を描画したボックスを指定します。Windowsのデフォルト配色では、 この色は白です。

SS_WHITERECT ウィンドウの背景と同じ色で塗りつぶされた長方形を指定します。Windowsのデフォルト配色では、 この色は白です。

 

 

スタティック コントロールで使われる色について詳しくは、 スタティック コントロールと色を参照してください。

 

 

スタティック コントロールの色メッセージ

Windowsは、 スタティック コントロールのデフォルトの色の値を用意しています。システムは、 スタティック コントロールを描画する前に、 コントロールの親ウィンドウにWM_CTLCOLORSTATICメッセージを送ります。このメッセージは、 スタティック コントロールのデバイス コンテキスト (DC) のハンドルと、 子ウィンドウのハンドルが設定されています。親ウィンドウは、 このハンドルを使って、 スタティック コントロールのテキストと色を変更できます。デフォルトのスタティック コントロールのカラー メッセージを次に示します。

 

用途

COLOR_BACKGROUND 黒の長方形と枠の色

COLOR_WINDOW 灰色の長方形と枠の色

COLOR_WINDOWFRAME 白の長方形と枠の色

COLOR_WINDOWTEXT テキスト コントロールのテキストの色

 

 

上記の色のデフォルト値を取得するには、 GetSysColor関数を呼び出します。また、 色の値を設定するには、 SetSysColors関数を呼び出します。システム カラーについて詳しくは、 システム情報の概要を参照してください。コントロールでの色の使い方について、 詳しくは、 コントロールの概要を参照してください。

移植上の問題: Microsoft(R) Windows NT (TM)では、 WM_CTLCOLORメッセージはコントロールのカラー メッセージのセットで置き換えられています。以前のバージョンのWindows用に作成されているアプリケーションをWindows NTに移植するときは、 WM_CTLCOLORメッセージを処理するコードを修正してください。

 

 

デフォルトのメッセージ処理

定義済みスタティック コントロール ウィンドウ クラスのウィンドウ プロシージャは、 スタティック コントロールのプロシージャが処理しないメッセージのデフォルト処理を行います。定義済みウィンドウ プロシージャは、 スタティック コントロールがFALSEを返したメッセージを調べて、 次の表に示すデフォルト動作を実行します。この表で、 テキスト スタティック コントロールとは、 SS_LEFTSS_CENTERSS_RIGHT SS_SIMPLESS_LEFTNOWORDWRAPのいずれかのスタイルのスタティック コントロールです。

 

メッセージ デフォルト動作

STM_GETICON スタティック コントロールがSS_ICONならば、 アイコンのハンドルを返します。そうでないときは、 NULLを返します。

STM_SETICON スタティック コントロールに 新しいアイコンを設定し、 新しいビットマップが収まるようにコントロールのサイズを変更し、 長方形を無効化して新しいアイコンが描画されるようにします。以前のアイコンのハンドルを返します。

WM_CREATE グラフィック スタティック コントロールの場合、 グラフィック オブジェクトをロードして、 オブジェクトのサイズに合わせてウィンドウのサイズを変更します。ほかのコントロールの場合は何もしません。

WM_DESTROY グラフィック スタティック コントロールの場合、 グラフィック オブジェクトを解放して破棄します。ほかのコントロールの場合は何もしません。

WM_ENABLE 可視のスタティック コントロールを再描画します。

WM_ERASEBKGND TRUEを返し、 コントロールが背景を消去したことを示します。

WM_GETDLGCODE DLGC_STATICを返します。

WM_GETFONT テキスト スタティック コントロールの場合、 フォントのハンドルを返します。

WM_GETTEXTLENGTH テキスト スタティック コントロールの場合、 テキストの文字数を返します。

WM_NCCREATE テキスト スタティック コントロールの場合、 ウィンドウ テキストを設定します。そうでないときは、 TRUEを返します。

WM_NCDESTROY コントロール スタイルがSS_LEFTSS_CENTER SS_RIGHTSS_SIMPLEならば、 何もしません。そうでないときは、 DefWindowProc関数を呼び出します。

WM_NCHITTEST HTTRANSPARENTを返します。

WM_PAINT コントロールを再描画します。

WM_SETFONT テキスト スタティック コントロールのフォントを設定して再描画します。

WM_SETTEXT テキスト スタティック コントロールのテキストを設定して再描画します。

 

 

定義済みウィンドウ プロシージャは、 上記以外のメッセージをすべてDefWindowProcに渡して、 デフォルト処理を実行させます。

 

 

スタティック コントロールの使用

次のコード例は、 タイマとSTM_SETICONメッセージを使って、 ダイアログ ボックスのアイコンをアニメーション表示します。アイコンのハンドルとアイコン識別子 (IDI_ICON) は、 グローバルなヘッダー ファイルで定義されています。

 

LRESULT APIENTRY StaticProc(hDlg, message, wParam, lParam)
HWND hDlg; /* window handle of dialog box */
UINT message; /* type of message */
UINT wParam; /* message-specific information */
LONG lParam;
{
UINT idTimer = 1;
static UINT i;

static HICON aIcons[11];

switch (message) {
case WM_INITDIALOG: /* initialize dialog box */
i = 0;

/* Load icons("hinst" is defined globally). */

hiconOne = LoadIcon(hinst, "OneIco");
aIcons[i] = hiconOne;
hiconTwo = LoadIcon(hinst, "TwoIco");
aIcons[++i] = hiconTwo;

.
. /* Continue with the remaining icons. */
.

i = 0;

/*
* Use STM_SETICON to associate an icon with the
* IDI_ICON identifier.
*/

SendDlgItemMessage(hDlg, /* dialog box window handle */
IDI_ICON, /* icon identifier */
STM_SETICON, /* message to send */
(WPARAM) aIcons[i++], /* icon handle */
0); /* not used */

/* Set a timer for 50-millisecond intervals. */

SetTimer(hDlg, idTimer, 50, (TIMERPROC) NULL);
return TRUE;


case WM_TIMER:

/*
* Use STM_SETICON to associate a new icon with
* the IDI_ICON identifier whenever a WM_TIMER
* message is received.
*/

SendDlgItemMessage(hDlg, /* dialog box window handle */
IDI_ICON, /* icon identifier */
STM_SETICON, /* message to send */
(WPARAM) aIcons[i++], /* new icon handle */
0); /* not used */
if (i == 10)
i = 0;

break;

case WM_COMMAND:
if (wParam == IDOK
|| wParam == IDCANCEL) {
EndDialog(hDlg, TRUE);
return TRUE;
}
return 0;

case WM_DESTROY: /* clean up */
KillTimer(hDlg, idTimer);
DeleteObject(hiconOne);
DeleteObject(hiconTwo);
.
. /* Continue with the remaining icons. */
.

return 0;
}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}

スタティック コントロール メッセージ

スタティック コントロールに関するメッセージを次に示します (STM_GETICONSTM_SETICONは、 アイコンだけで使われます)。

STM_GETICON

STM_SETICON

WM_CTLCOLORSTATIC

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします