''[[FrontPage]]''
* ウィンドウの生成と表示 [#g80f30a7]
Windowsアプリケーションの基本。~
** 制約 [#t16660bc]
.NET関数・MFCを使用しないこと。~
#include <tchar.h>
#include <windows.h>
#include <commdlg.h>
#define PROC_NG -1
#define FUNC_NG_NEGATIVE -1
#define FUNC_NG 0
#define END_MSG 0
#define PROCESS_OK 0
#define RET_OK 0
#define RET_NG -1
typedef unsigned char u1b;
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp );// プロトタイプ宣言
u1b wndRootin ( HINSTANCE de_hInst, HWND* de_hWnd );
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd )
{
HWND hWnd; // ウィンドウハンドル
MSG msg; // メッセージ
u1b rtnCod = RET_OK; // リターンコード
//
for ( ; ; ) // 無限ループ
{ //
rtnCod = wndRootin( hInst, // ウィンドウ作成関数
&hWnd ); // IN: hInst OUT: hWnd
if( RET_OK != rtnCod ) // リターン判定
{ // OK以外の場合
break; // 処理終了
} //
//
ShowWindow( hWnd, SW_SHOW ); // ウィンドウを表示する
UpdateWindow( hWnd ); // ウィンドウ更新
//
for( ; ; ) // メッセージループ
{ // 終了メッセージがくるまで
BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // キューからメッセージを取得する OUT: msg
if( FUNC_NG == ret || END_MSG == ret ) // リターンコードの判定
{ // 取得エラーまたは終了メッセージ
break; // 処理終了
} //
else //
{ // その他
TranslateMessage( &msg ); // メッセージを処理する
DispatchMessage( &msg ); // OUT: msg
} //
} //
//
break; // ループを抜ける
} //
//
return ( rtnCod ); // リターンコードを返して終了
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp )// ウィンドウプロシージャ
{ //
switch( msg ) // メッセージを判定
{ //
case WM_DESTROY: // ウィンドウ破棄のとき
PostQuitMessage( END_MSG ); // 終了メッセージを送る
return PROCESS_OK; // 正常終了
} //
//
return DefWindowProc( hWnd, msg, wp, lp ); // 他のメッセージは、デフォルトの処理を行う
//
}
u1b wndRootin ( HINSTANCE de_hInst, HWND* de_hWnd )
{ //
WNDCLASSEX wc; // ウィンドウクラス構造体
u1b rtnCod = RET_OK; // リターンコード
//
for ( ; ; ) // 無限ループ
{ //
wc.cbSize = sizeof( wc ); // ウィンドウクラスの設定 サイズ
wc.style = CS_HREDRAW | CS_VREDRAW; // スタイル
wc.lpfnWndProc = WndProc; // ウィンドウプロシージャ
wc.cbClsExtra = 0; // 拡張情報1
wc.cbWndExtra = 0; // 拡張情報2
wc.hInstance = de_hInst; // インスタンスハンドル
wc.hIcon = ( HICON )LoadImage( // アイコン
NULL, MAKEINTRESOURCE( IDI_APPLICATION ), IMAGE_ICON, //
0, 0, LR_DEFAULTSIZE | LR_SHARED ); //
//
wc.hIconSm = wc.hIcon; // 子アイコン
wc.hCursor = (HCURSOR)LoadImage( // マウスカーソル
NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, //
0, 0, LR_DEFAULTSIZE | LR_SHARED ); //
//
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景
wc.lpszMenuName = NULL; // メニュー名
wc.lpszClassName = _T("Menu"); // ウィンドウクラス名
//
if( FUNC_NG == RegisterClassEx( &wc ) ) // ウィンドウクラスを登録する
{ //
MessageBox(NULL, "ウィンドウクラスの登録失敗", "StyleMod", MB_OK);// 画面表示
rtnCod = RET_NG; // 手続き失敗処理
break; // 処理終了
} //
//
*de_hWnd = CreateWindow( // ウィンドウを作成する
wc.lpszClassName, // ウィンドウクラス名
_T("StyleMod"), // タイトルバーに表示する文字列
WS_OVERLAPPEDWINDOW, // ウィンドウの種類
CW_USEDEFAULT, // ウィンドウを表示する位置(X座標)
CW_USEDEFAULT, // ウィンドウを表示する位置(Y座標)
CW_USEDEFAULT, // ウィンドウの幅
CW_USEDEFAULT, // ウィンドウの高さ
NULL, // 親ウィンドウのウィンドウハンドル
NULL, // メニューハンドル
de_hInst, // インスタンスハンドル
NULL ); // その他の作成データ
//
if( NULL == *de_hWnd ) // ウインドウが作成できたか
{ // 作成に失敗
MessageBox(NULL, "ウィンドウの作成失敗", "StyleMod", MB_OK); // 画面表示
rtnCod = RET_NG; // 手続き失敗処理
break; // 処理終了
} //
//
break; // ループを抜ける
} //
//
return ( rtnCod ); // リターンコードを返して終了
}
*** 参考ページ [#zdc1ccd2]
http://www.geocities.jp/ky_webid/win32c/index.html~
http://lets-go.hp.infoseek.co.jp/c_setting08.html~