/* ちょっとお試し Windows program sample 2 */ #include #include "resource.h" static HINSTANCE app_hinst; static LRESULT CALLBACK winMainProc(HWND hWnd, UINT msg, UINT wParam, LONG lParam); static LRESULT CALLBACK winMainAboutDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE dummy_hPrevInst, LPSTR dummy_lpCmdLine, int nCmdShow) { /* ここより始まる */ char *app_name = "WinProg. sample no.2."; /*プログラムの名前*/ WNDCLASS wndclass; HWND hWnd; MSG msg; app_hinst = hInst; /* 多重起動防止. */ CreateMutex(NULL, 1, app_name); if (GetLastError() == ERROR_ALREADY_EXISTS) return 0; /* ウィンドウクラスの登録 */ wndclass.lpszClassName = app_name; wndclass.hCursor = LoadCursor(NULL, IDI_APPLICATION); wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hInstance = hInst; wndclass.style = CS_BYTEALIGNCLIENT|CS_VREDRAW|CS_HREDRAW; wndclass.lpfnWndProc = (WNDPROC)winMainProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; if (RegisterClass(&wndclass) == 0) return 0; /* メインウィンドウの作成 */ hWnd = CreateWindowEx( 0 , app_name , app_name , WS_OVERLAPPEDWINDOW , CW_USEDEFAULT , CW_USEDEFAULT , 640 + GetSystemMetrics(SM_CXSIZEFRAME)*2 , 480 + GetSystemMetrics(SM_CYSIZEFRAME)*2+GetSystemMetrics(SM_CYMENU)+GetSystemMetrics(SM_CYCAPTION) , NULL , NULL , hInst , NULL ); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); /* メインループ */ while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } /* 終了 */ return 0; } static LRESULT CALLBACK winMainProc(HWND hWnd, UINT msg, UINT wParam, LONG lParam) { /* ウィンドウ・メッセージ処理 */ switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_ABOUT: DialogBox(app_hinst, "AboutDlg", hWnd, (DLGPROC)winMainAboutDlgProc); return 0; case IDM_EXIT: PostMessage(hWnd, WM_CLOSE, 0, 0); return 0; default: break; } break; default: break; } return DefWindowProc(hWnd, msg, wParam, lParam); } static LRESULT CALLBACK winMainAboutDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM dummy_lParam) { // Abortメッセージの表示 switch (uMsg) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if (wParam == IDOK) { EndDialog(hDlg, TRUE); return TRUE; } break; } return FALSE; }