我想在DirectX游戏中绘制文本,所以我注入了一个挂钩EndPaint的DLL。我的逻辑是,因为EndPaint应该是WM_PAINT操作的最后一步,所以我可以在我的钩子中绘制文本,然后自己调用EndPaint。通过这样做,我完全避免使用DX接口。
问题是它什么都没做。这是我的代码。
#include <windows.h>
#include "Hooks.h"
static const TCHAR g_cszMessage[] = TEXT("utterly fantastic");
BOOL (WINAPI * _EndPaint)(__in HWND hWnd, __in const LPPAINTSTRUCT lpPaint) = EndPaint;
BOOL WINAPI EndPaintHook(__in HWND hWnd, __in const LPPAINTSTRUCT lpPaint)
{
// write message
TextOut(lpPaint->hdc, 0, 0, g_cszMessage, lstrlen(g_cszMessage));
GdiFlush();
// return original
return _EndPaint(hWnd, lpPaint);
}
BOOL APIENTRY DllMain(__in HINSTANCE hModule, __in DWORD fdwReason, __in __reserved LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
if (AttachHook(reinterpret_cast<PVOID*>(&_EndPaint), EndPaintHook))
{
DisableThreadLibraryCalls(hModule);
break;
}
return FALSE;
case DLL_PROCESS_DETACH:
DetachHook(reinterpret_cast<PVOID*>(&_EndPaint), EndPaintHook);
break;
}
return TRUE;
}
我知道问题不在于我的AttachHook
/ DetachHook
函数,因为我已经通过消息框测试并确认已安装了挂钩。文字根本没有出现。
任何人都有任何想法?我真的不想挂钩DX界面。它不应该以任何方式工作,因为WM_PAINT仍在基级使用吗?
提前致谢。
答案 0 :(得分:1)
您最好挂钩DirectX的礼物,然后使用ID3DXFont进行一些字体渲染。 AFAIK WM_PAINT不用于DirectX渲染。