ハジメマシテこんにちわ。
WM_XXXのメッセージを受け取る関数の WPARAM やLPARAMを
毎回キャストせずに、代入を行いたいのです。
マクロみたいなので、 WPARAMやLPARAMをintやcharに変更することが
可能ですか?
回答ではありません。
何らかのマクロがあったとしても、そのマクロを記述するのと、(int)というように
キャストを記述するので、手間が変わるかというと疑問です。
# ちゃんとした意味のあるマクロ名で、ソースコードの可読性があがるという代物
# なら、使う価値がありますが。
winuser.h (windows.h からも呼ばれる)に例えばこんなものがあります。
#define MAKEWPARAM(l, h) ((WPARAM)(DWORD)MAKELONG(l, h))
#define MAKELPARAM(l, h) ((LPARAM)(DWORD)MAKELONG(l, h))
#define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) &
~FAPPCOMMAND_MASK))
#define GET_DEVICE_LPARAM(lParam) ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK)
)
#define GET_MOUSEORKEY_LPARAM GET_DEVICE_LPARAM
#define GET_FLAGS_LPARAM(lParam) (LOWORD(lParam))
#define GET_KEYSTATE_LPARAM(lParam) GET_FLAGS_LPARAM(lParam)
使われてみては(ないものについては参考にされてみては)いかがでしょう。
全てのメッセージ用のものがあるわけではありません。
具体的にどんなものがあるかは、ご自身でヘッダを探してみてください。
WindowsX.h に、メッセージクラッカーってのがあります。
VC++6のメッセージクラッカー。
MFCなら、AFXNSG.Hにあって、
BEGIN_MSG_MAP(CTESTDlg)
ON_WM_SIZE()
END_MSG_MAP()
void OnSize(UINT, int, int);
WTL7.0なら、atlcrack.hにあって、
BEGIN_MSG_MAP_EX(CTESTDlg)
MSG_WM_SIZE(OnSize)
END_MSG_MAP()
void OnSize(UINT, CSize);
などと書けます。
typo.
> AFXNSG.H
AFXMSG.H
にありました。
> VC++6のメッセージクラッカー。
それわメッセージ・マップって言うんでは…?
まぁ、役割は同じですが。
仕組みや使い方は多分に違う気が…
> WindowsX.h に、メッセージクラッカーってのがあります。
メッセージクラッカー、知らなかったです。多謝。
>> MFCならVC++6のメッセージクラッカー。
> それわメッセージ・マップって言うんでは…?
> まぁ、役割は同じですが。
> 仕組みや使い方は多分に違う気が…
御意。
(明示はありませんが)質問内容から元質問者は
MFC/WTL 等は使っていないものと認識してました。
失礼。なるほど。勉強になりました。
HANDLE_MSG なんかがメッセージクラッカーと呼ばれるんですね。
WTLの場合、MSG_WM_xxx なんかがAtlCrack.hにあるから、
ON_WM_SIZE() あたりが該当するものかと思っていました。
# それとも、AtlWin.hのMESSAGE_HANDLERがメッセージクラッカーなのかな。