<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 松本義弘
------------------------------------------------------------------------------------------------