Created
December 30, 2025 12:50
-
-
Save bg1bgst333/2ded71265ce15a5f91ad56ce773249fb to your computer and use it in GitHub Desktop.
STN_CLICKED
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ヘッダファイルのインクルード | |
| // 既定のヘッダファイル | |
| #include <windows.h> // 標準WindowsAPI | |
| #include <tchar.h> // TCHAR型 | |
| #include <commctrl.h> // コモンコントロール | |
| // 独自のヘッダファイル | |
| #include "resource.h" // リソースID | |
| // 関数のプロトタイプ宣言 | |
| LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // ウィンドウメッセージに対して独自の処理をするように定義したコールバック関数WindowProc. | |
| // _tWinMain関数の定義 | |
| int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd){ | |
| // 変数・配列の宣言・初期化 | |
| HWND hWnd; // CreateWindowで作成したウィンドウのウィンドウハンドルを格納するHWND型変数hWnd. | |
| MSG msg; // ウィンドウメッセージ情報を格納するMSG構造体型変数msg. | |
| WNDCLASS wc; // ウィンドウクラス情報をもつWNDCLASS構造体型変数wc. | |
| // ウィンドウクラスの設定 | |
| wc.lpszClassName = _T("STN_CLICKED"); // ウィンドウクラス名は"STN_CLICKED". | |
| wc.style = CS_HREDRAW | CS_VREDRAW; // スタイルはCS_HREDRAW | CS_VREDRAW. | |
| wc.lpfnWndProc = WindowProc; // ウィンドウプロシージャは独自の処理を定義したWindowProc. | |
| wc.hInstance = hInstance; // インスタンスハンドルは_tWinMainの引数. | |
| wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // アイコンはアプリケーション既定のもの. | |
| wc.hCursor = LoadCursor(NULL, IDC_ARROW); // カーソルは矢印. | |
| wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景は白ブラシ. | |
| wc.lpszMenuName = NULL; // なし | |
| wc.cbClsExtra = 0; // 0でいい. | |
| wc.cbWndExtra = 0; | |
| // ウィンドウクラスの登録 | |
| if (!RegisterClass(&wc)) { // RegisterClassでウィンドウクラスを登録し, 0が返ったらエラー. | |
| // エラー処理 | |
| MessageBox(NULL, _T("RegisterClass Failure!"), _T("STN_CLICKED"), MB_OK | MB_ICONHAND); // MessageBoxで"RegisterClass Failure!"とエラーメッセージを表示. | |
| return -1; // 異常終了(1) | |
| } | |
| // ウィンドウの作成 | |
| hWnd = CreateWindow(_T("STN_CLICKED"), _T("STN_CLICKED"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); // CreateWindowで, 上で登録した"STN_CLICKED"ウィンドウクラスのウィンドウを作成. | |
| if (hWnd == NULL) { // ウィンドウの作成に失敗したとき. | |
| // エラー処理 | |
| MessageBox(NULL, _T("CreateWindow Failure!"), _T("STM_SETIMAGE"), MB_OK | MB_ICONHAND); // MessageBoxで"CreateWindow Failure!"とエラーメッセージを表示. | |
| return -2; // 異常終了(2) | |
| } | |
| // ウィンドウの表示 | |
| ShowWindow(hWnd, SW_SHOW); // ShowWindowでSW_SHOWを指定してウィンドウの表示. | |
| // メッセージループ | |
| while (GetMessage(&msg, NULL, 0, 0) > 0) { // GetMessageでメッセージを取得, 戻り値が0より大きい間はループし続ける. | |
| // ウィンドウメッセージ処理 | |
| TranslateMessage(&msg); // TranslateMessageで仮想キーメッセージを文字メッセージへ変換. | |
| DispatchMessage(&msg); // DispatchMessageで受け取ったメッセージをウィンドウプロシージャ(この場合は独自に定義したWindowProc)に送出. | |
| } | |
| // プログラムの終了 | |
| return (int)msg.wParam; // 終了コード(msg.wParam)を戻り値として返す. | |
| } | |
| // WindowProc関数の定義 | |
| LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { // ウィンドウメッセージに対して独自の処理をするように定義したウィンドウプロシージャ. | |
| // スタティック変数の宣言 | |
| static HWND hStatic; // スタティックコントロールハンドルhStatic. | |
| static HBITMAP hBitmap; // ロードしたビットマップハンドルhBitmap. | |
| // ウィンドウメッセージに対する処理. | |
| switch (uMsg) { // switch-casa文でuMsgの値ごとに処理を振り分ける. | |
| // ウィンドウの作成が開始された時. | |
| case WM_CREATE: // ウィンドウの作成が開始された時.(uMsgがWM_CREATEの時.) | |
| // WM_CREATEブロック | |
| { | |
| // 変数の宣言 | |
| LPCREATESTRUCT lpCS; // CreateStruct構造体のポインタlpCS. | |
| // アプリケーションインスタンスハンドルの取得. | |
| lpCS = (LPCREATESTRUCT)lParam; // lParamをLPCREATESTRUCTにキャストして, lpCSに格納. | |
| // スタティックコントロールの作成. | |
| hStatic = CreateWindow(WC_STATIC, _T(""), WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_NOTIFY, 50, 50, 120, 40, hwnd, (HMENU)IDC_STATIC1, lpCS->hInstance, NULL); // CreateWindowのWC_STATICでスタティックコントロールを作成. | |
| if (hStatic == NULL){ // hStaticがNULLなら. | |
| // エラー処理. | |
| return -1; // -1を返す. | |
| } | |
| // ビットマップ(リソース)のロード | |
| hBitmap = (HBITMAP)LoadBitmap(lpCS->hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); // LoadBitmapでビットマップリソースIDB_BITMAP1(bitmap1.bmp)をロードし, 戻り値のビットマップハンドルはhBitmapに格納する. | |
| if (hBitmap == NULL){ // hBitmapがNULLならロード失敗. | |
| // エラー処理. | |
| return -2; // -2を返す. | |
| } | |
| // スタティックコントロールにビットマップをセット. | |
| SendMessage(hStatic, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBitmap); // SendMessageのSTM_SETIMAGEでhStaticにhBitmapをセット. | |
| // ウィンドウ作成成功 | |
| return 0; // return文で0を返して, ウィンドウ作成成功とする. | |
| } | |
| // 既定の処理へ向かう. | |
| break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう. | |
| // ウィンドウが破棄された時. | |
| case WM_DESTROY: // ウィンドウが破棄された時.(uMsgがWM_DESTROYの時.) | |
| // WM_DESTROYブロック | |
| { | |
| // 終了メッセージの送信. | |
| PostQuitMessage(0); // PostQuitMessageで終了コードを0としてWM_QUITメッセージを送信.(するとメッセージループのGetMessageの戻り値が0になるので, メッセージループから抜ける.) | |
| } | |
| // 既定の処理へ向かう. | |
| break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう. | |
| // ウィンドウが閉じられた時. | |
| case WM_CLOSE: // ウィンドウが閉じられた時.(uMsgがWM_CLOSEの時.) | |
| // WM_CLOSEブロック | |
| { | |
| // ビットマップの破棄. | |
| if (hBitmap != NULL){ // hBitmapがNULLでない場合.(ロードしたままの状態の場合.) | |
| // ビットマップの破棄 | |
| DeleteObject(hBitmap); // DeleteObjectでhBitmapの破棄. | |
| hBitmap = NULL; // hBitmapはNULLにしておく. | |
| } | |
| // 子ウィンドウの終了処理. | |
| if (hStatic != NULL){ // NULLでない. | |
| DestroyWindow(hStatic); // DestroyWindowでhStaticを破棄. | |
| hStatic = NULL; // hStaticにNULLをセット. | |
| } | |
| } | |
| // 抜ける. | |
| break; // breakで抜ける. | |
| // コントロールに関する通知が来た時. | |
| case WM_COMMAND: // コントロールに関する通知が来た時.(uMsgがWM_COMMANDの時.) | |
| // WM_COMMANDブロック | |
| { | |
| // どのコントロールが操作されたかを判定する. | |
| switch (LOWORD(wParam)){ // LOWORD(wParam)で操作されたコントロール項目のIDが取得できるので, その値で判定する. | |
| // 取得したIDごとに処理を分岐. | |
| // IDC_STATIC1のイベント発生時. | |
| case IDC_STATIC1: | |
| // IDC_STATIC1ブロック. | |
| { | |
| // 通知コードごとに分岐. | |
| switch (HIWORD(wParam)){ | |
| // STN_CLICKEDの時. | |
| case STN_CLICKED: | |
| { | |
| // "IDC_STATIC1 STN_CLICKED"とデバッグ出力. | |
| OutputDebugString(_T("IDC_STATIC1 STN_CLICKED\n")); | |
| } | |
| // 既定の処理へ向かう. | |
| break; | |
| // 上記以外の時. | |
| default: | |
| // 既定の処理へ向かう. | |
| break; | |
| } | |
| } | |
| // 既定の処理へ向かう. | |
| break; | |
| // 上記以外の時. | |
| default: | |
| // 既定の処理へ向かう. | |
| break; | |
| } | |
| } | |
| // 既定の処理へ向かう. | |
| break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう. | |
| // 上記以外の時. | |
| default: // 上記以外の値の時の既定処理. | |
| // 既定の処理へ向かう. | |
| break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう. | |
| } | |
| // あとは既定の処理に任せる. | |
| return DefWindowProc(hwnd, uMsg, wParam, lParam); // 戻り値も含めDefWindowProcに既定の処理を任せる. | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment