/*****************************************************
HelloWindow
2002.Jun.29
K_Yaguchi
URL http://www5b.biglobe.ne.jp/~kouta_y/
mailto kouta_y@mve.biglobe.ne.jp
*****************************************************/
#include <windows.h> // DOSでは stdio.h だが、WINDOWSではこれが標準のインクルードファイル
#define ClassName "HelloWindowSample" // クラス名(テキトー)
char cnt = 'A'; // グローバル変数
/******************************
ウィンドウプロージャ
*******************************/
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
HDC hdc; // デバイスコンテキスト
PAINTSTRUCT ps; // ペイント構造体
// メッセージを受け取ったら分岐させて処理する
switch (msg) {
case WM_DESTROY: // ウィンドウが閉じられた時のメッセージ
PostQuitMessage(0); // スレッドの終了を要求する
break;
case WM_LBUTTONUP: // マウスの左ボタン
cnt++; // インクリメント
InvalidateRect(hWnd, NULL, TRUE); // ウィンドウの内容を消す(同時に再描画命令も呼ばれる)
break;
case WM_PAINT: // 再描画命令のメッセージ
hdc = BeginPaint(hWnd, &ps); // デバイスコンテキストを取得
SetBkMode(hdc, TRANSPARENT); // 文字の背景モード(透明にする)
TextOut(hdc, 150, 110, &cnt, 1); // 文字の描画
EndPaint(hWnd, &ps); // 描画終わり
break;
default:
return DefWindowProc(hWnd, msg, wp, lp); // 何もしない時は既定のコールバック関数へ(その戻り値を返す)
}
return 0; // 処理をした時は0を返す
}
/***************
メイン
****************/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, PSTR lpCmdLine, int nCmdShow) {
HWND hWnd; // ウィンドウハンドル
MSG msg; // メッセージ構造体
WNDCLASS wc; // ウィンドウクラス構造体
// ウィンドウクラス登録
wc.style = CS_HREDRAW | CS_VREDRAW; // ウィドウのスタイル(サイズ変更したら再描画する)
wc.lpfnWndProc = WndProc; // ウィンドウプロージャ
wc.cbClsExtra = 0; // 拡張クラスメモリ
wc.cbWndExtra = 0; // 拡張ウィンドウメモリ
wc.hInstance = hInstance; // インスタンスハンドル
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // ウィンドウのアイコン
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // マウスカーソルの形状
wc.hbrBackground = (HBRUSH)COLOR_WINDOW; // 背景色(デフォルトのウィンドウ色)
wc.lpszMenuName = NULL; // メニューリソースの名前
wc.lpszClassName = ClassName; // ウィンドウクラス名
if (!RegisterClass(&wc)) return 0; // 登録する
// 登録したらそのクラスでウィンドウを作成する
hWnd = CreateWindow(
ClassName, // ウィンドウクラス名
"ハローウィンドウ!", // ウィンドウのタイトル
WS_OVERLAPPEDWINDOW | WS_VISIBLE, // ウィンドウのスタイル
CW_USEDEFAULT, CW_USEDEFAULT, // ウィンドウの初期位置(ピクセル単位のXとY)
320, 240, // ウィンドウの初期サイズ(ピクセル単位の幅と高さ)
NULL, // 親ウィンドウ
NULL, // メニューバーのハンドル、もしくはIDを指定
hInstance, // インスタンスハンドル
NULL // WM_CREATE時に渡されるlParamの値
);
if (hWnd == NULL) return 0;
// ユーザーから送られるメッセージを
// ウィンドウプロージャへ渡す為のループ
while(1) {
if(GetMessage(&msg, NULL, 0, 0) == 0) // メッセージの取得(0はウィンドウが閉じられた事を示す)
break;
TranslateMessage(&msg); // 仮想キーメッセージを文字メッセージに変換
DispatchMessage (&msg); // ウィンドウプロージャへメッセージを送る(ここでウィンドウプロージャが呼ばれる)
}
// ウィンドウクラスの登録解除
// ここは明示的に呼び出さなくても良い
UnregisterClass(ClassName, hInstance);
return msg.wParam;
}
|