ダイアログボックスのアプリケーションにアイコンを表示

ダイアログボックス1

ダイアログボックスのアプリケーションに、エクスプローラで表示されるアイコンと、実行時のタイトルバーにアイコンを表示させます。

ダイアログボックスの作成 - インコのWindowsSDK で作成したソースをもとに作成します。

C言語 ソースファイル

WM_INITDIALOG

ダイアログが作成されたときに一度だけ送られてくる WM_INITDIALOGメッセージを受けたら、

1、LoadImage()で、ビットマップをロードします。
LoadImage()の2つ目の引数は、MAKEINTRESOURCE()を使って、リソースIDから文字列に変換します。

2、WM_SETICONメッセージを送る。

lResult = SendMessage(
    (HWND) hWndControl, // ウィンドウのハンドル
    (UINT) WM_SETICON,
    (WPARAM) fType,     // アイコンのタイプ
                        // ICON_BIG:大きいアイコン ICON_SMALL:小さいアイコン
    (LPARAM) hicon,     // アイコンのハンドル
);

リソースファイル

アイコン [ICON]


id ICON "file.ico"

id リソースID
file.ico アイコンのファイル名

・Visual Studioのリソース ビュー、ResEditでの設定
「リソース(Resources)」ウインドウを右クリック - 「リソースの追加(Add Resource)...」 - 「アイコン(Icon)」 でアイコンを追加
あとは、用意したしたアイコンファイルを選択してください。

ソースコードの入力

ソースコードは下記のように入れてください。

test.cpp
#include <windows.h>
#include "resource.h"

// グローバル変数:
HINSTANCE hInst;                          // 現在のインターフェイス

// このコード モジュールに含まれる関数の宣言を転送します:
BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
          PSTR lpCmdLine, int nCmdShow )
{

    hInst = hInstance; // グローバル変数にインスタンス処理を格納します。
    DialogBox(hInstance, TEXT("DIALOG_BOX"), NULL, DialogProc);
    return 0;
}

BOOL CALLBACK DialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    HICON hIcon;
    switch (msg)
    {
        case WM_INITDIALOG:
            // アイコンのセット
            hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_TEST), IMAGE_ICON, 16, 16, 0);
            SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
            break;
        case WM_CLOSE:
            EndDialog(hWnd, IDOK);
            return TRUE;
    }
    return FALSE;
}
resource.h

#define IDI_TEST 107
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif

Reseditで作成した場合は、これとは異なるソースコードになります。

test.rc
#include "resource.h"

/////////////////////////////////////////////////////////////////////////////
//
// アイコン
//

IDI_TEST       ICON         "test.ico"

/////////////////////////////////////////////////////////////////////////////
//
// ダイアログ
//

DIALOG_BOX DIALOG 0, 0, 170, 62
CAPTION "ダイアログ"
BEGIN
END

Reseditで作成した場合は、これとは異なるソースコードになります。