基本的なWindowsプログラミングから復習してみる。
Windowsプログラミングが十分理解できている人はこの課題を飛ばしてよい。
次のスケルトンプログラムをコピーしてWindowsプログラムを完成せよ。
ヒント
VC++の新規作成でWin32 Appricationを選び、プロジェクトの追加の新規作成のC++ ソースファイルでファイルを作成する。
C++ ソースファイルにスケルトンプログラムをコピーしビルドする。
詳しくは座学編を参考にせよ。
//============================================================================= // Windowsプログラミング スケルトンプログラム //============================================================================= #include <windows.h> // プロトタイプ宣言 LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM); BOOL InitApp(HINSTANCE, int); // グローバル変数 HWND hWnd; char szWinName[] = "Skeleton"; int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode) { MSG msg; /* 表示するウィンドウの定義、登録、表示 */ if (!InitApp(hThisInst, nWinMode)) return (FALSE); /* メッセージループ */ while (GetMessage(&msg, NULL, 0, 0)) // Windowsは「WM_QUIT」メッセージを受けると偽(0)を戻す { TranslateMessage(&msg); // キーボード利用を可能にする DispatchMessage(&msg); // 制御をWindowsに戻す } return msg.wParam; } //============================================================================= // ウィンドウプロシジャ関数(WindowProcedure) //============================================================================= LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: // 閉じるボタンをクリックした時 PostQuitMessage(0); // WM_QUITメッセージを発行 break; default: // 上記以外のメッセージはWindowsへ処理を任せる return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } //============================================================================= // 関数名 :InitApp // 機能概要:表示するウィンドウの定義、登録、表示 // 戻り値 :正常終了のとき1、以上終了のとき0 //============================================================================= BOOL InitApp(HINSTANCE hThisInst, int nWinMode) { WNDCLASSEX wc; /* ウィンドウクラスを定義する */ wc.hInstance = hThisInst; // このインスタンスへのハンドル wc.lpszClassName = szWinName; // ウィンドウクラス名 wc.lpfnWndProc = WinProc; // ウィンドウ関数 wc.style = 0; // ウィンドウスタイル(デフォルト) wc.cbSize = sizeof(WNDCLASSEX); // WNDCLASSEX構造体のサイズを設定 wc.hIcon = LoadIcon(hThisInst, IDI_APPLICATION); // ラージアイコン wc.hIconSm = LoadIcon(hThisInst, IDI_WINLOGO); // スモールアイコン wc.hCursor = LoadCursor(NULL, IDC_ARROW); // カーソルスタイル wc.lpszMenuName = NULL; // メニュー(なしに設定) wc.cbClsExtra = 0; // エキストラ(なしに設定) wc.cbWndExtra = 0; // 必要な情報(なしに設定) wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // ウィンドウの背景(黒に設定) /* ウィンドウクラスを登録する */ if (!RegisterClassEx(&wc)) return (FALSE); /* ウィンドウクラスの登録ができたので、ウィンドウを生成する */ hWnd = CreateWindow( szWinName, // ウィンドウクラスの名前 "Skeleton 背景を黒に", // ウィンドウタイトル WS_OVERLAPPEDWINDOW, // ウィンドウスタイル CW_USEDEFAULT, // ウィンドウの左角X座標(Windowsに任せる) CW_USEDEFAULT, // ウィンドウの左角Y座標(Windowsに任せる) CW_USEDEFAULT, // ウィンドウの幅(Windowsに任せる) CW_USEDEFAULT, // ウィンドウの高さ(Windowsに任せる) HWND_DESKTOP, // 親ウィンドウ(なし) NULL, // メニュー(なし) hThisInst, // このプログラムのインスタンスのハンドル NULL // 追加引数(なし) ); ShowWindow(hWnd, nWinMode); // ウィンドウを表示する UpdateWindow(hWnd); return (TRUE); }
背景色をグレイにして800*600のサイズにし、画面中央に表示する。
スモールアイコン、ラージアイコンを設定する
Windowの座標(100,100)から 名古屋工学院専門学校 と表示する。
マウスをクリックすると(100,100)から 名古屋工学院専門学校 と表示する。
クリックしたマウスの位置からから 名古屋工学院専門学校 と表示する。
※マウス座標は x=LOWORD(lParam); y=HIWORD(lParam); で求められる
カーソル移動キーにより 名古屋工学院専門学校 の表示を移動させる。
50ミリ秒ごとに 名古屋工学院専門学校 の表示を下に10ピクセルづつ移動させる。
画面からはみ出たら再び上から表示させる。