<Previous>   <Next>   <SDK Top>   <Top>


1章.10節.アプリケーションの設計

 前回まででWindowsとアプリケーションとの基本的な関係を述べていきました.

 次に,実際にアプリケーションを作っていきたいと思います.

 

 アプリケーションを作るためには,何をすればいいのか?どんな部品が必要になのか?調べることがたくさんあります.

 で,その調べたいことが調べても見つからない・わからない,わかってもちゃんと動いてくれない

 ということが多々あり,プログラム作りが嫌になることがめちゃくちゃあります.

 

SDKプログラミングは神経質になると,わからないことが多すぎて絶対断念してしまいます.

 しかし,がんばってアプリケーションを作り上げたときはうれしいものです.神経質にならず気楽にがんばりましょう!!

それでは,1章2節でやったように「標準的な"Hello World!"アプリケーション」を下のプログラムのように変更してみましょう!!

変更点は..

 

1.WndProc内のWM_COMMAND,WM_PAINTの処理及び変数の削除

2.About関数

です.変更したら下のようになります.そして,実行してみます.

 

#include "stdafx.h"

#include "resource.h"

 

#define MAX_LOADSTRING 100

 

// グローバル変数:

HINSTANCE hInst;                                        // 現在のインスタンス

TCHAR szTitle[MAX_LOADSTRING];                          // タイトル バー テキスト

TCHAR szWindowClass[MAX_LOADSTRING];                    // タイトル バー テキスト

 

// このコード モジュールに含まれる関数の前宣言:

ATOM                    MyRegisterClass( HINSTANCE hInstance );

BOOL                    InitInstance( HINSTANCE, int );

LRESULT CALLBACK        WndProc( HWND, UINT, WPARAM, LPARAM );

 

int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow )

{

        // TODO: この位置にコードを記述してください。

        MSG msg;

        HACCEL hAccelTable;

 

        // グローバル ストリングを初期化します

        LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

        LoadString(hInstance, IDC_SAMPLE, szWindowClass, MAX_LOADSTRING);

        MyRegisterClass( hInstance );

 

        // アプリケーションの初期化を行います:

        if( !InitInstance( hInstance, nCmdShow ) )

        {

                return FALSE;

        }

 

        hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_SAMPLE);

 

        // メイン メッセージ ループ:

        while( GetMessage(&msg, NULL, 0, 0) )

        {

                if( !TranslateAccelerator (msg.hwnd, hAccelTable, &msg) )

                {

                        TranslateMessage( &msg );

                        DispatchMessage( &msg );

                }

        }

 

        return msg.wParam;

}

 

ATOM MyRegisterClass( HINSTANCE hInstance )

{

        WNDCLASSEX wcex;

 

        wcex.cbSize = sizeof(WNDCLASSEX);

 

        wcex.style              = CS_HREDRAW | CS_VREDRAW;

        wcex.lpfnWndProc        = (WNDPROC)WndProc;

        wcex.cbClsExtra         = 0;

        wcex.cbWndExtra         = 0;

        wcex.hInstance          = hInstance;

        wcex.hIcon              = LoadIcon(hInstance, (LPCTSTR)IDI_SAMPLE);

        wcex.hCursor            = LoadCursor(NULL, IDC_ARROW);

        wcex.hbrBackground      = (HBRUSH)(COLOR_WINDOW+1);

        wcex.lpszMenuName       = (LPCSTR)IDC_SAMPLE;

        wcex.lpszClassName      = szWindowClass;

        wcex.hIconSm            = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

 

        return RegisterClassEx( &wcex );

}

 

BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )

{

HWND hWnd;

 

hInst = hInstance; // グローバル変数にインスタンス ハンドルを保存します

 

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

 

if( !hWnd )

{

return FALSE;

}

 

ShowWindow( hWnd, nCmdShow );

UpdateWindow( hWnd );

 

return TRUE;

}

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

        switch( message )

        {

                case WM_DESTROY:

                        PostQuitMessage( 0 );

                        break;

                default:

                        return DefWindowProc( hWnd, message, wParam, lParam );

   }

   return 0;

}

実行すると,下のようなウィンドウが出てきます.

はじめと違って,"Hello World!!"という文字がないですね.
さらに,メニューバーの[ファイル]-[アプリケーションの終了]や,[ヘルプ]-[バージョン情報]をクリックしても何も起こりません.

なぜなら,それらの動作を行うWM_COMMAND,WM_PAINTの処理をとっぱらっちゃったからです!!

 

今はとにかく詳しいこと抜きで解説しています.

もう一度いいますと,SDKプログラミングは神経質になると,わからないことが多すぎて絶対断念してしまいます.

とにかく,気楽にいきましょう.

そして,上記のプログラムコードを原点として,いろいろ作っていきましょう!!

 

            

 

------------------------------------------------------------------------------------------------

注)当ページの一部または全部を転載、複写、複製することを禁じます。
Update 04/02/12 By 松本義弘

------------------------------------------------------------------------------------------------

デル4_120x60富士通ショッピングサイト WEB MART   NEC得選街   sotecロゴ88x31b   バナー 10000035