BitBlt返回正确,屏幕却没有刷新 我的一个图形显示程序,运行一段时间后,出现图形不更新现象,查看数据是正常更新的,BitBlt()返回值跟踪是正确的,但界面上没有显示出来,原因可能是什么,敬请指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你在什么地方bitblt的也许刷了后 在OnDraw中又擦掉了 看看SelectObject是不是正确调用了 多谢各位指点,我的绘图原理如下1:vc单文挡模式下,Instance()入口函数内窗口调用后,启动一个绘图线程;2:绘图先在内寸位图对应的DC,然后BitBlt到屏幕DC上.3.GDI 对象使用步骤如下:CPen,CBrush,CFont,先selectobject,同时保存旧windows句柄,用完后释放 CFont* oldFont = NULL; HFONT hFont = NULL; CPen* oldPen = NULL; HPEN hPen = NULL; CBrush* oldBrush = NULL; HBRUSH hBrush = NULL; oldPen = CCom::s_pDc.SelectObject(&CCom::s_pPen_0_0_255_1); hPen = (HPEN)oldPen->GetSafeHandle(); m_pBrush=&CCom::s_pBrush_0_0_0; oldBrush = CCom::s_pDc.SelectObject(m_pBrush); hBrush = (HBRUSH)oldBrush->GetSafeHandle(); CFont Font; Font.CreateFontIndirect(&m_logFont); oldFont = CCom::s_pDc.SelectObject(&Font); hFont = (HFONT)oldFont->GetSafeHandle();............................................ CCom::s_pDc.SelectObject(CPen::FromHandle(hPen)); CCom::s_pDc.SelectObject(CBrush::FromHandle(hBrush)); CCom::s_pDc.SelectObject(CFont::FromHandle(hFont)); Font.DeleteObject(); 把你这段代码,放到一个CView派生类的OnDraw看能不能画出能,说明你调用的场合有问题;如果不能,说明你的绘制过程有问题 你必须在要画的窗体上画图,就是要得到这个窗体的dc,在这个dc中画图 估计是GDI资源没有释放,我刚处理了一个这样的问题 多谢各位同仁指点,好象是调试方式下运行出这个问题,GDI资源应该是释放了,通过句柄对象释放的. 你启动的是UI线程?还是工作者线程?好像不能在工作者线程里面做更新UI的动作。 在Instance()中启动绘图线程的时候,把View的DC传进去然后在这个DC上绘图试试 CFont* oldFont = NULL; /////////////////////////////////////////你太有才了!CFont* oldFont = new CFont;.........用完了以后:if(oldFont){ delete oldFont ; oldFont = NULL;} 一个关于Scroll bar 的问题 关于WaitForSingleObject总是超时的问题 放假了,在西安有要实习生的公司没 头疼的问题,关于从整数找回对应ID号的问题? 这个问题问了好长时间都没有人回答,请大家进来帮帮忙!!! 有人用过stun吗,请指教 [急]VARIANT->CString字符串转换出现链接错误 有谁知道http隧道技术或者命名服务器? 在UDP连接中,客户端,是怎么告诉服务器自身的网络地址的?在线等! 寻求队友!!!! SortChildrenCB问题! #include "view2.h" 自定义分割视图,应该放到哪里?(求助)
也许刷了后 在OnDraw中又擦掉了
1:vc单文挡模式下,Instance()入口函数内窗口调用后,启动一个绘图线程;
2:绘图先在内寸位图对应的DC,然后BitBlt到屏幕DC上.
3.GDI 对象使用步骤如下:
CPen,CBrush,CFont,先selectobject,同时保存旧windows句柄,用完后释放
CFont* oldFont = NULL;
HFONT hFont = NULL;
CPen* oldPen = NULL;
HPEN hPen = NULL;
CBrush* oldBrush = NULL;
HBRUSH hBrush = NULL;
oldPen = CCom::s_pDc.SelectObject(&CCom::s_pPen_0_0_255_1);
hPen = (HPEN)oldPen->GetSafeHandle();
m_pBrush=&CCom::s_pBrush_0_0_0;
oldBrush = CCom::s_pDc.SelectObject(m_pBrush);
hBrush = (HBRUSH)oldBrush->GetSafeHandle();
CFont Font;
Font.CreateFontIndirect(&m_logFont);
oldFont = CCom::s_pDc.SelectObject(&Font);
hFont = (HFONT)oldFont->GetSafeHandle();
............................................
CCom::s_pDc.SelectObject(CPen::FromHandle(hPen));
CCom::s_pDc.SelectObject(CBrush::FromHandle(hBrush));
CCom::s_pDc.SelectObject(CFont::FromHandle(hFont));
Font.DeleteObject();
能,说明你调用的场合有问题;如果不能,说明你的绘制过程有问题
好像不能在工作者线程里面做更新UI的动作。
然后在这个DC上绘图试试
/////////////////////////////////////////
你太有才了!
CFont* oldFont = new CFont;
...
...
...
用完了以后:
if(oldFont)
{
delete oldFont ;
oldFont = NULL;
}