Borland C++ 5.5 で
リソースをリンク

Last Update: Jun.11,2001
Borland C++ Compiler 5.5(日本語版)」を使って、本格的な Windows アプリケーションを作成してみました。

1. 最初に

メニューリソースを作成して、本格的な Windows アプリケーションを作成してみます。ここでのポイントは、リソースをリンクする方法です。この方法を理解すれば、メニューの他にアイコンやビットマップ、ダイアログボックス等も利用することが出来るようになります。Windows アプリケーションのプログラミングの詳細については、Charles Petzold 著「プログラミング Windows95」(アスキー出版局)などの書籍を参考にして下さい。

2. 作成したファイル

/* sample1.c */

#include <windows.h>
#include "res.h"

LPCSTR szWindowClass = "SAMPLE1_CLASS";
LPCSTR szHello = "Hello, Windows C Programming !";

LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
                         WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    RECT rt;

    switch (message) 
    {
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDM_EXIT: /* リソースで定義したID */
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        GetClientRect(hWnd, &rt);
        DrawText(hdc, szHello, lstrlen(szHello), &rt,
                 DT_CENTER | DT_SINGLELINE | DT_VCENTER);
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }

    return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    MSG msg;
    WNDCLASSEX wcex;
    HWND hWnd;

    wcex.cbSize = sizeof(WNDCLASSEX); 

    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(NULL,IDI_APPLICATION);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = (LPCSTR)IDR_MENU; /* リソースで定義したID */
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = NULL;

    RegisterClassEx(&wcex);

    hWnd = CreateWindow(szWindowClass,
        "Sample 1 Application", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
        NULL, NULL, hInstance, NULL);

    if (!hWnd) 
        return FALSE;

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    /* メッセージ ループ */
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

/* res1.rc */

#include "res.h"

IDR_MENU MENU
BEGIN
    POPUP "ファイル(&F)"
    BEGIN
        MENUITEM "終了(&X)" IDM_EXIT
    END
END

/* res.h */

#define IDR_MENU    101
#define IDM_EXIT    102

3. コンパイル用のバッチファイルを書く

メモ帳で、

set path=c:\borland\bcc55\bin;%PATH%
bcc32 -W sample1.c
brc32 res1.rc sample1.exe

と記述し、「smake.bat」と名前をつけて、上記の3つのソースと同じディレクトリ内に保存し、「smake.bat」をダブルクリックしてコンパイル・リンクを行いました。

brc32.exe は、リソースをコンパイルして、EXE にリンクするリソースシェルです。コマンドラインの構文は、

brc32 [options] <filename>.RC [<filename>.EXE]

です。先にリソースのない EXE を作成しておいて、後でリンクするのがポイントです。


Back Copyright (c) 2000, 2001 AOK. All Rights Reserved.