サンプルプログラム2−1
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実行結果

|