WMメッセージ関数の引数を変更したい

[戻る]
馬元 2005/02/07(月) 02:24:13
ハジメマシテこんにちわ。

WM_XXXのメッセージを受け取る関数の WPARAM やLPARAMを
毎回キャストせずに、代入を行いたいのです。
マクロみたいなので、 WPARAMやLPARAMをintやcharに変更することが
可能ですか?

とおりすがり 2005/02/07(月) 03:45:42
回答ではありません。
何らかのマクロがあったとしても、そのマクロを記述するのと、(int)というように
キャストを記述するので、手間が変わるかというと疑問です。

# ちゃんとした意味のあるマクロ名で、ソースコードの可読性があがるという代物
# なら、使う価値がありますが。

Ban 2005/02/07(月) 07:44:54
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)

使われてみては(ないものについては参考にされてみては)いかがでしょう。

Ban 2005/02/07(月) 07:46:25
全てのメッセージ用のものがあるわけではありません。
具体的にどんなものがあるかは、ご自身でヘッダを探してみてください。

シャノン 2005/02/07(月) 09:58:40
WindowsX.h に、メッセージクラッカーってのがあります。

RAPT 2005/02/08(火) 01:23:48
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);


などと書けます。

RAPT 2005/02/08(火) 01:24:52
typo.
> AFXNSG.H
AFXMSG.H

にありました。

シャノン 2005/02/08(火) 09:49:49
> VC++6のメッセージクラッカー。

それわメッセージ・マップって言うんでは…?
まぁ、役割は同じですが。
仕組みや使い方は多分に違う気が…

Ban 2005/02/08(火) 10:43:46
> WindowsX.h に、メッセージクラッカーってのがあります。

メッセージクラッカー、知らなかったです。多謝。


>> MFCならVC++6のメッセージクラッカー。
> それわメッセージ・マップって言うんでは…?
> まぁ、役割は同じですが。
> 仕組みや使い方は多分に違う気が…

御意。

(明示はありませんが)質問内容から元質問者は
MFC/WTL 等は使っていないものと認識してました。

RAPT 2005/02/08(火) 21:55:15
失礼。なるほど。勉強になりました。
HANDLE_MSG なんかがメッセージクラッカーと呼ばれるんですね。

WTLの場合、MSG_WM_xxx なんかがAtlCrack.hにあるから、
ON_WM_SIZE() あたりが該当するものかと思っていました。
# それとも、AtlWin.hのMESSAGE_HANDLERがメッセージクラッカーなのかな。

古いスレッドには追加発言できません。