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

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

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

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

ページ移動

1-3-12. リソースとダイアログボックス

 Windowsには、リソースなる物があります。リソースは日本語では資源ですが、この2つの言葉は別の使い方をします。リソースは、RCファイルで示されるメニューやダイアログボックスのことです。資源とは、メモリやマウス・キーなどを含めたコンピュータ上の原材料を表します。リソースには以下の種類を管理しますが、ApHelloで使用しているものは、強調表示します。
  • メニュー
  • アクセラレータ
  • アイコン
  • カーソル
  • ビットマップ
  • ダイアログボックス
  • 文字列テーブル
  • バージョン情報
  • フォント
  • メッセージテーブル
  • ユーザリソース
 リソースは、普通はダイアログエディタで作成します。またアイコンやカーソルやビットマップなどは、特別な画像エディタで作成する必要があります。Visual−Cにはそのすべてのエディタ機能があります。しかし画像エディタ以外はテキストファイルですので、テキストエディタで作成することも不可能ではありません。またダイアログエディタで作成した後に、テキストエディタで修正することは良くあります。

リソースとファイル

 リソースはRCファイルで作成します。1つのアプリケーションに1つでないといけません。もし分割する場合は、#include 文で一括化する必要があります。
 リソースは、リソースコンパイラで、Windowsが理解できるデータ形式に変換されます。そして、リンカでコードのオブジェクトファイルと合体して、EXEファイルの一部に取り込まれます。よって、ApHello.rc は、ApHello.exe の中のどこかに存在します。ユーザは、LoadIcon,LoadCursor などのAPIをコールしないと、このデータをメモリ上にロードできません。クラスの登録時のメニューの指定の様に、何かのAPIでまとめてロードすることはあります。

アイコンとメニュー

ApHello  ICON    DISCARDABLE     "ApHello.ico"

ApHello  MENU DISCARDABLE 
BEGIN
    POPUP "ファイル(&F)"
    BEGIN
        MENUITEM "バージョン情報(&A)...",          IDM_ABOUT
        MENUITEM SEPARATOR
        MENUITEM "ApHelloの終了(&X)",           IDM_EXIT
    END
    POPUP "表示(&V)"
    BEGIN
        MENUITEM "左側へ表示(&L)",              IDM_LEFT
        MENUITEM "中央へ表示(&C)",              IDM_CENTER
        MENUITEM "右側へ表示(&R)",              IDM_RIGHT
    END
END
 アイコンは、ICON文でそのファイルを指定します。DISCARDABLE はいらなくなれば破棄可能なことを示しています。破棄とはメモリ上からデータを除くことですが、アイコンがいらなくなる事はありませんので、あまり意味がありません。ApHello が名前です。この名前をパラメータにして、LoadIcon 関数をコールすることで、メモリにロードします。アイコンは、クラスの登録時に、WNDCLASSEX 構造体の hIcon メンバに、LoadIcon したハンドルを設定することで、ウィンドウに関連付けます。

 メニューは、MENU文で指定します。名前や DISCARDABLE はアイコンと同じです。種類が違えば同名でもかまいません。また名前でなく番号でもかまいません。メニューは、階層構造で、ファイル・表示があり、それにポップアップするサブメニューがいくつかあります。なんとなく理解できると思います。右の IDM_XXX がこのコマンドが実行されたときのコードです。またメニューを指定する時にも使用します。

ダイアログボックス

 ダイアログボックスは、座標がありますので、テキストエディタで作成する訳にはいかないでしょう。ダイアログエディタが必要です。
ABOUTDLG DIALOG DISCARDABLE  0, 0, 191, 101
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION
CAPTION "ApHelloのバージョン情報"
FONT 9, "MS Pゴシック"
BEGIN
    CTEXT           "ApHello for Windows9x",IDC_STATIC,33,8,148,8
    CTEXT           "The Sample of Windows API Topics.",IDC_STATIC,
                    33,20,148,8
    CTEXT           "Version 1.00",IDC_STATIC,33,35,148,8
    CTEXT           "(C) Copyright 1999 Arcpit Inc. All Right Reserved.",
                    IDC_STATIC,33,54,148,8
    ICON            "ApHello",IDC_STATIC,8,13,18,21
    DEFPUSHBUTTON   "OK",IDOK,136,73,50,14
    LTEXT           "ホームページ: http://www.tsp.ne.jp/~arcpit/",IDC_STATIC,
                    6,72,118,8
    LTEXT           "Eメール:       arcpit@tsp.ne.jp",IDC_STATIC,6,84,79,8
END
 ダイアログボックスは、名前、DIALOG 文、DISCARDABLE、そして先頭座標と幅と高さで始まります。ただしこの中で使用する座標は、特殊な座標系を使用します。次にスタイルとタイトルが続き、使用するフォントが来ます。BEGIN〜END で内部のコントロールを定義します。CTEXT は中央寄せで、LTEXTは左寄せのスタティックコントロールです。ICON はアイコンを表示し、DEFPUSHBUTTON は、ボタンを表します。この中で操作できるのは、[OK]ボタンだけです。他は表示するだけです。

 ダイアログボックスは、DialogBox 関数で、メモリにロードで、表示します、ApHelloでは、WM_COMMAND メッセージの IDM_ABOUT の個所でコールします。ダイアログボックスの実際の操作は、ダイアログボックスプロシージャで行ないます。

static BOOL CALLBACK AboutProc(HWND hDlg,UINT uMsg
                                        ,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case IDOK:       // OK
                case IDCANCEL:   // キャンセル
                    EndDialog(hDlg,TRUE);
                    return TRUE;
            }
            break;
    }
    return FALSE;
}
 このプロシージャは、ウィンドウのプロシージャとは少し異なります。[OK]ボタンを押した時にダイアログボックスから抜け出るコードだけです。

ページ移動