MFC在静态文本上使用双缓冲画图
发布网友
发布时间:2022-05-10 08:51
我来回答
共3个回答
热心网友
时间:2023-11-25 11:20
双缓冲想必是你是知道的了。你从CStatic类派生一个自己的静态文本框类CXXStatic,重载OnDrawItem,那个结构体里lpDrawItemStruct(名字好像是这样的)有个结构体里有个CDC的句柄m_hdc(好像是这样的),用这个句柄就是静态控件的绘图句柄,这样使用这个句柄:
CDC dc;
dc.Attach(m_hdc);
//然后就和普通dc一样用了...
CDC memDC;
memDC.Craete...
CBitmap memBmp;
memBmp.Create...
memDC.SelectObject(&memBmp);
memDC....//画图
dc.bitblt(....);//贴上位图
可以禁用对CStaitci::OnDrawItem的调用,应该要设置静态控件为OwnerDraw属性吧,记不清了
如果框架没有自动发送消息给CXXStatic,就自己重载对话框的OnDrawItem,在这里面给静态控件发送WM_DRAWITEM(好像是这个名字,记不清拉)。
大概就是这样的了,和自绘按钮是一样的伎俩。。。。
热心网友
时间:2023-11-25 11:20
void CRussia::DrawJiemian(CDC *pDC)//画界面
{
int nOldDC=pDC->SaveDC();
//背景
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(cBkgound);
//画分数、级别、速度
DrawScore(&memDC);//已实现
CDC memDC1;
memDC1.CreateCompatibleDC(pDC);
memDC1.SelectObject(cBlock);
//画方块
//m_RowCount,m_ColCount为格子行列数
//Russia[][]是存储方块的数组,为1表示当前位置有方块
for(int i=0;i<m_RowCount;i++)
for(int j=0;j<m_ColCount;j++)
if(Russia[i][j]==1)
memDC.BitBlt(j*20+300,i*20+100,20,20,&memDC1,0,0,SRCCOPY);
//预览方块
//Will[4][4]是下一个方块的数组,为1表示当前位置有方块
for(int n=0;n<4;n++)
for(int m=0;m<4;m++)
if(Will[n][m]==1)
memDC.BitBlt(542+m*20,115+n*20,20,20,&memDC1,0,0,SRCCOPY);
pDC->BitBlt(0,0,800,600,&memDC,0,0,SRCCOPY);
pDC->RestoreDC(nOldDC);
}
热心网友
时间:2023-11-25 11:21
差不多就是楼上的这样了。用兼容DC来双缓存的,和静态文本没有多大关系。来自:求助得到的回答