2025/3/30 作成
序文
かねがねC++についてのページを作りたいと思っていた。しかし、なかなか乗り気にならない。自分で考えてページを作ろうと思っても、説明が大変になり、作る時間も長くなるので踏み出せなかったのである。今回書くに至った経緯は、「インプットしながらアウトプットしよう」という考えになったからである。C++の説明に至る前に、なぜ自分がC++が好きなのかを考えることが大事だ。プログラミング言語の中では最も高速に動き、型を明確に指定するという部分に惹かれているのだろう。自分はJavaScriptも使うのだが、あれは動的型付き言語であり、数字も文字列もletを使うことになる。しかし、C++では数字をintやfloat、文字をcharやwchar_tで使うことになる。C++の奥深さにも自分が惹かれた理由だ。そこらへんを上手く説明出来たらと思う。
ちなみに、毎回書く時間はおそらく1時間ほどになるだろう。最初から1時間半使うと決まっていたら長く感じるからだ。パッと自分のやりたいことをできたら爽快ではないか。さあ、C++の世界に旅立とう。
最初のC++
Microsoft Visual Studio Communityのダウンロード方法については書かない。それを書いてもつまらないからである。それに調べればいくらでも出てくるだろう。現在あるのがVisual Studio 2022なので、それを使っていくことにする。
Visual Studio 2022を開いたら、[新しいプロジェクトの作成]→言語選択で[C++]→[Windows デスクトップ ウィザード]を選択しよう。プロジェクト名を適当に決め(No_1など)、保存場所に自分のわかりやすい場所を選び、[ソリューションとプロジェクトを同じディレクトリに配置する]にチェックを入れ、[作成]をクリックします。アプリケーションの種類を[デスクトップアプリケーション]にして、[空のプロジェクト]にチェックを入れ、[OK]を押したら、新しいプロジェクトが作成されます。
以上が自分のC++を使って遊ぶための定型となっています。普通の初心者はC++のコードを書いてコンソールに出力すると思われますが、自分はそれではつまらないと思っていて、図形を書いたりゲームを作ったりしたいのでウィンドウを利用するようにしています。
そろそろ1時間経つので、一気に書いていこう。右にあるソリューションエクスプローラーの「ソースファイル」を右クリックして、[追加]→[新しい項目の追加]で「main.cpp」というファイルを新しく作ります。そして、一気に次のコードを書きます。
#include <windows.h>
const int WIDTH = 800;
const int HEIGHT = 600;
const wchar_t TITLE[] = L"タイトル";
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI wWinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrev, _In_ PWSTR pCmd, _In_ int nCmd)
{
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInst;
wc.lpszClassName = L"Window Class";
RegisterClass(&wc);
RECT rc = { 0, 0, WIDTH, HEIGHT };
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
HWND hwnd = CreateWindowEx(0, wc.lpszClassName, TITLE,
WS_OVERLAPPEDWINDOW ^ WS_SIZEBOX ^ WS_MAXIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top,
NULL, NULL, hInst, NULL);
if (hwnd == NULL) return 0;
ShowWindow(hwnd, nCmd);
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProcW(hwnd, msg, wParam, lParam);
}
一見したら難しそうな内容ですが、実際にはウィンドウを表示しているだけです。ウィンドウの作成では、ウィンドウの見た目や大きさ、タイトルなどを指定できます。
まとめて見ると難しい内容を書いているかもしれませんが、一つ一つの行の意味を理解すれば、なぜこんなことをしているのかというのが理解できます。ちなみに、C++を全く知らない人でも理解できるようにC++の解説をしていくので、そこのところはよろしくお願いします。草々。