サンプル
//==============================================================================
// デフォルト・プロシージャで試そう
//==============================================================================
#include <tchar.h>
#include <Windows.h>
//------------------------------------------------
// break付きのキーワード
//------------------------------------------------
#define CASE break;case
#define DEFAULT break;default
//------------------------------------------------
// このファイルで使用する関数
//------------------------------------------------
#define apiLoadImage(h,id,type,cast) ((cast)LoadImage(h,MAKEINTRESOURCE(id),type,0,0,(LR_DEFAULTSIZE | LR_SHARED)))
#define apiLoadIcon(h,id) apiLoadImage(h,id,IMAGE_ICON,HICON)
#define apiLoadCursor(h,id) apiLoadImage(h,id,IMAGE_CURSOR,HCURSOR)
//------------------------------------------------
// ウインドウ・クラスの登録
//------------------------------------------------
static ATOM funcWindowClass( HINSTANCE hInstance, LPCTSTR lpClassName )
{
WNDCLASSEX wcex = { 0 };
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = (CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS);
wcex.lpfnWndProc = DefWindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = apiLoadIcon( NULL, IDI_APPLICATION );
wcex.hIconSm = apiLoadIcon( NULL, IDI_APPLICATION );
wcex.hCursor = apiLoadCursor( NULL, IDC_ARROW );
wcex.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
wcex.lpszMenuName = NULL;
wcex.lpszClassName = lpClassName;
return RegisterClassEx( &wcex );
}
//------------------------------------------------
// ウインドウの作成
//------------------------------------------------
static HWND funcCreateWindow( HINSTANCE hInstance, LPCTSTR lpClassName, LPCTSTR lpTitleName, int nCmdShow )
{
HWND hWnd = CreateWindowEx(
0, // 拡張ウインドウ・スタイル
lpClassName, // クラス名
lpTitleName, // タイトル名
WS_OVERLAPPEDWINDOW, // ウインドウ・スタイル
CW_USEDEFAULT, // 横座標
CW_USEDEFAULT, // 縦座標
CW_USEDEFAULT, // 横幅
CW_USEDEFAULT, // 高さ
NULL, // 親ウインドウのハンドル
NULL, // メニューのハンドル
hInstance, // インスタンスのハンドル
NULL ); // ウインドウ作成のデータ
if ( hWnd != NULL ){
ShowWindow( hWnd, nCmdShow );
UpdateWindow( hWnd );
}
return hWnd;
}
//------------------------------------------------
// メイン関数
//------------------------------------------------
extern int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow )
{
LPCTSTR lpClassName = TEXT("DefWindowProcWndClass");
LPCTSTR lpTitleName = TEXT("第1話 デフォルト・プロシージャ関数");
MSG Msg;
if ( funcWindowClass(hInstance,lpClassName) == 0 ){
return -1;
}
if ( funcCreateWindow(hInstance,lpClassName,lpTitleName,nCmdShow) == NULL ){
return -2;
}
while ( GetMessage(&Msg,NULL,0,0) > 0 ){
TranslateMessage( &Msg );
DispatchMessage( &Msg );
}
UNREFERENCED_PARAMETER( hPrevInstance );
UNREFERENCED_PARAMETER( lpCmdLine );
return Msg.wParam;
}
/*
終了してもメモリに残るバグあり。
*/
解説
実行結果
●DefWinProc
※コメント投稿者のブログIDはブログ作成者のみに通知されます