ちゃんとした書籍を所持していないため,ネットで調べただけなのですが,どのサイトを調べてもWNDCLASSEX構造体が何のためにあるのかが,わかりません.
自分はメンバ変数の内容を見て,思うに,ボタンやテキストボックスなどを配置しているウインドウについての設定及び,そのウインドウのコントロール化における,マウスポインタの仕様などなどを決めているものだと思ってます.
また,もしこの考えが間違っていないとするならばウインドウ一つにつき,WNDCLASSEX構造体は一つ必要なのでしょうか?
基本的にはその通りですが例外もあります。
最近はVisual Studioなどの開発ツールを使ってGUIを設計することが多いですが、Win32 APIを使ってウィンドウを作成したり、ウィンドウの設定を変更する際にはWNDCLASSEXを引数として与える必要があります。
用途としてはeida_227さんの書かれている通りで、ウィンドウに対してアイコンやマウスカーソル、メニューなどを指定する際に使用します。特に重要なのはウィンドウプロシージャの設定で、この関数でウィンドウに対して送られる全メッセージを処理することになります。
さて、ウィンドウ毎に必要なのはその通りですが、Windowsの場合、ボタンやエディットボックス、ラベルといった各要素も「見た目や機能がボタンになっているウィンドウ」、「見た目や機能がラベルになっているウィンドウ」となります。
Visual Studioをお持ちであればスタート>Visual Studio.NETツール>Spy++を起動して、ウィンドウの一覧を見てみるとウィンドウの子要素として様々なウィンドウ(ボタンやラベル)があるのが見えて面白いかと思います。
さて、例外です。
WNDCLASSEXは見た目やメッセージを処理する関数を定義するわけですが、ボタンの見た目はどれも一緒ですので、WNDCLASSEXも同じもの(Button)を再利用します。
つまり、同じ見た目のウィンドウを複数作るのであれば、WNDCLASSEXは一度だけ登録して、複数回CreateWindowEx APIを呼ぶことになりますね。
この質問の答えをご存知ですか? ぜひ質問者に伝えてあげてください (サインインすると、回答フォームが表示されます)。
サインイン