BCC32Cを使ってみた

サンプルプログラム2−1

Windows プログラム

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

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

@ソースプログラム

// -------------------------------------------------
// sample_201.c
//        Windowsプログラミング ・・・スケルトン
//                    
//               2022/03/20 Kimio Nakamura
// -------------------------------------------------

#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>

static const char s_szName[] = "Skelton";    // ウインドウクラスの名前
static HINSTANCE s_hInst = NULL;            // インスタンスのハンドルの格納場所
static HWND s_hMainWnd = NULL;           // メインウインドウのハンドルの格納場所

// =========================================================================
//   Name     : BOOL OnCreate(HWND  , LPCREATESTRUCT )
//   Usage    : WM CREATEメッセージのプロシージャ
//   Parameter: 
//   Return   : 
// =========================================================================
BOOL OnCreate(HWND hwnd , LPCREATESTRUCT lpCreateStruct)
{
    return TRUE;
}

// =========================================================================
//   Name     : void OnDestroy( HWND  )
//   Usage    : WM_DESTROYメッセージのプロシージャ
//                メッセージループ終了(アプリの終了)
//   Parameter: 
//   Return   : 
// =========================================================================
void OnDestroy( HWND hwnd )
{
    PostQuitMessage(0);

}

// =========================================================================
//   Name     : LRESULT_CALLBACK WindowProc( HWND , UINT , WPARAM  ,LPARAM )
//   Usage    : ウィンドウ・プロシージャ 関数
//   Parameter: 
//   Return   : 
// =========================================================================

LRESULT CALLBACK WindowProc( HWND hwnd , UINT uMsg , 
                                            WPARAM wParam ,LPARAM lParam)
{
                    // メッセージごとのウィンドウプロシージャを呼び出す
    switch(uMsg){

        HANDLE_MSG( hwnd , WM_CREATE , OnCreate);
        HANDLE_MSG( hwnd , WM_DESTROY , OnDestroy);
    
        default:                    // デフォルト、OSが処理

            return DefWindowProc(hwnd , uMsg , wParam , lParam);

    }
    return 0;
}
     
// =========================================================================
//   Name     : int WINAPI WinMain( HINSTANCE , HINSTANCE , LPSTR , INT )
//   Usage    : WinMain 関数
//   Parameter: 
//   Return   : 
// =========================================================================
    
int WINAPI WinMain( HINSTANCE hInstance , 
                       HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
    s_hInst = hInstance;
    
    InitCommonControls();         // コモンコントロールウィンドウの登録、初期化

// -------------- InitApplication ---------------

    WNDCLASS wc;                    // Windows クラスの宣言
    
    memset( &wc , '\0', sizeof(wc) );
    
    wc.style =0;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance =hInstance;
    wc.hIcon = LoadIcon( NULL , IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL , IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);

    wc.lpszMenuName = NULL;
    wc.lpszClassName = s_szName;
                                  // ウィンドウクラスの登録(RegisterClass関数)

    if(!RegisterClass(&wc)){
        MessageBox(NULL, "RegisterClass failed", NULL , MB_ICONERROR);
        return -1;
        
    }
// -------------- InitInstance ---------------

                                        // ウィンドウの作成(CreateWindow関数)
                                                            
    s_hMainWnd = CreateWindow( s_szName , s_szName , WS_OVERLAPPEDWINDOW , 
                       W_USEDEFAULT , CW_USEDEFAULT ,CW_USEDEFAULT ,CW_USEDEFAULT ,
                        NULL , NULL ,hInstance , NULL);
    if(!s_hMainWnd){
        MessageBox(NULL, "CreateWindow failed", NULL , MB_ICONERROR);
        return -1;
        
    }
                                                            
    ShowWindow( s_hMainWnd , nCmdShow);   // ウィンドウの表示状態を設定(ShowWindow関数)
    UpdateWindow( s_hMainWnd );           // ウィンドウの更新(UpdateWindow関数)
                                                            
// -------------- メッセージループ ---------------

    MSG msg;
        while(GetMessage(&msg , NULL, 0 , 0)){ // メッセージの取得(GetMessage関数)
            TranslateMessage( &msg );          // 文字メッセージに変換
            DispatchMessage( &msg );            // ウィンドウプロシージャに送付
        }
    return 0;
}

Aコンパイル結果



B実行結果




次へ 戻る