MSDNが戻り値の型が HFONT であると述べている場合HFONT childfont = SendMessage (childwin, WM_GETFONT, NULL, NULL);
、実行すると、「'LRESULT' から 'HFONT__*' への変換が無効です」というエラーが発生します。この関数の適切な戻り値の型は何ですか? LRESULT だけを使用する必要がありますか、それとも何か特別なことをしなければならないのでしょうか?
2052 次
2 に答える
4
SendMessage
非常に多くの目的で使用されるため、すべてに対して完璧な戻り値の型を持つことはできません。この場合、必要な型にキャストする必要があります。
HFONT childfont = reinterpret_cast<HFONT>(SendMessage(...));
のハンドラーではWM_GETFONT
、次のようなものが表示されると予想されます。
HFONT whateverFont;
...
return (LRESULT)whateverFont;
したがって、元の状態に戻すことは問題ありませHFONT
ん。
于 2013-01-22T20:44:44.420 に答える
4
SendMessage
はスイス アーミー ナイフです。さまざまなことを行い、そのすべてがさまざまな型の値を返します。C はオーバーロードされた戻り値をサポートしていないため (Win32 API は C API であることを思い出してください)、ジェネリックLRESULT
型を返す必要があります。
したがって、結果を実際の型にキャストする必要があります。ドキュメントには、このメッセージが を返すと記載されているHFONT
ため、結果を にキャストする必要がありますHFONT
。
HFONT childFont = (HFONT)SendMessage(childWin, WM_GETFONT, ...);
または、多くのユーティリティ マクロを含むGetWindowFont()
ヘッダー ファイルで定義されたマクロを使用することもできます。<WindowsX.h>
// From WindowsX.h. SNDMSG is a macro which expands to either SendMessage or
// AfxSendMessage.
#define GetWindowFont(hwnd) FORWARD_WM_GETFONT((hwnd), SNDMSG)
#define FORWARD_WM_GETFONT(hwnd, fn) \
(HFONT)(UINT_PTR)(fn)((hwnd), WM_GETFONT, 0L, 0L)
// Example usage:
HFONT childFont = GetWindowFont(childWin);
于 2013-01-22T20:45:10.520 に答える