我用ID3DXFont.DrawText方法绘制文字,没有什么问题,但是如果把绘制窗口最小化后
再正常显示,程序就死了。这是为什么啊,怎么解决?很急啊
再正常显示,程序就死了。这是为什么啊,怎么解决?很急啊
解决方案 »
- 为什么内网不能接收ICMP差错报文?
- Windows任务管理器看到的都是用户态进程,没有内核态进程?
- 我要做三维显示,请问这样的数据格式该如何显示
- 专题:VC中的表格/报表控件应用
- _open(fileName, _O_APPEND | _O_BINARY | _O_WRONLY| _O_TRUNC, _S_IREAD | _S_IWRITE);我看了fileName存在,但_open还是等于=-1 WHY?
- 关于vc程序打包问题,谢谢!
- 可编辑CListCtrl的排序问题
- 深入C++的应用
- 如何学编程
- VC使用gsoap开发客户端向java服务端发数据中文乱码?
- 驱动编程如何由进程句柄获得进程名
- 如何截获IE网页中IFRAME的滚动事件
详细的可以上网搜索一下“D3D 设备重置”。
我只是在屏幕上显示文字,代码如下:
....
LOGFONT lf;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 25;
lf.lfWidth = 12;
lf.lfWeight = 500;
lf.lfItalic = false;
lf.lfUnderline = false;
lf.lfStrikeOut = false;
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, "Times New Roman");HFONT hFont;
hFont = CreateFont(12,0,0,0,0,0,0,0,0,0,0,0,0,"Arial");
D3DXCreateFontIndirect( m_pDevice,&lf,&m_lpDXFont);
...
STDMETHOD(EndScene)(THIS)
{
HRESULT hr = m_pDevice->EndScene();RECT rect = {10,10,200,200};
char szText[MAX_PATH] = "掌门人科技";
if( m_pDevice->TestCooperativeLevel() == D3D_OK )
{
m_lpDXFont->DrawText( szText ,- 1,&rect,DT_CENTER,D3DCOLOR_XRG(255,0,255));
}return hr;
}您帮我看看啊,我不知道怎么搞
我照你的方法还是不行啊,我HOOK Reset的代码如下:
STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters)
{
HRESULT hr = m_pDevice->Reset(pPresentationParameters); LOGFONT lf;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 25;
lf.lfWidth = 12;
lf.lfWeight = 500;
lf.lfItalic = false;
lf.lfUnderline = false;
lf.lfStrikeOut = false;
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, "Times New Roman"); HFONT hFont;
hFont = CreateFont(12,0,0,0,0,0,0,0,0,0,0,0,0,"Arial");
D3DXCreateFontIndirect( m_pDevice,&lf,&m_lpDXFont); return hr;
}
最先hook的应该是 IDirect3D8 的 CreateDevice 方法,在创建好设备后,就创建你的 ID3DXFont然后hook Present
进行如下操作
IDirect3DDevice8::BeginScene
ID3DXFont::DrawText
IDirect3DDevice8::EndScene
IDirect3DDevice8::Present
此外hook Reset
进行如下操作ID3DXFont::OnLostDevice
IDirect3DDevice8::Reset
ID3DXFont::OnResetDevice