Permalink
Browse files

・ウィンドウクラス化

・アプリケーションクラス化
  • Loading branch information...
1 parent 43b249f commit 30bb06f799a4b2b7f6c6ad4295c6b3fb6d4d1282 @bg1bgst333 committed Jan 11, 2017
Showing with 311 additions and 90 deletions.
  1. BIN Aoi/Aoi.rc
  2. +4 −0 Aoi/Aoi.vcxproj
  3. +84 −0 Aoi/Application.cpp
  4. +31 −0 Aoi/Application.h
  5. +14 −90 Aoi/WinMain.cpp
  6. +142 −0 Aoi/Window.cpp
  7. +36 −0 Aoi/Window.h
  8. BIN Debug/Aoi.exe
  9. BIN Release/Aoi.exe
View
Binary file not shown.
View
@@ -146,10 +146,14 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
+ <ClCompile Include="Application.cpp" />
+ <ClCompile Include="Window.cpp" />
<ClCompile Include="WinMain.cpp" />
</ItemGroup>
<ItemGroup>
+ <ClInclude Include="Application.h" />
<ClInclude Include="resource.h" />
+ <ClInclude Include="Window.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Aoi.rc" />
View
@@ -0,0 +1,84 @@
+// 二重インクルード防止
+#pragma once // #pragma onceで二重インクルード防止.
+
+// ヘッダのインクルード
+// 独自のヘッダ
+#include "Application.h" // アプリケーションクラス
+
+// コンストラクタCApplication()
+CApplication::CApplication(){
+
+ // メンバ変数の初期化
+ m_pMainWindow = NULL; // m_pMainWindowをNULLに初期化.
+
+}
+
+// デストラクタ~CApplication()
+CApplication::~CApplication(){
+
+ // メンバ変数の終了処理
+ if (m_pMainWindow != NULL) { // m_pMainWindowがNULLでなければ.
+ delete m_pMainWindow; // deleteでm_pMainWindowを解放.
+ m_pMainWindow = NULL; // m_pMainWindowにNULLを代入.
+ }
+
+}
+
+// アプリケーション初期化関数InitInstance
+BOOL CApplication::InitInstance(HINSTANCE hInstance, LPTSTR lpCmdLine, int nShowCmd){
+
+ // ウィンドウクラスの登録
+ CWindow::RegisterClass(hInstance, _T("Window")); // CWindow::RegisterClassでウィンドウクラス"Window"を登録.
+
+ // ウィンドウオブジェクトの生成
+ m_pMainWindow = new CWindow(); // CWindowオブジェクトを作成し, アドレスをm_pMainWindowに格納.
+
+ // ウィンドウ作成
+ if (!m_pMainWindow->Create(_T("Window"), _T("Aoi"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance)) { // m_pMainWindow->Createでの作成が失敗なら.
+ return FALSE; // FALSEを返す.
+ }
+
+ // ウィンドウ表示
+ m_pMainWindow->ShowWindow(SW_SHOW); // m_pMainWindow->ShowWindowで表示.
+
+ // 成功なのでTRUEを返す.
+ return TRUE; // TRUEを返す.
+
+}
+
+// メッセージループ関数Run
+int CApplication::Run(){
+
+ // 変数の宣言
+ MSG msg; // メッセージ情報msg
+
+ // メッセージ取得
+ while (GetMessage(&msg, NULL, 0, 0) > 0) { // GetMessageでメッセージ取得.
+
+ // ウィンドウメッセージの送出
+ DispatchMessage(&msg); // DispatchMessageでウィンドウプロシージャに送出.
+ TranslateMessage(&msg); // TranslateMessageで仮想キーメッセージを文字へ変換.
+
+ }
+
+ // 終了処理
+ return ExitInstance(); // ExitInstanceの値を返す.
+
+}
+
+// アプリケーション終了処理関数ExitInstance
+int CApplication::ExitInstance(){
+
+ // メインウィンドウオブジェクトがあれば解放.
+ if (m_pMainWindow != NULL) { // m_pMainWindowがNULLじゃなければ.
+
+ // 解放.
+ delete m_pMainWindow; // deleteでm_pMainWindowを解放.
+ m_pMainWindow = NULL; // NULLをセット.
+
+ }
+
+ // 0を返す.
+ return 0;
+
+}
View
@@ -0,0 +1,31 @@
+// 二重インクルード防止
+#pragma once // #pragma onceで二重インクルード防止.
+
+// ヘッダのインクルード
+// 既定のヘッダ
+#include <windows.h> // 標準WindowsAPI
+#include <tchar.h> // TCHAR型
+// 独自のヘッダ
+#include "Window.h" // ウィンドウクラス
+
+// アプリケーションクラスCApplication
+class CApplication {
+
+ // publicメンバ
+ public:
+
+ // publicメンバ変数
+ // メンバ変数
+ CWindow *m_pMainWindow; // CWindow *型ウィンドウオブジェクトポインタm_pMainWindow.
+
+ // publicメンバ関数
+ // コンストラクタ・デストラクタ
+ CApplication(); // コンストラクタCApplication()
+ ~CApplication(); // デストラクタ~CApplication()
+
+ // メンバ関数
+ virtual BOOL InitInstance(HINSTANCE hInstance, LPTSTR lpCmdLine, int nShowCmd); // アプリケーション初期化関数InitInstance
+ virtual int Run(); // メッセージループ関数Run
+ virtual int ExitInstance(); // アプリケーション終了処理関数ExitInstance
+
+};
View
@@ -2,109 +2,33 @@
// 既定のヘッダ
#include <windows.h> // 標準WindowsAPI
#include <tchar.h> // TCHAR型
-
-// 関数のプロトタイプ宣言
-LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // 独自のウィンドウプロシージャWindowProc.
+// ヘッダのインクルード
+// 独自のヘッダ
+#include "Application.h" // アプリケーションクラス
// _tWinMain関数
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) {
// 変数の宣言
- HWND hWnd; // HWND型ウィンドウハンドルhWnd
- MSG msg; // MSG型ウィンドウメッセージ構造体msg
- WNDCLASS wc; // WNDCLASS型ウィンドウクラス構造体wc
+ CApplication *pApp; // CApplicationオブジェクトポインタpApp
- // ウィンドウクラスの設定
- wc.lpszClassName = _T("Aoi_MainWindow"); // 独自に定義したウィンドウクラス"Aoi_MainWindow".
- wc.style = CS_HREDRAW | CS_VREDRAW; // とりあえずCS_HREDRAW | CS_VREDRAW.
- wc.lpfnWndProc = WindowProc; // 独自に定義したウィンドウプロシージャWindowProc.
- wc.hInstance = hInstance; // WinMainの引数のインスタンスハンドルhInstanceを指定.
- wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION); // アプリケーション既定アイコンIDI_APPLICATION.
- wc.hCursor = LoadCursor(hInstance, IDC_ARROW); // システム既定の矢印カーソルIDC_ARROW.
- wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景は白(WHITE_BRUSH).
- wc.lpszMenuName = NULL; // とりあえずNULL.
- wc.cbClsExtra = 0; // とりあえず0でいい.
- wc.cbWndExtra = 0; // とりあえず0でいい.
-
- // ウィンドウクラスの登録
- if (!RegisterClass(&wc)) { // RegisterClassにwcをセットして登録.
+ // CApplicationオブジェクトの初期化
+ pApp = new CApplication(); // CApplicationオブジェクトを作成し, pAppにアドレスを格納.
+ if (!pApp->InitInstance(hInstance, lpCmdLine, nShowCmd)){ // pApp->InitInstanceで初期化処理が失敗なら.
// エラー処理
- MessageBox(NULL, _T("ウィンドウクラスの登録に失敗しました."), _T("Aoi"), MB_OK | MB_ICONHAND); // MessageBoxで"ウィンドウクラスの登録に失敗しました!"と表示.
+ MessageBox(NULL, _T("アプリケーションの初期化に失敗しました."), _T("Aoi"), MB_OK | MB_ICONHAND); // MessageBoxで"アプリケーションの初期化に失敗しました."と表示.
+ pApp->ExitInstance(); // pApp->ExitInstanceで終了処理.
+ delete pApp; // deleteでpAppを解放.
return -1; // 異常終了(-1)を返す.
}
- // ウィンドウクラスの作成
- hWnd = CreateWindow(wc.lpszClassName, _T("Aoi"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); // CreateWindowで"Aoi_MainWindow"ウィンドウクラスのウィンドウ"Aoi"を作成.
- if (hWnd == NULL) {
-
- // エラー処理
- MessageBox(NULL, _T("ウィンドウの作成に失敗しました!"), _T("Aoi"), MB_OK | MB_ICONHAND); // MessageBoxで"ウィンドウの作成に失敗しました!"と表示.
- return -2; // 異常終了(-2)を返す.
-
- }
-
- // ウィンドウの表示
- ShowWindow(hWnd, SW_SHOW); // ShowWindowでhWndを表示.
-
- // メッセージループ
- while (GetMessage(&msg, NULL, 0, 0) > 0) { // GetMessageでメッセージ取得.
-
- // ウィンドウメッセージの送出
- DispatchMessage(&msg); // DispatchMessageでウィンドウプロシージャに送出.
- TranslateMessage(&msg); // TranslateMessageで仮想キーメッセージを文字へ変換.
-
- }
+ // メッセージループ処理
+ pApp->Run();
// プログラムの終了
- return (int)msg.wParam; // 終了コードとしてmsg.wParamを返す.
-
-}
-
-// ウィンドウプロシージャWindowProc関数
-LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
-
- // ウィンドウメッセージ処理
- switch (uMsg) {
-
- // ウィンドウの作成が開始された時.
- case WM_CREATE:
-
- // WM_CREATEブロック
- {
-
- // ウィンドウ作成成功
- return 0; // 成功なら0を返す.
-
- }
-
- // 既定の処理へ向かう.
- break; // 抜けてDefWindowProcに向かう.
-
- // ウィンドウが破棄された時.
- case WM_DESTROY:
-
- // WM_DESTROYブロック
- {
-
- // メッセージループ終了.
- PostQuitMessage(0); // PostQuitMessageでメッセージループを抜けさせる.
-
- }
-
- // 既定の処理へ向かう.
- break; // 抜けてDefWindowProcに向かう.
-
- // それ以外の時.
- default:
-
- // 既定の処理へ向かう.
- break; // 抜けてDefWindowProcに向かう.
-
- }
-
- // 既定の処理
- return DefWindowProc(hwnd, uMsg, wParam, lParam); // DefWindowProcに任せる.
+ delete pApp; // deleteでpAppを解放.
+ return 0; // 正常終了(0)を返す.
}
Oops, something went wrong.

0 comments on commit 30bb06f

Please sign in to comment.