这段程序怎么用??

ayqlj 2003-08-31 09:09:54
为了避免刷新时屏幕闪烁,从别人那里学了一个类,在别人的程序中不闪烁,而我不管怎么用他都闪烁,我自己实在看不出有什么毛病,请教各位.
class CMemDC
{
public:
CMemDC();

CMemDC(HDC hdc,RECT rc)
{
m_hDCold = hdc;
m_hDCMem = CreateCompatibleDC(hdc);

// GetClipBox(hdc,&m_rect);
m_rect = rc;
//
// Create a bitmap big enough for our client rect
//

m_hBMMem = CreateCompatibleBitmap(hdc,
m_rect.right-m_rect.left,
m_rect.bottom-m_rect.top);

//
// Select the bitmap into the off-screen dc
//

m_hBMOld = (HBITMAP) SelectObject(m_hDCMem, m_hBMMem);
SIZE sz;
SetWindowExtEx(m_hDCMem,m_rect.left, m_rect.top,&sz);

}

virtual ~CMemDC()
{
BitBlt(m_hDCold,
m_rect.left, m_rect.top,
m_rect.right-m_rect.left,
m_rect.bottom-m_rect.top,
m_hDCMem,
0, 0,
SRCCOPY);

//
// Done with off screen bitmap and dc
//

SelectObject(m_hDCMem, m_hBMOld);
DeleteObject(m_hBMMem);
DeleteDC(m_hDCMem);

}

HDC GetDC() {return m_hDCMem;}
private:
HDC m_hDCold,m_hDCMem;
HBITMAP m_hBMMem, m_hBMOld;
RECT m_rect;
};

HRESULT OnDraw(ATL_DRAWINFO& di)
{
RECT rc;
GetClientRect(&rc);
CMemDC dc(di.hdcDraw,rc);
DrawAll(dc.GetDC(),rc);
return S_OK;
}



void CLtlGrid::DrawAll(HDC hDC, RECT rc)
{
Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom);

SetTextAlign(hDC, TA_CENTER|TA_BASELINE);
LPCTSTR pszText = _T("ATL 3.0 : LtlGrid");
TextOut(hDC,
(rc.left + rc.right) / 2,
(rc.top + rc.bottom) / 2,
pszText,
lstrlen(pszText));

}
...全文
69 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
atEleven 2003-08-31
  • 打赏
  • 举报
回复
在WM_PAINT消息发送之前,需要先确定是否刷新背景以及用什么Brush刷新背景.这就是WM_ERASEBKGRD消息.

因为你是使用MEMDC的位图直接复制到当前DC的,返回TRUE,表示不刷新窗口背景.

ayqlj 2003-08-31
  • 打赏
  • 举报
回复
atEleven 你说的是对的。
你能解释一下为什么 OnEraseBkgrd消息直接返回TRUE 屏幕就不在闪烁吗?
ayqlj 2003-08-31
  • 打赏
  • 举报
回复
这是在ATL中,楼上的我不太清楚你的意思能解释一下吗?
atEleven 2003-08-31
  • 打赏
  • 举报
回复
需要处理

OnEraseBkgrd消息直接返回TRUE;
紫郢剑侠 2003-08-31
  • 打赏
  • 举报
回复
UP
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧