PostMessage をするとき、引数を LPARAM と WPARAM にキャストするのですが、数が多い場合はキャストするのがどうも面倒です。
ということでこんなのを作ってみました。
template<class WParam, class LParam>
inline BOOL PostMessageT(HWND hWnd, UINT uMsg, WParam wParam, LParam lParam)
{
return ::PostMessage(hWnd, uMsg, (WPARAM)wParam, (LPARAM)lParam);
}
template<class WParam, class LParam>
inline BOOL SendMessageT(HWND hWnd, UINT uMsg, WParam wParam, LParam lParam)
{
return ::SendMessage(hWnd, uMsg, (WPARAM)wParam, (LPARAM)lParam);
}
WPARAM や LPARAM への C スタイルでの変換が可能なら、キャストせずに PostMessage, SendMessage できます。
SendMessageT(hCtrl, CB_ADDSTRING, 0, TEXT("hoge"));
Hoge hoge;
enum EValue { value = 100 };
PostMessageT(hWnd, WM_USER + 100, value, &hoge);
自分の周りの人には好評でした……正直微妙な気分でしたが。
下回りならまだしも、上の方でバリバリに WindowsAPI を直接叩くのは勘弁して下さい……。