BCC32Cを使ってみた

サンプルプログラム2

Windows プログラム

2-1)sample201(Windows Skeleton プログラム )
Windowsのスケルトン・プログラムです。@がソース・プログラムです、注意する箇所にはコメント入れています。
Windowクラスの宣言、(InitApplication)、Windowクラスの登録・Windowsの表示(InitInstance)、メッセージ・ループからなるWinMain関数(コンソール・プログラムのmain関数にあたります)とアプリケーションの本体であるウィンドウ・プロシージャ関数(コールバック関数とも呼ばれます)からなります。

Aがメイク・ファイルになります。BCC32Cでコンパイルし、ilink32でリンクし、実行型プログラム(.EXE)を作成します。コンパイル結果がBです。最後に実行型プログラムを実行した時の結果がCになります。
ここに載せたファイルは、こちら

@ソースプログラム

// -------------------------------------------------
// sample_201.c.
// Windows Skeleton program
//          2018/07/20 Kimio Nakamura
// -------------------------------------------------

#include <windows.h>
                                             // コールバック関数のプロトタイプ宣言
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
//  =======================================================================
//   Name     : int WINAPI WinMain(HINSTANCE hThisInst , 
//                    HINSTANCE hPrevInst , LPSTR lpszArgs,int nWinMode)
//   Usage    : ウインドウズ・メイン関数
//   Parameter:     hThisInst    現在のインスタンス ハンドル
//                    hPrevInst    常にNULL
//                    lpszArgs    コマンドライン引数
//                    nWinMode    ウインドウ表示状態
//   Return   : 0
//  =======================================================================
int WINAPI WinMain(HINSTANCE hThisInst , HINSTANCE hPrevInst , 
                                          LPSTR lpszArgs,int nWinMode)
{   
    char szWinName[] = "sample_201";              // ウィンドウ クラス名
    HWND hwnd;
    MSG msg;
    BOOL bRet;
/* ------------ InitApplication ----------------- */ 
                                                // ウィンドウ クラス宣言
    WNDCLASSEX wc1;

    wc1.cbSize = sizeof(WNDCLASSEX);
    wc1.style = CS_HREDRAW | CS_VREDRAW;        //
    wc1.lpfnWndProc = WindowFunc;            // コールバック関数のプロシージャ名
    wc1.cbClsExtra = 0;
    wc1.cbWndExtra = 0;
    wc1.hInstance = hThisInst;                    // インスタンス ハンドル
                                                // アイコン
    wc1.hIcon = LoadImage(NULL ,MAKEINTRESOURCE(IDI_APPLICATION),
                            IMAGE_ICON, 0, 0,
                            LR_DEFAULTSIZE | LR_SHARED);
                                                // カーソル
    wc1.hCursor = LoadImage(NULL ,MAKEINTRESOURCE(IDC_ARROW),
                            IMAGE_CURSOR, 0, 0,
                            LR_DEFAULTSIZE | LR_SHARED);

    wc1.lpszMenuName =NULL;                        // メニュー名
    wc1.lpszClassName = szWinName;                // ウィンドウ クラス名
                                                // スモール アイコン
    wc1.hIconSm = LoadImage(NULL ,MAKEINTRESOURCE(IDI_APPLICATION),
                            IMAGE_ICON, 0, 0,
                            LR_DEFAULTSIZE | LR_SHARED);
                                                // 背景ブラシ
    wc1.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);

    if(!RegisterClassEx(&wc1)) return 0;        // ウィンドウ クラス登録
/* ------------ InitInstance ----------------- */ 
                                                // ウィンドウ 作成
    hwnd =CreateWindow(
        szWinName,
        "Windows Skeleton",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hThisInst,
        NULL
    );
                                                // Window表示設定、更新・・表示
    ShowWindow(hwnd,nWinMode);
    UpdateWindow(hwnd);

/* ------------ メッセージループ ----------------- */ 
    while((bRet = GetMessage( &msg , NULL , 0 , 0 ))!=0){
        if(bRet ==-1) break;
        else{
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }
    return msg.wParam;
}

//  =======================================================================
//   Name     : LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message ,
//                                          WPARAM wParam ,LPARAM lParam)
//   Usage    : ウインドウ プロシージャ関数・・アプリケーション本体
//   Parameter:     hwnd        メッセージを受け取る ハンドル
//                    message        メッセージ
//                    wParam        副メッセージ
//                    lParam        副メッセージ 
//   Return   : 0
//  =======================================================================
LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message ,
                             WPARAM wParam ,LPARAM lParam)
{
    switch(message){
                                            // 終了処理
        case    WM_DESTROY:
            PostQuitMessage(0);
            break;
                                            // デフォルト・・OSが処理
        default:
            return DefWindowProc(hwnd , message , wParam , lParam);
    }
    return 0;
}

Aメイク・ファイル
      
#  make ファイル
#  Copyright (c) 2018/07/20 ,Kimio Nakamura

name = sample_201

${name}.exe : ${name}.obj
        ilink32 -L"C:\borland\bcc102\lib\win32c\release;
C:\borland\bcc102\lib\win32c\release\PSDK" -Gn -x ${name}.obj c0w32.obj , 
${name}.exe , , cw32.lib import32.lib , ,

${name}.obj : ${name}.c
        bcc32c -c -w ${name}.c
           


Bコンパイル結果(MAKE)




C実行結果




戻る