社区
图形处理/算法
帖子详情
关于ID3DXFont.DrawText和窗口最小化的问题
fangkmjo
2008-11-03 04:44:01
我用ID3DXFont.DrawText方法绘制文字,没有什么问题,但是如果把绘制窗口最小化后
再正常显示,程序就死了。这是为什么啊,怎么解决?很急啊
...全文
414
8
打赏
收藏
关于ID3DXFont.DrawText和窗口最小化的问题
我用ID3DXFont.DrawText方法绘制文字,没有什么问题,但是如果把绘制窗口最小化后 再正常显示,程序就死了。这是为什么啊,怎么解决?很急啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wanglei5695312
2010-04-20
打赏
举报
回复
顶了,学习中
DarknessTM
2008-11-04
打赏
举报
回复
那D3D8的 ID3DXFont 是如何恢复设备的?
fangkmjo
2008-11-04
打赏
举报
回复
DarknessTM大侠, 我用的是D3D8啊,ID3DXFont接口没有OnLostDevice 和OnResetDevice方法
DarknessTM
2008-11-04
打赏
举报
回复
我晕啊,你难道在每次reset的时候创建一次?
最先hook的应该是 IDirect3D8 的 CreateDevice 方法,在创建好设备后,就创建你的 ID3DXFont
然后hook Present
进行如下操作
IDirect3DDevice8::BeginScene
ID3DXFont::DrawText
IDirect3DDevice8::EndScene
IDirect3DDevice8::Present
此外hook Reset
进行如下操作
ID3DXFont::OnLostDevice
IDirect3DDevice8::Reset
ID3DXFont::OnResetDevice
fangkmjo
2008-11-04
打赏
举报
回复
DarknessTM大侠,
我照你的方法还是不行啊,我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;
}
DarknessTM
2008-11-04
打赏
举报
回复
你就不能再hook下Reset啊,然后把你的资源reset
fangkmjo
2008-11-04
打赏
举报
回复
Silenker大哥,我是HOOK别的DirectX程序的Direct3DCreate8函数的,所有的调用都还是转发给DirectX API了
我只是在屏幕上显示文字,代码如下:
....
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;
}
您帮我看看啊,我不知道怎么搞
引力场变动源
2008-11-03
打赏
举报
回复
在窗体最小化以后,D3D会丢失设备,需要进行重置。重置的时候需要释放所有非Managered的资源,然后调用device的Reset方法。
详细的可以上网搜索一下“D3D 设备重置”。
关于
窗口
最
小化
问题
关于
窗口
最
小化
问题
VCL组件开发及应用http://www.delphi2007.net/DelphiVCL/html/delphi_20061226141648106.html 我想在点击
窗口
最
小化
按钮时触发某个事件,请教我该怎么做??? unit Unit1; interface uses Windows, ...
桌面计算机任务栏
窗口
不能最大化,任务栏不能最
小化
窗口
怎么解决
任务栏是管理所有应用程序的地方,如果打开的应用程序
窗口
太多,可以最
小化
到任务栏,系统总会出一些毛病,把应用程序最
小化
后,发现任务栏没有最
小化
窗口
,遇到这样
问题
该如何处理呢?下面是学习小编给大家整理的有关介绍任务栏不显示最
小化
窗口
的解决方法,希望对大家有帮助!任务栏不显示最
小化
窗口
的解决方法方法一:可以先看看任务栏隐藏属性是否开启了,可能影响到最
小化
窗口
显示,先在任务栏上右键,选择“属性”。进入属性...
记事本
窗口
最
小化
问题
解决TXT文件打开
窗口
老是最
小化
问题
最近几天,打开记事本文件总是出现记事本
窗口
最
小化
的情况,如多所示:,一直不知道是什么原因。以为是电脑设置
问题
。但是发现同一台机子切换过用户以后,却没有出现这种情况。所以断定这不是电脑设置
问题
。而是个人设置
问题
。查了一些相关资料。终于弄清楚了:这是初始化记事本
窗口
大小的
问题
。在此给大家分享一下,TXT文件打开
窗口
老是最
小化
解决办法: 1、新建记事本文件。
解决NV
id
ia显卡最大化和最
小化
窗口
时的卡顿
问题
解决NV
id
ia显卡最大化和最
小化
窗口
时的卡顿
问题
用SendInput发送Win+D使桌面上所有
窗口
最
小化
写个桌面上所有
窗口
最
小化
的程序竟然碰了一鼻子灰,NND,真想扔机子了! 本来写了个EnumWindows( (WNDENUMPROC)(EnumWindowsProc), 0 );的,然后在EnumWindowsProc里直接最
小化
所有
窗口
,发现用SendMessage和ShowWindow都不行,会把那些本来不显示的
窗口
都搞出来了,不知道是Windows的
问题
还是编译器的
问题
,及其
图形处理/算法
19,457
社区成员
50,704
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章