閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

windowsx.h

最近知ったんですが、 windowsx.h という Windows プログラミングに役立つ C(C++) のマクロがたくさん定義されているファイルがあるそうです。軽く覗いてみましたが、なかなか使えそうです。

例えば GDI オブジェクトをデバイスコンテキストに関連付けるのに、オブジェクトがペンだろうがブラシだろうが SelectObject 関数を使いますが、このヘッダには SelectPen や SelectBrush など、関連付けるオブジェクトの型 (というかなんというか) を意識しやすくなるマクロが定義されています。マクロの内容は結局 SelectObject の呼び出しになるわけですが、目に入るソースでこういうわかりやすい名前が使用できるのは十分価値がありそうです。

他にも Win32API にはひとつの API で複数の機能を持ったものがあり、機能を引数で分岐するものがありますが、これを別名定義して引数を省略できるようになっているマクロもあります。例えばウィンドウのサブクラス化をする時、 SetWindowLongPtr 関数の引数に GWL_WNDPROC 定数と関数ポインタを渡して実現しますが、このヘッダには SubclassWindow というマクロが定義されていて、前述の定数を渡す必要が無くなり簡潔に書けるようになっています。

普段はクラスライブラリを使っているので API を呼び出すことはそうそうないですが、今度使う機会があったらこのヘッダも有効活用してみたいなと思いました。