/***************************************************** 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; } |