アークピットのホームページに戻る

WinAPIトピックのトップページに戻る

APIトピックの各章に移動する

ダウンロードのページに移動する
ダウンロードができ
ない場合の対処法
 

ページ移動

1-3-3. 全体のプログラム

 ApHellを構築するために必要な、ApHeelo.c、ApHello.h、そしてApHello.rcの3つのファイルの内容を下記に示します。とりあえず全体をざっと確認してください。後でコードについて詳細に検討します。またApHello.makファイルはEXEファイルの構築に使用しますが、これは別項を設けます。

ApHello.c


/**********************************************************************
 *     ApHello for WIN32(The Sample of Windows API Topics)  v1.00     *
 *                       メインプログラムの処理                       *
 *                                                                    *
 *         (C) Copyright 1999 Arcpit Inc.  ALL RIGHT RESERVED.        *
 **********************************************************************/

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

LRESULT CALLBACK ApHelloProc(HWND hWnd,UINT uMsg
                                      ,WPARAM wParam,LPARAM lParam);
static BOOL CALLBACK AboutProc(HWND hDlg,UINT uMsg
                                      ,WPARAM wParam,LPARAM lParam);

/**********************************************************************
 *                     アプリケーションの初期処理                     *
 **********************************************************************/

INT  APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                      LPTSTR lpCmdLine, INT nCmdShow)
{
    HWND       hWndMain;
    MSG        msg;
    WNDCLASSEX wc;
    static LPSTR pClassName = "ApHelloClass";
    static LPSTR pAppName = "ApHello";

    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = (WNDPROC)ApHelloProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(hInstance,pAppName);
    wc.hCursor       = LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = pAppName;
    wc.lpszClassName = pClassName;
    wc.hIconSm       = LoadImage(hInstance,pAppName,IMAGE_ICON
                                          ,16,16,LR_DEFAULTCOLOR);
    if (!RegisterClassEx(&wc)) return FALSE;
    hWndMain = CreateWindow(pClassName,NULL,WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT,CW_USEDEFAULT,
                            CW_USEDEFAULT,CW_USEDEFAULT,
                            NULL,NULL,hInstance,NULL);
    if (!hWndMain) return FALSE;
    SetWindowText(hWndMain,pAppName);
    ShowWindow(hWndMain,nCmdShow);
    UpdateWindow(hWndMain);
    while (GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
    UNREFERENCED_PARAMETER(hPrevInstance);
}

/**********************************************************************
 *                   メインウィンドウのプロシージャ                   *
 **********************************************************************/

LRESULT CALLBACK ApHelloProc(HWND hWnd,UINT uMsg
                                      ,WPARAM wParam,LPARAM lParam)
{
    static HFONT hFont;
    static UINT  idFormat = IDM_CENTER;
    static LPSTR pHello   = "Hello World.";

    switch (uMsg)
    {
        case WM_CREATE:         // メインウィンドウの新規作成
        {
            LOGFONT lf;
            HMENU   hMenu;

            ZeroMemory(&lf,sizeof(LOGFONT));
            lf.lfHeight = 32;
            lf.lfCharSet = ANSI_CHARSET;
            lstrcpy(lf.lfFaceName,"Arial");
            hFont = CreateFontIndirect(&lf);
            hMenu = GetMenu(hWnd);
            if (hMenu)
                hMenu = GetSubMenu(hMenu,1);
            if (hMenu)
                CheckMenuItem(hMenu,IDM_CENTER,MF_BYCOMMAND|MF_CHECKED);
            break;
        }
        case WM_DESTROY:
        {
            if (hFont) DeleteObject(hFont);
            PostQuitMessage(0);
            return 0;
        }
        case WM_PAINT:
        {
            HDC         hdc;
            PAINTSTRUCT ps;
            RECT        rc;
            UINT        w;

            hdc = BeginPaint(hWnd,&ps);
            if (hdc)
            {
                GetClientRect(hWnd,&rc);
                SetBkMode(hdc,TRANSPARENT);
                SetTextColor(hdc,RGB(0,0,255));
                SelectObject(hdc,hFont);
                switch (idFormat)
                {
                    case IDM_LEFT:   w = DT_LEFT;   break;
                    case IDM_CENTER: w = DT_CENTER; break;
                    case IDM_RIGHT:  w = DT_RIGHT;  break;
                }
                DrawText(hdc,pHello,strlen(pHello)
                            ,&rc,DT_SINGLELINE|DT_VCENTER|w);
            }
            EndPaint(hWnd,&ps);
            return 0;
        }
        case WM_COMMAND:
        {
            switch (LOWORD(wParam))
            {
                //
                // [ファイル(F)]のメニュー項目
                //
                case IDM_ABOUT:
                {
                    HINSTANCE hInst;

                    hInst = (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
                    DialogBox(hInst,"ABOUTDLG",hWnd,(DLGPROC)AboutProc);
                    break;
                }
                case IDM_EXIT:     // ApHelloの終了
                    PostMessage(hWnd,WM_CLOSE,0,0);
                    break;
                //
                // [表示(V)]のメニュー項目
                //
                case IDM_LEFT:     // 左側に表示
                case IDM_CENTER:   // 中央に表示
                case IDM_RIGHT:    // 右側に表示
                {
                    HMENU hMenu;
                    UINT  id;

                    id = LOWORD(wParam);
                    hMenu = GetMenu(hWnd);
                    if (hMenu) hMenu = GetSubMenu(hMenu,1);
                    if (hMenu)
                    {
                        CheckMenuItem(hMenu,idFormat
                                           ,MF_BYCOMMAND|MF_UNCHECKED);
                        CheckMenuItem(hMenu,id,MF_BYCOMMAND|MF_CHECKED);
                    }
                    idFormat = id;
                    InvalidateRect(hWnd,NULL,TRUE);
                    UpdateWindow(hWnd);
                    break;
                }
                default:
                    return DefWindowProc(hWnd,uMsg,wParam,lParam);
            }
            return 0;
        }
    }
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

// [About]ダイアログボックスのプロシージャ

static BOOL CALLBACK AboutProc(HWND hDlg,UINT uMsg
                                        ,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case IDOK:       // OK
                case IDCANCEL:   // キャンセル
                    EndDialog(hDlg,TRUE);
                    return TRUE;
            }
            break;
    }
    return FALSE;
}

ApHello.h


/**********************************************************************
 *     ApHello for WIN32(The Sample of Windows API Topics)  v1.00     *
 *                           リソースの定数                           *
 *                                                                    *
 *         (C) Copyright 1999 Arcpit Inc.  ALL RIGHT RESERVED.        *
 **********************************************************************/

#define IDM_ABOUT            100
#define IDM_EXIT             101
#define IDM_LEFT             200
#define IDM_CENTER           201
#define IDM_RIGHT            202

#define IDC_STATIC           -1

ApHello.rc


/**********************************************************************
 *     ApHello for WIN32(The Sample of Windows API Topics)  v1.00     *
 *                              リソース                              *
 *                                                                    *
 *         (C) Copyright 1999 Arcpit Inc.  ALL RIGHT RESERVED.        *
 **********************************************************************/

#include 
#include 
#include "ApHello.h"

/**********************************************************************
 *      アイコン・カーソル・メニュー・アクセラレータ類のリソース      *
 **********************************************************************/

ApHello  ICON    DISCARDABLE     "ApHello.ico"

ApHello  MENU DISCARDABLE 
BEGIN
    POPUP "ファイル(&F)"
    BEGIN
        MENUITEM "バージョン情報(&A)...",          IDM_ABOUT
        MENUITEM SEPARATOR
        MENUITEM "ApHelloの終了(&X)",           IDM_EXIT
    END
    POPUP "表示(&V)"
    BEGIN
        MENUITEM "左側へ表示(&L)",              IDM_LEFT
        MENUITEM "中央へ表示(&C)",              IDM_CENTER
        MENUITEM "右側へ表示(&R)",              IDM_RIGHT
    END
END

/**********************************************************************
 *                    ダイアログボックスのリソース                    *
 **********************************************************************/

ABOUTDLG DIALOG DISCARDABLE  0, 0, 191, 101
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION
CAPTION "ApHelloのバージョン情報"
FONT 9, "MS Pゴシック"
BEGIN
    CTEXT           "ApHello for Windows9x",IDC_STATIC,33,8,148,8
    CTEXT           "The Sample of Windows API Topics.",IDC_STATIC,
                    33,20,148,8
    CTEXT           "Version 1.00",IDC_STATIC,33,35,148,8
    CTEXT           "(C) Copyright 1999 Arcpit Inc. All Right Reserved.",
                    IDC_STATIC,33,54,148,8
    ICON            "ApHello",IDC_STATIC,8,13,18,21
    DEFPUSHBUTTON   "OK",IDOK,136,73,50,14
    LTEXT           "ホームページ: http://www.tsp.ne.jp/~arcpit/",IDC_STATIC,
                    6,72,118,8
    LTEXT           "Eメール:       arcpit@tsp.ne.jp",IDC_STATIC,6,84,79,8
END

/**********************************************************************
 *                    バージョンテーブルのリソース                    *
 **********************************************************************/

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "041103a4"
        BEGIN
            VALUE "Comments", "The Sample of Windows API Topics\0"
            VALUE "CompanyName", "Arcpit Inc.\0"
            VALUE "FileDescription", "ApHello for Windows9x\0"
            VALUE "FileVersion", "1, 0, 0, 1\0"
            VALUE "InternalName", "ApHello\0"
            VALUE "LegalCopyright",
                  "Copyright (C) 1999. Arcpit Inc. All Right Reserved.\0"
            VALUE "OriginalFilename", "ApHello.exe\0"
            VALUE "ProductName", "Sample Program\0"
            VALUE "ProductVersion", "1, 0, 0, 1\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x411, 932
    END
END

ページ移動