2章 Hello World

 まず、Windowsアプリケーションの最初の一歩となるプログラムを提示しましょう。

/*Windowsプログラミングの最初の一歩*/

#define     STRICT
#include    <windows.h>

/*ウインドウプロシージャのプロトタイプ宣言*/
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);

/*  アプリケーションエントリーポイント  */
int WINAPI WinMain(HINSTANCE    hInstance,
                   HINSTANCE    hPrevInstance,
                   LPSTR        CmdLine,
                   int          CmdShow)
{
    HWND            hwnd;   /*  メインウインドウのウインドウハンドル    */
    MSG             msg;    /*  メッセージキューから取得したメッセージ  */
    WNDCLASS        wc;     /*  ウインドウクラス登録用の構造体          */

    wc.style        =0;
    wc.lpfnWndProc  =WindowProc;
    wc.cbClsExtra   =0;
    wc.cbWndExtra   =0;
    wc.hInstance    =hInstance;
    wc.hIcon        =LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor      =LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName =NULL;
    wc.lpszClassName="Hello";
    
    if(RegisterClass(&wc;)==0)       /*  ウインドウクラス登録    */
        return  0;

    hwnd=CreateWindow(  "Hello",    /*  ウインドウ作成          */  
                        "Hello World",
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        NULL,
                        (HMENU)NULL,
                        hInstance,
                        0);
    if(hwnd==NULL)
        return  0;

    ShowWindow(hwnd,CmdShow);           /*  ウインドウの表示        */
    UpdateWindow(hwnd);                 /*  ウインドウの最初の更新  */

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

/*  ウインドウプロシージャ  */
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
    switch(message)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            return  0;
    }
    return  DefWindowProc(hwnd,message,wparam,lparam);
}


 筆者は、最小のWindowsアプリケーションがこの様な物だと知ったとき、呆然としました。何度か、習得を諦めようと思いました。まず、行数の多さ、見慣れない型名の羅列、二つの関数が従来の見慣れた方法で結びついていない、見慣れたmain()関数が無い。典型的なDOSのプログラムとの違いを挙げだせば切りがありません。これが、本当に最小のWindows95/98/NTアプリケーションなのかと疑いたくなりますね。いや、実は、このプログラムは、より簡単に理解できるように、Windows95からの新しい機能を使っていないのです。

 でも、心配しないでください。この講座で順を追って説明していきます。ただ、全てを理解してから先に進む方針を採ると、前に進めなくなります。ある程度、大まかに理解して、先に進む過程で、このプログラムの細かな意味が分かるようになります。

 では、とにかくこのプログラムを動かしてみましょう。まず、、VisualC++バージョン5を立ち上げます。そして、メニュー[ファイル]→[新規作成]を選びます。すると、新規作成のダイアログボックスが現れます。この中のプロジェクトタブを選び、WIN32Applicationを選びます。そして、プロジェクト名は半角文字でHelloにします。位置は、任意の場所に。そして、OKボタンを押します。次、メニュー[プロジェクト]→[プロジェクトへ追加]→[新規作成]を選びます。すると、先ほどと同じダイアログボックスが現れます。そこで、ファイルタブを選び、C++ソースファイルを選択し、ファイル名を半角文字でhello.cとします。そして、OKボタンを押します。そして、上のリスト2-1をコピーしVisualC++のhello.cへ貼り付けます。そして、メニュー[ビルド]→[実行]を選択します。すると、「このファイルは存在しません。ビルドしますか?」と尋ねてきます。そこで、「はい」を選びます。すると、コンパイルとリンクが終了し、生成されたアプリケーションは実行されます。

 どうでしたか?本当に素のアプリケーションですね。しかし、このアプリケーションには、Windowsアプリケーションの最低限の条件は満たしています。ウインドウの移動が出来、サイズの変更が出来、そして、閉じることが出来る。これが、最小のWindowsアプリケーションだということがご理解できましたか?

1999年1月6日


著作権者:近藤妥

  • 最終更新:2018-03-16 13:30:19

このWIKIを編集するにはパスワード入力が必要です

認証パスワード