melt日記

.NETすらまともに扱えないへたれのページ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  111  : 記事  3  : コメント  8268  : トラックバック  41

ニュース

わんくま同盟

わんくま同盟

C# と VB.NET の質問掲示板

iKnow!


Dictation



書庫

2008年4月15日 #

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 を直接叩くのは勘弁して下さい……。

posted @ 10:50 | Feedback (29)