利点は、
・Visual Studio上でマクロの定義がポップアップヘルプ代わりになる
・SendMessageで未使用の引数0だったものがなくなり惑わされない
・戻り値型がキャスト済みで便利
とかですかね。
パッチの内容の範囲では、特に問題はないようです。
コードの見た目はよくなると思います。
#VS2005だと CDlgFind.cpp の ::DlgItem_SetText のポップアップがなんかおかしい。なんでだろう
----
ただし私はどちらかというと WindowsX.h 使用禁止にしたいんですがだめですか。
MSDN にも、載っていたり載っていなかったりして不便で、載っていても結局ウィンドウメッセージを見に行かないといけない。
(VC6系のヘルプで飛べないので個人的にすごく不便)
マクロはCスタイルキャストで実装されていて前時代的。
定義が被っていたりすると怖い。
さらにSDKのものを見くらべると、ヘッダファイルの内容がたまに間違っていて、あとで修正されてる。
あと SendMessageAny をわざわざ SendMessage に戻す理由はなんですか?
いまは、TCHAR混在でAnyかどうか気になることがあります。
(AnyがAnycastみたいだというのはマイナスポイント)
参考にcommctrlのほうのコードですがどうおもいますか?
これ、警告レベルを上げても警告なしにコンパイルできるとおいます。
#include <windows.h>
#include <commctrl.h>
HWND hwnd = NULL;
int i = 2;
RECT itemRect;
CHAR* testA = NULL;
TabCtrl_GetItemRect( hwnd, i, &itemRect );
TabCtrl_GetItemRect( hwnd, i, testA );
TabCtrl_GetItemRect( hwnd, &itemRect, i );
const int countMacro = TabCtrl_GetItemCount( hwnd );
::SendMessage( hwnd, TCM_GETITEMRECT, i, (LPARAM)&itemRect );
::SendMessage( hwnd, TCM_GETITEMRECT, (LPARAM)&itemRect, (WPARAM)i );
const int countApi = ::SendMessage( hwnd, TCM_GETITEMRECT, 0, 0 );
もちろん、SendMessageは HWND UINT WPARAM LPARAM です。
SendMessage + キャストだと「ん?危ないかも」と思えます。
マクロだと臭いものにフタをしただけで、K&Rとかベーシックみたいな危うさを感じます。
ApiWrap は すばらしいと思うのだけど using namespace されていて、
普通のマクロと見た目が完全に同じだから、どれがAipWrapか名前を覚えるまで、エディタ上とかsvnの差分表示だとコードを読むときの効率が悪いなぁと。