Win32/64アプリ開発 002 基礎の理解

提供:yonewiki
2023年10月17日 (火) 18:13時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「== '''概要''' ==  前回、示したコードを少しづつ理解してみましょう。全部を理解しようと思わない方がよいです。Win32/64コード。未来永劫、少しでも多くを知ろうというスタンスで良いと思います。  最初はインクルード文です。 <syntaxhighlight lang="cpp"> #include <windows.h> #include "resource.h" </syntaxhighlight>  windows.hはwin32アプリ開発では、ほぼ必須とな…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

 前回、示したコードを少しづつ理解してみましょう。全部を理解しようと思わない方がよいです。Win32/64コード。未来永劫、少しでも多くを知ろうというスタンスで良いと思います。


 最初はインクルード文です。


#include <windows.h>
#include "resource.h"


 windows.hはwin32アプリ開発では、ほぼ必須となるような標準的なヘッダファイルです。コンソールアプリケーション開発で使ったcstdio.hやstdio.hのようなものと同等のモノです。


 resource.hはリソースと呼ばれるアイコンやダイアログボックスのようなグラフィカルな要素を含む部品を利用するときに(プロジェクト名).rcでグラフィカルな要素をテキストベースで定義する作業をVisualStudioのような開発アプリでは、視覚的なUIのリソースエディタで操作することで、定義のコード自動生成するもので、resource.hにはリソース部品に使われるIDと呼ばれるテキストコードに対応する番号を管理するようなファイルで、リソースエディタで操作すると、自動で編集されるものです。最初のうちは、あまり理解できないでしょう。メニューバーやアイコンやダイアログボックスを表示させるようなアプリを作り始めたら、理解が深く進んでいくものです。


 次に以下のような定義についてです。


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
wchar_t szClassName[] = L"SimpleEditWindow";
HWND HWNDg_hEdit;
HWND HWNDg_hWnd;
HINSTANCE HINSTANCEg_hInst;


 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);は関数のプロトタイプ宣言です。WinMainという関数がコンソールアプリでいうところのmain関数にあたりますが、WndProcのような関数はWimMain関数側で作成するWindowアプリが必ず定義する必要のあるウィンドウプロシージャーというメッセージ処理関数です。


 Windowsアプリはウィンドウの構造をプログラムによって構築していく部分とOS側からのマウス操作やキー操作やウィンドウについている各種ボタンを操作したときに信号が送られるようになっています。これをウィンドウプロシージャーと呼ばれるメッセージ処理関数でどのような処理を行うかをコードで表現することで実現されます。ウィンドウを生成するときに、そのセットになるウィンドウプロシージャ関数名も設定するようになっています。


 他にもウィンドウプロシージャ関数はダイアログボックスを作るときにも定義できるようになっていますので、ひとつのアプリケーションで複数のウィンドウプロシージャ関数によりメッセージ処理を行うことになります。


 wchar_t szClassName[] = L"SimpleEditWindow";ではウィンドウを作るときに名づけが必要になるので作ったワイド文字列です。適当な値でいいでしょう。L""はwcha_t型のワイド文字列を設定するときに使うリテラル(変数をもたない文字列)の定義方法です。ワイド文字列はマルチバイト文字列という方式に相対する文字列の方式です。